From owner-xfs@oss.sgi.com Tue Apr 1 03:54:15 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 03:54:24 -0700 (PDT) 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,STOX_REPLY_TYPE 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 m31AsCZf019813 for ; Tue, 1 Apr 2008 03:54:15 -0700 X-ASG-Debug-ID: 1207047285-562601da0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo201.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0868A71FB12 for ; Tue, 1 Apr 2008 03:54:45 -0700 (PDT) Received: from tyo201.gate.nec.co.jp (TYO201.gate.nec.co.jp [202.32.8.193]) by cuda.sgi.com with ESMTP id kkOsEnCzEHwgECVp for ; Tue, 01 Apr 2008 03:54:45 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate53F.nec.co.jp [10.7.69.162]) by tyo201.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m31Asipx028227; Tue, 1 Apr 2008 19:54:44 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m31Ashm26568; Tue, 1 Apr 2008 19:54:43 +0900 (JST) Received: from togyo.jp.nec.com (togyo.jp.nec.com [10.26.220.4]) by mailsv4.nec.co.jp (8.13.8/8.13.4) with ESMTP id m31Ash5A016406; Tue, 1 Apr 2008 19:54:43 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Tue, 1 Apr 2008 19:54:43 +0900 Message-Id: <2530BB4B166747659C8F65C9C3DE7CFB@nsl.ad.nec.co.jp> From: "Takashi Sato" To: "David Chinner" Cc: "David Chinner" , , , , , References: <20080328180736t-sato@mail.jp.nec.com> <20080331000057.GI108924158@sgi.com> In-Reply-To: <20080331000057.GI108924158@sgi.com> X-ASG-Orig-Subj: Re: [RFC PATCH 2/2] Add timeout feature Subject: Re: [RFC PATCH 2/2] Add timeout feature Date: Tue, 1 Apr 2008 19:54:42 +0900 MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Windows Mail 6.0.6000.16480 X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6000.16545 X-Barracuda-Connect: TYO201.gate.nec.co.jp[202.32.8.193] X-Barracuda-Start-Time: 1207047289 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.1, rules version 3.1.46520 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15116 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs Hi, David Chinner wrote: > The timeout is not for the freeze operation - the timeout is > only set up once the freeze is complete. i.e: > > $ time sudo ~/test_src/xfs_io -f -x -c 'gfreeze 10' /mnt/scratch/test > freezing with level = 10 > > real 0m23.204s > user 0m0.008s > sys 0m0.012s > > The freeze takes 23s, and then the 10s timeout is started. So > this timeout does not protect against freeze_bdev() hangs at all. > All it does is introduce silent unfreezing of the block device that > can not be synchronised with the application that is operating > on the frozen device. Exactly my timeout feature is only for an application, not for freeze_bdev(). I think it is needed for the situation we can't unfreeze from userspace. (e.g. Freezing the root filesystem) > FWIW, resetting this timeout from userspace is unreliable - there's > no guarantee that under load your userspace process will get to run > again inside the timeout to reset it, hence leaving you with a > unfrozen filesystem when you really want it frozen... The timeout period specified to the reset ioctl should be much larger than the interval for calling the reset ioctl repeatedly. (e.g timeout period = 2 minutes, calling interval = 5 seconds) The reset ioctl will work under such setting. If a timeout still occurs before a reset, it would imply that an unexpected problem (e.g. deadlock) occur in an application. Cheers, Takashi From owner-xfs@oss.sgi.com Tue Apr 1 05:00:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 05:00:17 -0700 (PDT) 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 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 m31C072n001075 for ; Tue, 1 Apr 2008 05:00:09 -0700 X-ASG-Debug-ID: 1207051242-1da2025b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 589EC126E470 for ; Tue, 1 Apr 2008 05:00:42 -0700 (PDT) Received: from smtp7-g19.free.fr (smtp7-g19.free.fr [212.27.42.64]) by cuda.sgi.com with ESMTP id 2UuA7V0r8wBjabRR for ; Tue, 01 Apr 2008 05:00:42 -0700 (PDT) Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by smtp7-g19.free.fr (Postfix) with ESMTP id DB223322882; Tue, 1 Apr 2008 14:00:41 +0200 (CEST) Received: from galadriel.home (pla78-1-82-235-234-79.fbx.proxad.net [82.235.234.79]) by smtp7-g19.free.fr (Postfix) with ESMTP id 8F95632286A; Tue, 1 Apr 2008 14:00:41 +0200 (CEST) Date: Tue, 1 Apr 2008 14:00:35 +0200 From: Emmanuel Florac To: David Chinner Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Serious XFS crash Subject: Re: Serious XFS crash Message-ID: <20080401140035.46470306@galadriel.home> In-Reply-To: <20080325233611.GW103491721@sgi.com> References: <20080325185453.3a1957dd@galadriel.home> <20080325233611.GW103491721@sgi.com> Organization: Intellique X-Mailer: Claws Mail 2.9.1 (GTK+ 2.8.20; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp7-g19.free.fr[212.27.42.64] X-Barracuda-Start-Time: 1207051243 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.1, rules version 3.1.46522 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m31C092n001077 X-archive-position: 15117 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Wed, 26 Mar 2008 10:36:11 +1100 vous écriviez: > What sector size is being used for the XFS filesystem? If it's > not the same as teh filesystem block size, then XFS can't have done > this itself because the offset that this garbage starts at would > not be block aligned..... I've gone thru the logs. This machine had a serious XFS crash on march 6 due to bad blocks (failed drive in the RAID-5). Is it possible that the March 19 XFS crash is related to this, i. e. after running xfs_repair on march 6 it remained some on-disk garbage that provoked a new crash a couple of weeks later? Here is the march 6 crash : Mar 6 10:42:46 system3 kernel: [xfs_alloc_read_agf+244/432] xfs_alloc_read_agf+0xf4/0x1b0 Mar 6 10:42:46 system3 kernel: [xfs_alloc_fix_freelist+1000/1120] xfs_alloc_fix_freelist+0x3e8/0x460 Mar 6 10:42:46 system3 last message repeated 2 times Mar 6 10:42:46 system3 kernel: [_xfs_trans_commit+489/928] _xfs_trans_commit+0x1e9/0x3a0 Mar 6 10:42:46 system3 kernel: [xfs_free_extent+152/224] xfs_free_extent+0x98/0xe0 Mar 6 10:42:46 system3 kernel: [xfs_bmap_finish+263/400] xfs_bmap_finish+0x107/0x190 Mar 6 10:42:46 system3 kernel: [xfs_itruncate_finish+544/976] xfs_itruncate_finish+0x220/0x3d0 Mar 6 10:42:46 system3 kernel: [xfs_trans_ijoin+43/128] xfs_trans_ijoin+0x2b/0x80 Mar 6 10:42:46 system3 kernel: [xfs_inactive+1195/1296] xfs_inactive+0x4ab/0x510 Mar 6 10:42:46 system3 kernel: [xfs_fs_clear_inode+156/192] xfs_fs_clear_inode+0x9c/0xc0 Mar 6 10:42:46 system3 kernel: [invalidate_inode_buffers+21/112] invalidate_inode_buffers+0x15/0x70 Mar 6 10:42:46 system3 kernel: [clear_inode+212/320] clear_inode+0xd4/0x140 Mar 6 10:42:46 system3 kernel: [truncate_inode_pages+23/32] truncate_inode_pages+0x17/0x20 Mar 6 10:42:46 system3 kernel: [generic_delete_inode+264/272] generic_delete_inode+0x108/0x110 Mar 6 10:42:46 system3 kernel: [iput+83/112] iput+0x53/0x70 Mar 6 10:42:46 system3 kernel: [do_unlinkat+186/272] do_unlinkat+0xba/0x110 Mar 6 10:42:46 system3 kernel: [sys_fcntl64+89/144] sys_fcntl64+0x59/0x90 Mar 6 10:42:46 system3 kernel: [syscall_call+7/11] syscall_call+0x7/0xb Mar 6 10:42:46 system3 kernel: xfs_force_shutdown(md0,0x8) called from line 4267 of file fs/xfs/xfs_bmap.c. Return address = 0xc0256b29 Mar 6 10:51:19 system3 kernel: 3w-9xxx: scsi0: AEN: WARNING (0x04:0x0023): Sector repair completed:port=6, LBA=0xE6E00. Mar 6 10:51:20 system3 kernel: 3w-9xxx: scsi0: AEN: WARNING (0x04:0x0023): Sector repair completed:port=6, LBA=0xE6DCA. -- -------------------------------------------------- Emmanuel Florac www.intellique.com -------------------------------------------------- From owner-xfs@oss.sgi.com Tue Apr 1 05:15:47 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 05:15:54 -0700 (PDT) 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,J_CHICKENPOX_24, J_CHICKENPOX_53 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 m31CFimi003143 for ; Tue, 1 Apr 2008 05:15:47 -0700 X-ASG-Debug-ID: 1207052180-5002001d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo201.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2BDFD72047F for ; Tue, 1 Apr 2008 05:16:20 -0700 (PDT) Received: from tyo201.gate.nec.co.jp (TYO201.gate.nec.co.jp [202.32.8.193]) by cuda.sgi.com with ESMTP id IGMg2GftSWpUw1iF for ; Tue, 01 Apr 2008 05:16:20 -0700 (PDT) Received: from mailgate4.nec.co.jp ([10.7.69.184]) by tyo201.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m31CGIZw000059; Tue, 1 Apr 2008 21:16:18 +0900 (JST) Received: (from root@localhost) by mailgate4.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m31CGIR06923; Tue, 1 Apr 2008 21:16:18 +0900 (JST) Received: from kaishu.jp.nec.com (kaishu.jp.nec.com [10.26.220.5]) by mailsv.nec.co.jp (8.13.8/8.13.4) with ESMTP id m31CGHkb009544; Tue, 1 Apr 2008 21:16:17 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Tue, 1 Apr 2008 21:16:15 +0900 To: David Chinner Cc: "linux-fsdevel@vger.kernel.org" , "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "dm-devel@redhat.com" , "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: [RFC PATCH 0/3] freeze feature ver 1.1 Subject: [RFC PATCH 0/3] freeze feature ver 1.1 Message-Id: <20080401211614t-sato@mail.jp.nec.com> Mime-Version: 1.0 X-Mailer: WeMail32[2.51] ID:1K0086 From: Takashi Sato Date: Tue, 1 Apr 2008 21:16:14 +0900 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Barracuda-Connect: TYO201.gate.nec.co.jp[202.32.8.193] X-Barracuda-Start-Time: 1207052181 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.1, rules version 3.1.46524 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15118 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs Hi, David Chinner wrote: > Patch below to remove the XFS specific ioctl interfaces for this > functionality. Thank you very much for your patch to remove the XFS specific code. I have merged your patch into 2.6.25-rc7 and included it in the freeze patch-set as the following [PATCH 2/3]. [PATCH 1/3] Implement generic freeze feature The ioctls for the generic freeze feature are below. o Freeze the filesystem int ioctl(int fd, int FIFREEZE, arg) fd: The file descriptor of the mountpoint FIFREEZE: request code for the freeze arg: Ignored Return value: 0 if the operation succeeds. Otherwise, -1 o Unfreeze the filesystem int ioctl(int fd, int FITHAW, arg) fd: The file descriptor of the mountpoint FITHAW: request code for unfreeze arg: Ignored Return value: 0 if the operation succeeds. Otherwise, -1 [PATCH 2/3] Remove XFS specific ioctl interfaces for freeze feature It removes XFS specific ioctl interfaces and request codes for freeze feature. This patch has been supplied by David Chinner. [PATCH 3/3] Add timeout feature The timeout feature is added to freeze ioctl. And new ioctl to reset the timeout period is added. o Freeze the filesystem int ioctl(int fd, int FIFREEZE, long *timeval) fd: The file descriptor of the mountpoint FIFREEZE: request code for the freeze timeval: the timeout period in seconds If it's 0 or 1, the timeout isn't set. This special case of "1" is implemented to keep the compatibility with XFS applications. Return value: 0 if the operation succeeds. Otherwise, -1 o Reset the timeout period This is useful for the application to set the timeval more accurately. For example, the freezer resets the timeval to 10 seconds every 5 seconds. In this approach, even if the freezer causes a deadlock by accessing the frozen filesystem, it will be solved by the timeout in 10 seconds and the freezer can recognize that at the next reset of timeval. int ioctl(int fd, int FIFREEZE_RESET_TIMEOUT, long *timeval) fd:file descriptor of mountpoint FIFREEZE_RESET_TIMEOUT: request code for reset of timeout period timeval: new timeout period in seconds Return value: 0 if the operation succeeds. Otherwise, -1 Error number: If the filesystem has already been unfrozen, errno is set to EINVAL. Any comments are very welcome. Cheers, Takashi From owner-xfs@oss.sgi.com Tue Apr 1 05:17:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 05:17:07 -0700 (PDT) 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_53 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 m31CGw9j003456 for ; Tue, 1 Apr 2008 05:17:00 -0700 X-ASG-Debug-ID: 1207052253-1da103a50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo201.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 695FF126E715 for ; Tue, 1 Apr 2008 05:17:33 -0700 (PDT) Received: from tyo201.gate.nec.co.jp (TYO201.gate.nec.co.jp [202.32.8.193]) by cuda.sgi.com with ESMTP id 5Y3e8tZGWUuXbusR for ; Tue, 01 Apr 2008 05:17:33 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate54C.nec.co.jp [10.7.69.197]) by tyo201.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m31CHWXX000909; Tue, 1 Apr 2008 21:17:32 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m31CHWi24315; Tue, 1 Apr 2008 21:17:32 +0900 (JST) Received: from kuichi.jp.nec.com (kuichi.jp.nec.com [10.26.220.17]) by mailsv4.nec.co.jp (8.13.8/8.13.4) with ESMTP id m31CHWcX005370; Tue, 1 Apr 2008 21:17:32 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Tue, 1 Apr 2008 21:17:29 +0900 To: David Chinner Cc: "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "linux-fsdevel@vger.kernel.org" , "dm-devel@redhat.com" , "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: [RFC PATCH 1/3] Implement generic freeze feature Subject: [RFC PATCH 1/3] Implement generic freeze feature Message-Id: <20080401211729t-sato@mail.jp.nec.com> Mime-Version: 1.0 X-Mailer: WeMail32[2.51] ID:1K0086 From: Takashi Sato Date: Tue, 1 Apr 2008 21:17:29 +0900 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Barracuda-Connect: TYO201.gate.nec.co.jp[202.32.8.193] X-Barracuda-Start-Time: 1207052254 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.1, rules version 3.1.46525 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15119 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs The ioctls for the generic freeze feature are below. o Freeze the filesystem int ioctl(int fd, int FIFREEZE, arg) fd: The file descriptor of the mountpoint FIFREEZE: request code for the freeze arg: Ignored Return value: 0 if the operation succeeds. Otherwise, -1 o Unfreeze the filesystem int ioctl(int fd, int FITHAW, arg) fd: The file descriptor of the mountpoint FITHAW: request code for unfreeze arg: Ignored Return value: 0 if the operation succeeds. Otherwise, -1 Signed-off-by: Takashi Sato Signed-off-by: Masayuki Hamaguchi --- fs/block_dev.c | 3 +++ fs/buffer.c | 25 +++++++++++++++++++++++++ fs/ioctl.c | 35 +++++++++++++++++++++++++++++++++++ fs/super.c | 32 +++++++++++++++++++++++++++++++- include/linux/fs.h | 7 +++++++ 5 files changed, 101 insertions(+), 1 deletion(-) diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-rc7.org/fs/block_dev.c linux-2.6.25-rc7-freeze/fs/block_ dev.c --- linux-2.6.25-rc7.org/fs/block_dev.c 2008-03-26 10:38:14.000000000 +0900 +++ linux-2.6.25-rc7-freeze/fs/block_dev.c 2008-03-27 09:26:36.000000000 +0900 @@ -284,6 +284,9 @@ static void init_once(struct kmem_cache INIT_LIST_HEAD(&bdev->bd_holder_list); #endif inode_init_once(&ei->vfs_inode); + + /* Initialize semaphore for freeze. */ + sema_init(&bdev->bd_freeze_sem, 1); } static inline void __bd_forget(struct inode *inode) diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-rc7.org/fs/buffer.c linux-2.6.25-rc7-freeze/fs/buffer.c --- linux-2.6.25-rc7.org/fs/buffer.c 2008-03-26 10:38:14.000000000 +0900 +++ linux-2.6.25-rc7-freeze/fs/buffer.c 2008-03-26 20:32:23.000000000 +0900 @@ -201,6 +201,19 @@ struct super_block *freeze_bdev(struct b { struct super_block *sb; + down(&bdev->bd_freeze_sem); + sb = get_super_without_lock(bdev); + + /* If super_block has been already frozen, return. */ + if (sb && sb->s_frozen != SB_UNFROZEN) { + put_super(sb); + up(&bdev->bd_freeze_sem); + return sb; + } + + if (sb) + put_super(sb); + down(&bdev->bd_mount_sem); sb = get_super(bdev); if (sb && !(sb->s_flags & MS_RDONLY)) { @@ -219,6 +232,9 @@ struct super_block *freeze_bdev(struct b } sync_blockdev(bdev); + + up(&bdev->bd_freeze_sem); + return sb; /* thaw_bdev releases s->s_umount and bd_mount_sem */ } EXPORT_SYMBOL(freeze_bdev); @@ -232,6 +248,13 @@ EXPORT_SYMBOL(freeze_bdev); */ void thaw_bdev(struct block_device *bdev, struct super_block *sb) { + down(&bdev->bd_freeze_sem); + + if (sb && sb->s_frozen == SB_UNFROZEN) { + up(&bdev->bd_freeze_sem); + return; + } + if (sb) { BUG_ON(sb->s_bdev != bdev); @@ -244,6 +267,8 @@ void thaw_bdev(struct block_device *bdev } up(&bdev->bd_mount_sem); + + up(&bdev->bd_freeze_sem); } EXPORT_SYMBOL(thaw_bdev); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-rc7.org/fs/ioctl.c linux-2.6.25-rc7-freeze/fs/ioctl.c --- linux-2.6.25-rc7.org/fs/ioctl.c 2008-03-26 10:38:14.000000000 +0900 +++ linux-2.6.25-rc7-freeze/fs/ioctl.c 2008-03-26 20:22:17.000000000 +0900 @@ -13,6 +13,7 @@ #include #include #include +#include #include @@ -181,6 +182,40 @@ int do_vfs_ioctl(struct file *filp, unsi } else error = -ENOTTY; break; + + case FIFREEZE: { + struct super_block *sb = filp->f_path.dentry->d_inode->i_sb; + + if (!capable(CAP_SYS_ADMIN)) { + error = -EPERM; + break; + } + + /* If filesystem doesn't support freeze feature, return. */ + if (sb->s_op->write_super_lockfs == NULL) { + error = -EINVAL; + break; + } + + /* Freeze. */ + freeze_bdev(sb->s_bdev); + + break; + } + + case FITHAW: { + struct super_block *sb = filp->f_path.dentry->d_inode->i_sb; + + if (!capable(CAP_SYS_ADMIN)) { + error = -EPERM; + break; + } + + /* Thaw. */ + thaw_bdev(sb->s_bdev, sb); + break; + } + default: if (S_ISREG(filp->f_path.dentry->d_inode->i_mode)) error = file_ioctl(filp, cmd, arg); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-rc7.org/fs/super.c linux-2.6.25-rc7-freeze/fs/super.c --- linux-2.6.25-rc7.org/fs/super.c 2008-03-26 10:38:14.000000000 +0900 +++ linux-2.6.25-rc7-freeze/fs/super.c 2008-03-26 20:23:21.000000000 +0900 @@ -154,7 +154,7 @@ int __put_super_and_need_restart(struct * Drops a temporary reference, frees superblock if there's no * references left. */ -static void put_super(struct super_block *sb) +void put_super(struct super_block *sb) { spin_lock(&sb_lock); __put_super(sb); @@ -507,6 +507,36 @@ rescan: EXPORT_SYMBOL(get_super); +/* + * get_super_without_lock - Get super_block from block_device without lock. + * @bdev: block device struct + * + * Scan the superblock list and finds the superblock of the file system + * mounted on the block device given. This doesn't lock anyone. + * %NULL is returned if no match is found. + */ +struct super_block *get_super_without_lock(struct block_device *bdev) +{ + struct super_block *sb; + + if (!bdev) + return NULL; + + spin_lock(&sb_lock); + list_for_each_entry(sb, &super_blocks, s_list) { + if (sb->s_bdev == bdev) { + if (sb->s_root) { + sb->s_count++; + spin_unlock(&sb_lock); + return sb; + } + } + } + spin_unlock(&sb_lock); + return NULL; +} +EXPORT_SYMBOL(get_super_without_lock); + struct super_block * user_get_super(dev_t dev) { struct super_block *sb; diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-rc7.org/include/linux/fs.h linux-2.6.25-rc7-freeze/inclu de/linux/fs.h --- linux-2.6.25-rc7.org/include/linux/fs.h 2008-03-26 10:38:14.000000000 +0900 +++ linux-2.6.25-rc7-freeze/include/linux/fs.h 2008-03-26 20:27:44.000000000 +0900 @@ -223,6 +223,8 @@ extern int dir_notify_enable; #define BMAP_IOCTL 1 /* obsolete - kept for compatibility */ #define FIBMAP _IO(0x00,1) /* bmap access */ #define FIGETBSZ _IO(0x00,2) /* get the block size used for bmap */ +#define FIFREEZE _IOWR('X', 119, int) /* Freeze */ +#define FITHAW _IOWR('X', 120, int) /* Thaw */ #define FS_IOC_GETFLAGS _IOR('f', 1, long) #define FS_IOC_SETFLAGS _IOW('f', 2, long) @@ -548,6 +550,9 @@ struct block_device { * care to not mess up bd_private for that case. */ unsigned long bd_private; + + /* Semaphore for freeze */ + struct semaphore bd_freeze_sem; }; /* @@ -1926,7 +1931,9 @@ extern int do_vfs_ioctl(struct file *fil extern void get_filesystem(struct file_system_type *fs); extern void put_filesystem(struct file_system_type *fs); extern struct file_system_type *get_fs_type(const char *name); +extern void put_super(struct super_block *sb); extern struct super_block *get_super(struct block_device *); +extern struct super_block *get_super_without_lock(struct block_device *); extern struct super_block *user_get_super(dev_t); extern void drop_super(struct super_block *sb); From owner-xfs@oss.sgi.com Tue Apr 1 05:17:36 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 05:17:48 -0700 (PDT) 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 m31CHWiL003648 for ; Tue, 1 Apr 2008 05:17:36 -0700 X-ASG-Debug-ID: 1207052287-27d8029e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo202.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E13E4126E71C for ; Tue, 1 Apr 2008 05:18:08 -0700 (PDT) Received: from tyo202.gate.nec.co.jp (TYO202.gate.nec.co.jp [202.32.8.206]) by cuda.sgi.com with ESMTP id KCrfxBzQz1I9jofA for ; Tue, 01 Apr 2008 05:18:08 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate54.nec.co.jp [10.7.69.193]) by tyo202.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m31CI7fG016064; Tue, 1 Apr 2008 21:18:07 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m31CI7S13363; Tue, 1 Apr 2008 21:18:07 +0900 (JST) Received: from kaishu.jp.nec.com (kaishu.jp.nec.com [10.26.220.5]) by mailsv4.nec.co.jp (8.13.8/8.13.4) with ESMTP id m31CI6fA005594; Tue, 1 Apr 2008 21:18:06 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Tue, 1 Apr 2008 21:18:06 +0900 To: David Chinner Cc: "linux-fsdevel@vger.kernel.org" , "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "dm-devel@redhat.com" , "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: [RFC PATCH 2/3] Remove XFS specific ioctl interfaces for freeze feature Subject: [RFC PATCH 2/3] Remove XFS specific ioctl interfaces for freeze feature Message-Id: <20080401211806t-sato@mail.jp.nec.com> Mime-Version: 1.0 X-Mailer: WeMail32[2.51] ID:1K0086 From: Takashi Sato Date: Tue, 1 Apr 2008 21:18:05 +0900 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Barracuda-Connect: TYO202.gate.nec.co.jp[202.32.8.206] X-Barracuda-Start-Time: 1207052288 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.1, rules version 3.1.46525 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15120 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs It removes XFS specific ioctl interfaces and request codes for freeze feature. This patch has been supplied by David Chinner. Signed-off-by: Dave Chinner Signed-off-by: Takashi Sato --- linux-2.6/xfs_ioctl.c | 15 --------------- linux-2.6/xfs_ioctl32.c | 2 -- xfs_fs.h | 4 ++-- 3 files changed, 2 insertions(+), 19 deletions(-) diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-rc7-freeze/fs/xfs/linux-2.6/xfs_ioctl.c linux-2.6.25-rc7 -xfs/fs/xfs/linux-2.6/xfs_ioctl.c --- linux-2.6.25-rc7-freeze/fs/xfs/linux-2.6/xfs_ioctl.c 2008-04-01 13:22:43.000000000 +0900 +++ linux-2.6.25-rc7-xfs/fs/xfs/linux-2.6/xfs_ioctl.c 2008-04-01 14:34:21.000000000 +0900 @@ -906,21 +906,6 @@ xfs_ioctl( return -error; } - case XFS_IOC_FREEZE: - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - - if (inode->i_sb->s_frozen == SB_UNFROZEN) - freeze_bdev(inode->i_sb->s_bdev); - return 0; - - case XFS_IOC_THAW: - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - if (inode->i_sb->s_frozen != SB_UNFROZEN) - thaw_bdev(inode->i_sb->s_bdev, inode->i_sb); - return 0; - case XFS_IOC_GOINGDOWN: { __uint32_t in; diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-rc7-freeze/fs/xfs/linux-2.6/xfs_ioctl32.c linux-2.6.25-r c7-xfs/fs/xfs/linux-2.6/xfs_ioctl32.c --- linux-2.6.25-rc7-freeze/fs/xfs/linux-2.6/xfs_ioctl32.c 2008-04-01 13:22:43.000000000 +0900 +++ linux-2.6.25-rc7-xfs/fs/xfs/linux-2.6/xfs_ioctl32.c 2008-04-01 14:31:59.000000000 +0900 @@ -398,8 +398,6 @@ xfs_compat_ioctl( case XFS_IOC_FSGROWFSDATA: case XFS_IOC_FSGROWFSLOG: case XFS_IOC_FSGROWFSRT: - case XFS_IOC_FREEZE: - case XFS_IOC_THAW: case XFS_IOC_GOINGDOWN: case XFS_IOC_ERROR_INJECTION: case XFS_IOC_ERROR_CLEARALL: diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-rc7-freeze/fs/xfs/xfs_fs.h linux-2.6.25-rc7-xfs/fs/xfs/x fs_fs.h --- linux-2.6.25-rc7-freeze/fs/xfs/xfs_fs.h 2008-04-01 13:22:48.000000000 +0900 +++ linux-2.6.25-rc7-xfs/fs/xfs/xfs_fs.h 2008-04-01 14:31:59.000000000 +0900 @@ -473,8 +473,8 @@ typedef struct xfs_handle { #define XFS_IOC_ERROR_INJECTION _IOW ('X', 116, struct xfs_error_injection) #define XFS_IOC_ERROR_CLEARALL _IOW ('X', 117, struct xfs_error_injection) /* XFS_IOC_ATTRCTL_BY_HANDLE -- deprecated 118 */ -#define XFS_IOC_FREEZE _IOWR('X', 119, int) -#define XFS_IOC_THAW _IOWR('X', 120, int) +/* XFS_IOC_FREEZE -- FIFREEZE 119 */ +/* XFS_IOC_THAW -- FITHAW 120 */ #define XFS_IOC_FSSETDM_BY_HANDLE _IOW ('X', 121, struct xfs_fsop_setdm_handlereq) #define XFS_IOC_ATTRLIST_BY_HANDLE _IOW ('X', 122, struct xfs_fsop_attrlist_handlereq) #define XFS_IOC_ATTRMULTI_BY_HANDLE _IOW ('X', 123, struct xfs_fsop_attrmulti_handlereq) From owner-xfs@oss.sgi.com Tue Apr 1 05:21:31 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 05:21:39 -0700 (PDT) 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,J_CHICKENPOX_24, J_CHICKENPOX_53 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 m31CLVf3004684 for ; Tue, 1 Apr 2008 05:21:31 -0700 X-ASG-Debug-ID: 1207052525-27d802d30000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo201.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EFA11126E7E7 for ; Tue, 1 Apr 2008 05:22:06 -0700 (PDT) Received: from tyo201.gate.nec.co.jp (TYO201.gate.nec.co.jp [202.32.8.193]) by cuda.sgi.com with ESMTP id 4l3t4s8J5i8Bqj2k for ; Tue, 01 Apr 2008 05:22:06 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate54C.nec.co.jp [10.7.69.197]) by tyo201.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m31CM58p003950; Tue, 1 Apr 2008 21:22:05 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m31CM5j28845; Tue, 1 Apr 2008 21:22:05 +0900 (JST) Received: from shoin.jp.nec.com (shoin.jp.nec.com [10.26.220.3]) by mailsv4.nec.co.jp (8.13.8/8.13.4) with ESMTP id m31CM5JV007657; Tue, 1 Apr 2008 21:22:05 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Tue, 1 Apr 2008 21:22:04 +0900 To: David Chinner Cc: "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "dm-devel@redhat.com" , "linux-fsdevel@vger.kernel.org" , "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: [RFC PATCH 3/3] Add timeout feature Subject: [RFC PATCH 3/3] Add timeout feature Message-Id: <20080401212204t-sato@mail.jp.nec.com> Mime-Version: 1.0 X-Mailer: WeMail32[2.51] ID:1K0086 From: Takashi Sato Date: Tue, 1 Apr 2008 21:22:04 +0900 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Barracuda-Connect: TYO201.gate.nec.co.jp[202.32.8.193] X-Barracuda-Start-Time: 1207052526 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.1, rules version 3.1.46525 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15121 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs The timeout feature is added to freeze ioctl. And new ioctl to reset the timeout period is added. o Freeze the filesystem int ioctl(int fd, int FIFREEZE, long *timeval) fd: The file descriptor of the mountpoint FIFREEZE: request code for the freeze timeval: the timeout period in seconds If it's 0 or 1, the timeout isn't set. This special case of "1" is implemented to keep the compatibility with XFS applications. Return value: 0 if the operation succeeds. Otherwise, -1 o Reset the timeout period int ioctl(int fd, int FIFREEZE_RESET_TIMEOUT, long *timeval) fd:file descriptor of mountpoint FIFREEZE_RESET_TIMEOUT: request code for reset of timeout period timeval: new timeout period in seconds Return value: 0 if the operation succeeds. Otherwise, -1 Error number: If the filesystem has already been unfrozen, errno is set to EINVAL. Signed-off-by: Takashi Sato Signed-off-by: Masayuki Hamaguchi --- drivers/md/dm.c | 2 - fs/block_dev.c | 2 + fs/buffer.c | 14 ++++++++- fs/ioctl.c | 64 +++++++++++++++++++++++++++++++++++++++++++- fs/super.c | 52 +++++++++++++++++++++++++++++++++++ fs/xfs/xfs_fsops.c | 2 - include/linux/buffer_head.h | 2 - include/linux/fs.h | 8 +++++ 8 files changed, 140 insertions(+), 6 deletions(-) diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-rc7-xfs/drivers/md/dm.c linux-2.6.25-rc7-timeout/drivers /md/dm.c --- linux-2.6.25-rc7-xfs/drivers/md/dm.c 2008-04-01 14:21:37.000000000 +0900 +++ linux-2.6.25-rc7-timeout/drivers/md/dm.c 2008-04-01 13:25:11.000000000 +0900 @@ -1407,7 +1407,7 @@ static int lock_fs(struct mapped_device WARN_ON(md->frozen_sb); - md->frozen_sb = freeze_bdev(md->suspended_bdev); + md->frozen_sb = freeze_bdev(md->suspended_bdev, 0); if (IS_ERR(md->frozen_sb)) { r = PTR_ERR(md->frozen_sb); md->frozen_sb = NULL; diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-rc7-xfs/fs/block_dev.c linux-2.6.25-rc7-timeout/fs/block _dev.c --- linux-2.6.25-rc7-xfs/fs/block_dev.c 2008-04-01 14:22:34.000000000 +0900 +++ linux-2.6.25-rc7-timeout/fs/block_dev.c 2008-04-01 13:27:38.000000000 +0900 @@ -287,6 +287,8 @@ static void init_once(struct kmem_cache /* Initialize semaphore for freeze. */ sema_init(&bdev->bd_freeze_sem, 1); + /* Setup freeze timeout function. */ + INIT_DELAYED_WORK(&bdev->bd_freeze_timeout, freeze_timeout); } static inline void __bd_forget(struct inode *inode) diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-rc7-xfs/fs/buffer.c linux-2.6.25-rc7-timeout/fs/buffer.c --- linux-2.6.25-rc7-xfs/fs/buffer.c 2008-04-01 14:22:26.000000000 +0900 +++ linux-2.6.25-rc7-timeout/fs/buffer.c 2008-04-01 13:27:14.000000000 +0900 @@ -190,14 +190,17 @@ int fsync_bdev(struct block_device *bdev /** * freeze_bdev -- lock a filesystem and force it into a consistent state - * @bdev: blockdevice to lock + * @bdev: blockdevice to lock + * @timeout_msec: timeout period * * This takes the block device bd_mount_sem to make sure no new mounts * happen on bdev until thaw_bdev() is called. * If a superblock is found on this device, we take the s_umount semaphore * on it to make sure nobody unmounts until the snapshot creation is done. + * If timeout_msec is bigger than 0, this registers the delayed work for + * timeout of the freeze feature. */ -struct super_block *freeze_bdev(struct block_device *bdev) +struct super_block *freeze_bdev(struct block_device *bdev, long timeout_msec) { struct super_block *sb; @@ -233,6 +236,10 @@ struct super_block *freeze_bdev(struct b sync_blockdev(bdev); + /* Setup unfreeze timer. */ + if (timeout_msec > 0) + add_freeze_timeout(bdev, timeout_msec); + up(&bdev->bd_freeze_sem); return sb; /* thaw_bdev releases s->s_umount and bd_mount_sem */ @@ -255,6 +262,9 @@ void thaw_bdev(struct block_device *bdev return; } + /* Delete unfreeze timer. */ + del_freeze_timeout(bdev); + if (sb) { BUG_ON(sb->s_bdev != bdev); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-rc7-xfs/fs/ioctl.c linux-2.6.25-rc7-timeout/fs/ioctl.c --- linux-2.6.25-rc7-xfs/fs/ioctl.c 2008-04-01 14:22:38.000000000 +0900 +++ linux-2.6.25-rc7-timeout/fs/ioctl.c 2008-04-01 13:27:46.000000000 +0900 @@ -184,6 +184,8 @@ int do_vfs_ioctl(struct file *filp, unsi break; case FIFREEZE: { + long timeout_sec; + long timeout_msec; struct super_block *sb = filp->f_path.dentry->d_inode->i_sb; if (!capable(CAP_SYS_ADMIN)) { @@ -197,8 +199,31 @@ int do_vfs_ioctl(struct file *filp, unsi break; } + /* arg(sec) to tick value. */ + error = get_user(timeout_sec, (long __user *) arg); + if (error != 0) + break; + /* + * If 1 is specified as the timeout period, + * it will be changed into 0 to keep the compatibility + * of XFS application(xfs_freeze). + */ + if (timeout_sec < 0) { + error = -EINVAL; + break; + } else if (timeout_sec < 2) { + timeout_sec = 0; + } + + timeout_msec = timeout_sec * 1000; + /* overflow case */ + if (timeout_msec < 0) { + error = -EINVAL; + break; + } + /* Freeze. */ - freeze_bdev(sb->s_bdev); + freeze_bdev(sb->s_bdev, timeout_msec); break; } @@ -216,6 +241,43 @@ int do_vfs_ioctl(struct file *filp, unsi break; } + case FIFREEZE_RESET_TIMEOUT: { + long timeout_sec; + long timeout_msec; + struct super_block *sb + = filp->f_path.dentry->d_inode->i_sb; + + if (!capable(CAP_SYS_ADMIN)) { + error = -EPERM; + break; + } + + /* arg(sec) to tick value */ + error = get_user(timeout_sec, (long __user *) arg); + if (error) + break; + timeout_msec = timeout_sec * 1000; + if (timeout_msec < 0) { + error = -EINVAL; + break; + } + + if (sb) { + down(&sb->s_bdev->bd_freeze_sem); + if (sb->s_frozen == SB_UNFROZEN) { + up(&sb->s_bdev->bd_freeze_sem); + error = -EINVAL; + break; + } + /* setup unfreeze timer */ + if (timeout_msec > 0) + add_freeze_timeout(sb->s_bdev, + timeout_msec); + up(&sb->s_bdev->bd_freeze_sem); + } + break; + } + default: if (S_ISREG(filp->f_path.dentry->d_inode->i_mode)) error = file_ioctl(filp, cmd, arg); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-rc7-xfs/fs/super.c linux-2.6.25-rc7-timeout/fs/super.c --- linux-2.6.25-rc7-xfs/fs/super.c 2008-04-01 14:22:34.000000000 +0900 +++ linux-2.6.25-rc7-timeout/fs/super.c 2008-04-01 13:27:41.000000000 +0900 @@ -983,3 +983,55 @@ struct vfsmount *kern_mount_data(struct } EXPORT_SYMBOL_GPL(kern_mount_data); + +/* + * freeze_timeout - Thaw the filesystem. + * + * @work: work queue (delayed_work.work) + * + * Called by the delayed work when elapsing the timeout period. + * Thaw the filesystem. + */ +void freeze_timeout(struct work_struct *work) +{ + struct block_device *bd = container_of(work, + struct block_device, bd_freeze_timeout.work); + + struct super_block *sb = get_super_without_lock(bd); + + thaw_bdev(bd, sb); + + if (sb) + put_super(sb); +} +EXPORT_SYMBOL_GPL(freeze_timeout); + +/* + * add_freeze_timeout - Add timeout for freeze. + * + * @bdev: block device struct + * @timeout_msec: timeout period + * + * Add the delayed work for freeze timeout to the delayed work queue. + */ +void add_freeze_timeout(struct block_device *bdev, long timeout_msec) +{ + s64 timeout_jiffies = msecs_to_jiffies(timeout_msec); + + /* Set delayed work queue */ + cancel_delayed_work(&bdev->bd_freeze_timeout); + schedule_delayed_work(&bdev->bd_freeze_timeout, timeout_jiffies); +} + +/* + * del_freeze_timeout - Delete timeout for freeze. + * + * @bdev: block device struct + * + * Delete the delayed work for freeze timeout from the delayed work queue. + */ +void del_freeze_timeout(struct block_device *bdev) +{ + if (delayed_work_pending(&bdev->bd_freeze_timeout)) + cancel_delayed_work(&bdev->bd_freeze_timeout); +} diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-rc7-xfs/fs/xfs/xfs_fsops.c linux-2.6.25-rc7-timeout/fs/x fs/xfs_fsops.c --- linux-2.6.25-rc7-xfs/fs/xfs/xfs_fsops.c 2008-04-01 14:22:33.000000000 +0900 +++ linux-2.6.25-rc7-timeout/fs/xfs/xfs_fsops.c 2008-04-01 13:27:35.000000000 +0900 @@ -623,7 +623,7 @@ xfs_fs_goingdown( { switch (inflags) { case XFS_FSOP_GOING_FLAGS_DEFAULT: { - struct super_block *sb = freeze_bdev(mp->m_super->s_bdev); + struct super_block *sb = freeze_bdev(mp->m_super->s_bdev, 0); if (sb && !IS_ERR(sb)) { xfs_force_shutdown(mp, SHUTDOWN_FORCE_UMOUNT); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-rc7-xfs/include/linux/buffer_head.h linux-2.6.25-rc7-tim eout/include/linux/buffer_head.h --- linux-2.6.25-rc7-xfs/include/linux/buffer_head.h 2008-04-01 14:22:39.000000000 +0900 +++ linux-2.6.25-rc7-timeout/include/linux/buffer_head.h 2008-04-01 13:27:53.000000000 +0900 @@ -170,7 +170,7 @@ int sync_blockdev(struct block_device *b void __wait_on_buffer(struct buffer_head *); wait_queue_head_t *bh_waitq_head(struct buffer_head *bh); int fsync_bdev(struct block_device *); -struct super_block *freeze_bdev(struct block_device *); +struct super_block *freeze_bdev(struct block_device *, long timeout_msec); void thaw_bdev(struct block_device *, struct super_block *); int fsync_super(struct super_block *); int fsync_no_super(struct block_device *); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-rc7-xfs/include/linux/fs.h linux-2.6.25-rc7-timeout/incl ude/linux/fs.h --- linux-2.6.25-rc7-xfs/include/linux/fs.h 2008-04-01 14:22:39.000000000 +0900 +++ linux-2.6.25-rc7-timeout/include/linux/fs.h 2008-04-01 13:27:53.000000000 +0900 @@ -8,6 +8,7 @@ #include #include +#include /* * It's silly to have NR_OPEN bigger than NR_FILE, but you can change @@ -225,6 +226,7 @@ extern int dir_notify_enable; #define FIGETBSZ _IO(0x00,2) /* get the block size used for bmap */ #define FIFREEZE _IOWR('X', 119, int) /* Freeze */ #define FITHAW _IOWR('X', 120, int) /* Thaw */ +#define FIFREEZE_RESET_TIMEOUT _IO(0x00, 3) /* Reset freeze timeout */ #define FS_IOC_GETFLAGS _IOR('f', 1, long) #define FS_IOC_SETFLAGS _IOW('f', 2, long) @@ -551,6 +553,8 @@ struct block_device { */ unsigned long bd_private; + /* Delayed work for freeze */ + struct delayed_work bd_freeze_timeout; /* Semaphore for freeze */ struct semaphore bd_freeze_sem; }; @@ -2104,5 +2108,9 @@ int proc_nr_files(struct ctl_table *tabl int get_filesystem_list(char * buf); +extern void add_freeze_timeout(struct block_device *bdev, long timeout_msec); +extern void del_freeze_timeout(struct block_device *bdev); +extern void freeze_timeout(struct work_struct *work); + #endif /* __KERNEL__ */ #endif /* _LINUX_FS_H */ From owner-xfs@oss.sgi.com Tue Apr 1 18:11:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 18:11:24 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_64 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 m321Aogu014887 for ; Tue, 1 Apr 2008 18:11:01 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA10735; Wed, 2 Apr 2008 09:15:53 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m31NFqsT117416482; Wed, 2 Apr 2008 09:15:53 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m31NFqKd118679480; Wed, 2 Apr 2008 09:15:52 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 2 Apr 2008 09:15:52 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [Patch] Cacheline align xlog_t Message-ID: <20080401231552.GV103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15129 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Reorganise xlog_t for better cacheline isolation of contention To reduce contention on the log in large CPU count, separate out different parts of the xlog_t structure onto different cachelines. Move each lock onto a different cacheline along with all the members that are accessed/modified while that lock is held. Also, move the debugging code into debug code. Signed-off-by: Dave Chinner --- fs/xfs/xfs_log.c | 5 +--- fs/xfs/xfs_log_priv.h | 55 +++++++++++++++++++++++++++----------------------- 2 files changed, 32 insertions(+), 28 deletions(-) Index: 2.6.x-xfs-new/fs/xfs/xfs_log.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_log.c 2008-03-13 14:03:38.000000000 +1100 +++ 2.6.x-xfs-new/fs/xfs/xfs_log.c 2008-03-13 14:20:21.803846380 +1100 @@ -1237,9 +1237,9 @@ xlog_alloc_log(xfs_mount_t *mp, XFS_BUF_SET_FSPRIVATE2(bp, (unsigned long)1); iclog->ic_bp = bp; iclog->hic_data = bp->b_addr; - +#ifdef DEBUG log->l_iclog_bak[i] = (xfs_caddr_t)&(iclog->ic_header); - +#endif head = &iclog->ic_header; memset(head, 0, sizeof(xlog_rec_header_t)); head->h_magicno = cpu_to_be32(XLOG_HEADER_MAGIC_NUM); @@ -1250,7 +1250,6 @@ xlog_alloc_log(xfs_mount_t *mp, head->h_fmt = cpu_to_be32(XLOG_FMT); memcpy(&head->h_fs_uuid, &mp->m_sb.sb_uuid, sizeof(uuid_t)); - iclog->ic_size = XFS_BUF_SIZE(bp) - log->l_iclog_hsize; iclog->ic_state = XLOG_STATE_ACTIVE; iclog->ic_log = log; Index: 2.6.x-xfs-new/fs/xfs/xfs_log_priv.h =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_log_priv.h 2008-03-13 14:06:58.000000000 +1100 +++ 2.6.x-xfs-new/fs/xfs/xfs_log_priv.h 2008-03-13 14:20:31.478596832 +1100 @@ -402,8 +402,29 @@ typedef struct xlog_in_core { * that round off problems won't occur when releasing partial reservations. */ typedef struct log { + /* The following fields don't need locking */ + struct xfs_mount *l_mp; /* mount point */ + struct xfs_buf *l_xbuf; /* extra buffer for log + * wrapping */ + struct xfs_buftarg *l_targ; /* buftarg of log */ + uint l_flags; + uint l_quotaoffs_flag; /* XFS_DQ_*, for QUOTAOFFs */ + struct xfs_buf_cancel **l_buf_cancel_table; + int l_iclog_hsize; /* size of iclog header */ + int l_iclog_heads; /* # of iclog header sectors */ + uint l_sectbb_log; /* log2 of sector size in BBs */ + uint l_sectbb_mask; /* sector size (in BBs) + * alignment mask */ + int l_iclog_size; /* size of log in bytes */ + int l_iclog_size_log; /* log power size of log */ + int l_iclog_bufs; /* number of iclog buffers */ + xfs_daddr_t l_logBBstart; /* start block of log */ + int l_logsize; /* size of log in bytes */ + int l_logBBsize; /* size of log in BB chunks */ + /* The following block of fields are changed while holding icloglock */ - sema_t l_flushsema; /* iclog flushing semaphore */ + sema_t l_flushsema ____cacheline_aligned_in_smp; + /* iclog flushing semaphore */ int l_flushcnt; /* # of procs waiting on this * sema */ int l_covered_state;/* state of "covering disk @@ -413,27 +434,14 @@ typedef struct log { xfs_lsn_t l_tail_lsn; /* lsn of 1st LR with unflushed * buffers */ xfs_lsn_t l_last_sync_lsn;/* lsn of last LR on disk */ - struct xfs_mount *l_mp; /* mount point */ - struct xfs_buf *l_xbuf; /* extra buffer for log - * wrapping */ - struct xfs_buftarg *l_targ; /* buftarg of log */ - xfs_daddr_t l_logBBstart; /* start block of log */ - int l_logsize; /* size of log in bytes */ - int l_logBBsize; /* size of log in BB chunks */ int l_curr_cycle; /* Cycle number of log writes */ int l_prev_cycle; /* Cycle number before last * block increment */ int l_curr_block; /* current logical log block */ int l_prev_block; /* previous logical log block */ - int l_iclog_size; /* size of log in bytes */ - int l_iclog_size_log; /* log power size of log */ - int l_iclog_bufs; /* number of iclog buffers */ - - /* The following field are used for debugging; need to hold icloglock */ - char *l_iclog_bak[XLOG_MAX_ICLOGS]; /* The following block of fields are changed while holding grant_lock */ - spinlock_t l_grant_lock; + spinlock_t l_grant_lock ____cacheline_aligned_in_smp; xlog_ticket_t *l_reserve_headq; xlog_ticket_t *l_write_headq; int l_grant_reserve_cycle; @@ -441,20 +449,17 @@ typedef struct log { int l_grant_write_cycle; int l_grant_write_bytes; - /* The following fields don't need locking */ #ifdef XFS_LOG_TRACE struct ktrace *l_trace; struct ktrace *l_grant_trace; #endif - uint l_flags; - uint l_quotaoffs_flag; /* XFS_DQ_*, for QUOTAOFFs */ - struct xfs_buf_cancel **l_buf_cancel_table; - int l_iclog_hsize; /* size of iclog header */ - int l_iclog_heads; /* # of iclog header sectors */ - uint l_sectbb_log; /* log2 of sector size in BBs */ - uint l_sectbb_mask; /* sector size (in BBs) - * alignment mask */ -} xlog_t; + + /* The following field are used for debugging; need to hold icloglock */ +#ifdef DEBUG + char *l_iclog_bak[XLOG_MAX_ICLOGS]; +#endif + +} xlog_t ____cacheline_aligned_in_smp; #define XLOG_FORCED_SHUTDOWN(log) ((log)->l_flags & XLOG_IO_ERROR) From owner-xfs@oss.sgi.com Tue Apr 1 18:10:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 18:11:13 -0700 (PDT) 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.0 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 m321Aogq014887 for ; Tue, 1 Apr 2008 18:10:55 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA12833; Wed, 2 Apr 2008 10:17:59 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m320HwsT118671985; Wed, 2 Apr 2008 10:17:59 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m320HwEw118432079; Wed, 2 Apr 2008 10:17:58 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 2 Apr 2008 10:17:58 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [Patch] fix lock inversion in forced unmount Message-ID: <20080402001758.GY103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15127 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Fix lock inversion in forced shutdown. Recent changes to xlog_state_release_iclog() placed the grant_lock inside the icloglock. forced unmount of the log does this the opposite way around, but does not depend on the order for correct working. Fix the inversion by changing the order locks are gained in xfs_log_force_umount(). Signed-off-by: Dave Chinner --- fs/xfs/xfs_log.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: 2.6.x-xfs-new/fs/xfs/xfs_log.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_log.c 2008-04-01 21:00:13.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_log.c 2008-04-02 08:35:20.282633878 +1000 @@ -3502,8 +3502,8 @@ xfs_log_force_umount( * before we mark the filesystem SHUTDOWN and wake * everybody up to tell the bad news. */ - spin_lock(&log->l_grant_lock); spin_lock(&log->l_icloglock); + spin_lock(&log->l_grant_lock); mp->m_flags |= XFS_MOUNT_FS_SHUTDOWN; XFS_BUF_DONE(mp->m_sb_bp); /* From owner-xfs@oss.sgi.com Tue Apr 1 18:11:10 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 18:11:41 -0700 (PDT) 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=AWL,BAYES_00,J_CHICKENPOX_52, SUBJ_TICKET 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 m321Aoh0014887 for ; Tue, 1 Apr 2008 18:11:08 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA10686; Wed, 2 Apr 2008 09:14:40 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m31NEdsT118620777; Wed, 2 Apr 2008 09:14:39 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m31NEdLb118697076; Wed, 2 Apr 2008 09:14:39 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 2 Apr 2008 09:14:39 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [Patch] Remove xlog_ticket allocator Message-ID: <20080401231439.GU103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15132 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Remove the xlog_ticket allocator The ticket allocator is just a simple slab implementation internal to the log. It requires the icloglock to be held when manipulating it and this contributes to contention on that lock. Just kill the entire allocator and use a memory zone instead. While there, allow us to gracefully fail allocation with ENOMEM. Signed-off-by: Dave Chinner --- fs/xfs/xfs_log.c | 137 ++++---------------------------------------------- fs/xfs/xfs_log_priv.h | 9 +-- fs/xfs/xfs_vfsops.c | 12 ++-- fs/xfs/xfsidbg.c | 11 +--- 4 files changed, 25 insertions(+), 144 deletions(-) Index: 2.6.x-xfs-new/fs/xfs/xfs_log.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_log.c 2008-03-13 13:58:08.866070224 +1100 +++ 2.6.x-xfs-new/fs/xfs/xfs_log.c 2008-03-13 14:03:38.448138656 +1100 @@ -41,6 +41,7 @@ #include "xfs_inode.h" #include "xfs_rw.h" +kmem_zone_t *xfs_log_ticket_zone; #define xlog_write_adv_cnt(ptr, len, off, bytes) \ { (ptr) += (bytes); \ @@ -73,8 +74,6 @@ STATIC int xlog_state_get_iclog_space(x xlog_ticket_t *ticket, int *continued_write, int *logoffsetp); -STATIC void xlog_state_put_ticket(xlog_t *log, - xlog_ticket_t *tic); STATIC int xlog_state_release_iclog(xlog_t *log, xlog_in_core_t *iclog); STATIC void xlog_state_switch_iclogs(xlog_t *log, @@ -101,7 +100,6 @@ STATIC void xlog_ungrant_log_space(xlog_ /* local ticket functions */ -STATIC void xlog_state_ticket_alloc(xlog_t *log); STATIC xlog_ticket_t *xlog_ticket_get(xlog_t *log, int unit_bytes, int count, @@ -330,7 +328,7 @@ xfs_log_done(xfs_mount_t *mp, */ xlog_trace_loggrant(log, ticket, "xfs_log_done: (non-permanent)"); xlog_ungrant_log_space(log, ticket); - xlog_state_put_ticket(log, ticket); + xlog_ticket_put(log, ticket); } else { xlog_trace_loggrant(log, ticket, "xfs_log_done: (permanent)"); xlog_regrant_reserve_log_space(log, ticket); @@ -469,6 +467,8 @@ xfs_log_reserve(xfs_mount_t *mp, /* may sleep if need to allocate more tickets */ internal_ticket = xlog_ticket_get(log, unit_bytes, cnt, client, flags); + if (!internal_ticket) + return XFS_ERROR(ENOMEM); internal_ticket->t_trans_type = t_type; *ticket = internal_ticket; xlog_trace_loggrant(log, internal_ticket, @@ -693,7 +693,7 @@ xfs_log_unmount_write(xfs_mount_t *mp) if (tic) { xlog_trace_loggrant(log, tic, "unmount rec"); xlog_ungrant_log_space(log, tic); - xlog_state_put_ticket(log, tic); + xlog_ticket_put(log, tic); } } else { /* @@ -1208,7 +1208,6 @@ xlog_alloc_log(xfs_mount_t *mp, spin_lock_init(&log->l_icloglock); spin_lock_init(&log->l_grant_lock); initnsema(&log->l_flushsema, 0, "ic-flush"); - xlog_state_ticket_alloc(log); /* wait until after icloglock inited */ /* log record size must be multiple of BBSIZE; see xlog_rec_header_t */ ASSERT((XFS_BUF_SIZE(bp) & BBMASK) == 0); @@ -1541,7 +1540,6 @@ STATIC void xlog_dealloc_log(xlog_t *log) { xlog_in_core_t *iclog, *next_iclog; - xlog_ticket_t *tic, *next_tic; int i; iclog = log->l_iclog; @@ -1562,22 +1560,6 @@ xlog_dealloc_log(xlog_t *log) spinlock_destroy(&log->l_icloglock); spinlock_destroy(&log->l_grant_lock); - /* XXXsup take a look at this again. */ - if ((log->l_ticket_cnt != log->l_ticket_tcnt) && - !XLOG_FORCED_SHUTDOWN(log)) { - xfs_fs_cmn_err(CE_WARN, log->l_mp, - "xlog_dealloc_log: (cnt: %d, total: %d)", - log->l_ticket_cnt, log->l_ticket_tcnt); - /* ASSERT(log->l_ticket_cnt == log->l_ticket_tcnt); */ - - } else { - tic = log->l_unmount_free; - while (tic) { - next_tic = tic->t_next; - kmem_free(tic, PAGE_SIZE); - tic = next_tic; - } - } xfs_buf_free(log->l_xbuf); #ifdef XFS_LOG_TRACE if (log->l_trace != NULL) { @@ -2798,18 +2780,6 @@ xlog_ungrant_log_space(xlog_t *log, /* - * Atomically put back used ticket. - */ -STATIC void -xlog_state_put_ticket(xlog_t *log, - xlog_ticket_t *tic) -{ - spin_lock(&log->l_icloglock); - xlog_ticket_put(log, tic); - spin_unlock(&log->l_icloglock); -} /* xlog_state_put_ticket */ - -/* * Flush iclog to disk if this is the last reference to the given iclog and * the WANT_SYNC bit is set. * @@ -3179,92 +3149,19 @@ xlog_state_want_sync(xlog_t *log, xlog_i */ /* - * Algorithm doesn't take into account page size. ;-( - */ -STATIC void -xlog_state_ticket_alloc(xlog_t *log) -{ - xlog_ticket_t *t_list; - xlog_ticket_t *next; - xfs_caddr_t buf; - uint i = (PAGE_SIZE / sizeof(xlog_ticket_t)) - 2; - - /* - * The kmem_zalloc may sleep, so we shouldn't be holding the - * global lock. XXXmiken: may want to use zone allocator. - */ - buf = (xfs_caddr_t) kmem_zalloc(PAGE_SIZE, KM_SLEEP); - - spin_lock(&log->l_icloglock); - - /* Attach 1st ticket to Q, so we can keep track of allocated memory */ - t_list = (xlog_ticket_t *)buf; - t_list->t_next = log->l_unmount_free; - log->l_unmount_free = t_list++; - log->l_ticket_cnt++; - log->l_ticket_tcnt++; - - /* Next ticket becomes first ticket attached to ticket free list */ - if (log->l_freelist != NULL) { - ASSERT(log->l_tail != NULL); - log->l_tail->t_next = t_list; - } else { - log->l_freelist = t_list; - } - log->l_ticket_cnt++; - log->l_ticket_tcnt++; - - /* Cycle through rest of alloc'ed memory, building up free Q */ - for ( ; i > 0; i--) { - next = t_list + 1; - t_list->t_next = next; - t_list = next; - log->l_ticket_cnt++; - log->l_ticket_tcnt++; - } - t_list->t_next = NULL; - log->l_tail = t_list; - spin_unlock(&log->l_icloglock); -} /* xlog_state_ticket_alloc */ - - -/* - * Put ticket into free list - * - * Assumption: log lock is held around this call. + * Free a used ticket. */ STATIC void xlog_ticket_put(xlog_t *log, xlog_ticket_t *ticket) { sv_destroy(&ticket->t_sema); - - /* - * Don't think caching will make that much difference. It's - * more important to make debug easier. - */ -#if 0 - /* real code will want to use LIFO for caching */ - ticket->t_next = log->l_freelist; - log->l_freelist = ticket; - /* no need to clear fields */ -#else - /* When we debug, it is easier if tickets are cycled */ - ticket->t_next = NULL; - if (log->l_tail) { - log->l_tail->t_next = ticket; - } else { - ASSERT(log->l_freelist == NULL); - log->l_freelist = ticket; - } - log->l_tail = ticket; -#endif /* DEBUG */ - log->l_ticket_cnt++; + kmem_zone_free(xfs_log_ticket_zone, ticket); } /* xlog_ticket_put */ /* - * Grab ticket off freelist or allocation some more + * Allocate and initialise a new log ticket. */ STATIC xlog_ticket_t * xlog_ticket_get(xlog_t *log, @@ -3276,21 +3173,9 @@ xlog_ticket_get(xlog_t *log, xlog_ticket_t *tic; uint num_headers; - alloc: - if (log->l_freelist == NULL) - xlog_state_ticket_alloc(log); /* potentially sleep */ - - spin_lock(&log->l_icloglock); - if (log->l_freelist == NULL) { - spin_unlock(&log->l_icloglock); - goto alloc; - } - tic = log->l_freelist; - log->l_freelist = tic->t_next; - if (log->l_freelist == NULL) - log->l_tail = NULL; - log->l_ticket_cnt--; - spin_unlock(&log->l_icloglock); + tic = kmem_zone_zalloc(xfs_log_ticket_zone, KM_SLEEP|KM_MAYFAIL); + if (!tic) + return NULL; /* * Permanent reservations have up to 'cnt'-1 active log operations Index: 2.6.x-xfs-new/fs/xfs/xfs_log_priv.h =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_log_priv.h 2008-03-13 13:59:10.806160556 +1100 +++ 2.6.x-xfs-new/fs/xfs/xfs_log_priv.h 2008-03-13 14:06:58.110733971 +1100 @@ -242,7 +242,7 @@ typedef struct xlog_res { typedef struct xlog_ticket { sv_t t_sema; /* sleep on this semaphore : 20 */ - struct xlog_ticket *t_next; /* :4|8 */ + struct xlog_ticket *t_next; /* :4|8 */ struct xlog_ticket *t_prev; /* :4|8 */ xlog_tid_t t_tid; /* transaction identifier : 4 */ int t_curr_res; /* current reservation in bytes : 4 */ @@ -406,13 +406,8 @@ typedef struct log { sema_t l_flushsema; /* iclog flushing semaphore */ int l_flushcnt; /* # of procs waiting on this * sema */ - int l_ticket_cnt; /* free ticket count */ - int l_ticket_tcnt; /* total ticket count */ int l_covered_state;/* state of "covering disk * log entries" */ - xlog_ticket_t *l_freelist; /* free list of tickets */ - xlog_ticket_t *l_unmount_free;/* kmem_free these addresses */ - xlog_ticket_t *l_tail; /* free list of tickets */ xlog_in_core_t *l_iclog; /* head log queue */ spinlock_t l_icloglock; /* grab to change iclog state */ xfs_lsn_t l_tail_lsn; /* lsn of 1st LR with unflushed @@ -478,6 +473,8 @@ extern struct xfs_buf *xlog_get_bp(xlog_ extern void xlog_put_bp(struct xfs_buf *); extern int xlog_bread(xlog_t *, xfs_daddr_t, int, struct xfs_buf *); +extern kmem_zone_t *xfs_log_ticket_zone; + /* iclog tracing */ #define XLOG_TRACE_GRAB_FLUSH 1 #define XLOG_TRACE_REL_FLUSH 2 Index: 2.6.x-xfs-new/fs/xfs/xfs_vfsops.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_vfsops.c 2008-03-13 13:58:08.866070224 +1100 +++ 2.6.x-xfs-new/fs/xfs/xfs_vfsops.c 2008-03-13 13:59:59.208010688 +1100 @@ -68,15 +68,17 @@ xfs_init(void) /* * Initialize all of the zone allocators we use. */ + xfs_log_ticket_zone = kmem_zone_init(sizeof(xlog_ticket_t), + "xfs_log_ticket"); xfs_bmap_free_item_zone = kmem_zone_init(sizeof(xfs_bmap_free_item_t), - "xfs_bmap_free_item"); + "xfs_bmap_free_item"); xfs_btree_cur_zone = kmem_zone_init(sizeof(xfs_btree_cur_t), - "xfs_btree_cur"); - xfs_trans_zone = kmem_zone_init(sizeof(xfs_trans_t), "xfs_trans"); - xfs_da_state_zone = - kmem_zone_init(sizeof(xfs_da_state_t), "xfs_da_state"); + "xfs_btree_cur"); + xfs_da_state_zone = kmem_zone_init(sizeof(xfs_da_state_t), + "xfs_da_state"); xfs_dabuf_zone = kmem_zone_init(sizeof(xfs_dabuf_t), "xfs_dabuf"); xfs_ifork_zone = kmem_zone_init(sizeof(xfs_ifork_t), "xfs_ifork"); + xfs_trans_zone = kmem_zone_init(sizeof(xfs_trans_t), "xfs_trans"); xfs_acl_zone_init(xfs_acl_zone, "xfs_acl"); xfs_mru_cache_init(); xfs_filestream_init(); Index: 2.6.x-xfs-new/fs/xfs/xfsidbg.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfsidbg.c 2008-03-13 13:07:25.000000000 +1100 +++ 2.6.x-xfs-new/fs/xfs/xfsidbg.c 2008-03-13 14:10:13.489855395 +1100 @@ -5607,9 +5607,9 @@ xfsidbg_xiclog(xlog_in_core_t *iclog) be32_to_cpu(iclog->ic_header.h_magicno), be32_to_cpu(iclog->ic_header.h_cycle), be32_to_cpu(iclog->ic_header.h_version), - be64_to_cpu(iclog->ic_header.h_lsn)); + (unsigned long long)be64_to_cpu(iclog->ic_header.h_lsn)); kdb_printf("tail_lsn: 0x%Lx len: %d prev_block: %d num_ops: %d\n", - be64_to_cpu(iclog->ic_header.h_tail_lsn), + (unsigned long long)be64_to_cpu(iclog->ic_header.h_tail_lsn), be32_to_cpu(iclog->ic_header.h_len), be32_to_cpu(iclog->ic_header.h_prev_block), be32_to_cpu(iclog->ic_header.h_num_logops)); @@ -5829,11 +5829,8 @@ xfsidbg_xlog(xlog_t *log) }; kdb_printf("xlog at 0x%p\n", log); - kdb_printf("&flushsm: 0x%p flushcnt: %d tic_cnt: %d tic_tcnt: %d \n", - &log->l_flushsema, log->l_flushcnt, - log->l_ticket_cnt, log->l_ticket_tcnt); - kdb_printf("freelist: 0x%p tail: 0x%p ICLOG: 0x%p \n", - log->l_freelist, log->l_tail, log->l_iclog); + kdb_printf("&flushsm: 0x%p flushcnt: %d ICLOG: 0x%p \n", + &log->l_flushsema, log->l_flushcnt, log->l_iclog); kdb_printf("&icloglock: 0x%p tail_lsn: %s last_sync_lsn: %s \n", &log->l_icloglock, xfs_fmtlsn(&log->l_tail_lsn), xfs_fmtlsn(&log->l_last_sync_lsn)); From owner-xfs@oss.sgi.com Tue Apr 1 18:10:54 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 18:11:09 -0700 (PDT) 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.0 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 m321Aogo014887 for ; Tue, 1 Apr 2008 18:10:52 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA13155; Wed, 2 Apr 2008 10:29:43 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m320TgsT118520072; Wed, 2 Apr 2008 10:29:42 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m320TeXR116352804; Wed, 2 Apr 2008 10:29:40 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 2 Apr 2008 10:29:40 +1000 From: David Chinner To: Eric Sandeen Cc: xfs-oss Subject: Re: [PATCH] combined features2 fixup patches (updating/rewriting what was sent in other threads) Message-ID: <20080402002940.GZ103491721@sgi.com> References: <47F0546C.9070709@sandeen.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <47F0546C.9070709@sandeen.net> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15126 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Sun, Mar 30, 2008 at 10:03:08PM -0500, Eric Sandeen wrote: > Ensure "both" features2 slots are consistent, and set mp attr2 flag. > > Since older kernels may look in the sb_bad_features2 slot for > flags, rather than zeroing it out on fixup, we should make it > equal to the sb_features2 value. > > Also, if the ATTR2 flag was not found prior to features2 > fixup, it was not set in the mount flags, so re-check after the > fixup so that the current session will use the feature. > > Also fix up the comments to reflect these changes. > > Signed-off-by: Eric Sandeen > --- > > Index: linux-2.6-xfs/fs/xfs/xfs_mount.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.c > +++ linux-2.6-xfs/fs/xfs/xfs_mount.c > @@ -967,22 +967,26 @@ xfs_mountfs( > xfs_mount_common(mp, sbp); > > /* > - * Check for a bad features2 field alignment. This happened on > - * some platforms due to xfs_sb_t not being 64bit size aligned > - * when sb_features was added and hence the compiler put it in > - * the wrong place. > + * Check for a mismatched features2 values. Older kernels > + * read & wrote into the wrong sb offset for sb_features2 > + * on some platforms due to xfs_sb_t not being 64bit size aligned > + * when sb_features2 was added, which made older superblock > + * reading/writing routines swap it as a 64-bit value. > * > - * If we detect a bad field, we or the set bits into the existing > - * features2 field in case it has already been modified and we > - * don't want to lose any features. Zero the bad one and mark > - * the two fields as needing updates once the transaction subsystem > - * is online. > + * For backwards compatibility, we make both slots equal. > + * > + * If we detect a mismatched field, we OR the set bits into the > + * existing features2 field in case it has already been modified; we > + * don't want to lose any features. We then update the bad location > + * with the ORed value so that older kernels will see any features2 > + * flags, and mark the two fields as needing updates once the > + * transaction subsystem is online. > */ > - if (xfs_sb_has_bad_features2(sbp)) { > + if (xfs_sb_has_mismatched_features2(sbp)) { > cmn_err(CE_WARN, > "XFS: correcting sb_features alignment problem"); > sbp->sb_features2 |= sbp->sb_bad_features2; > - sbp->sb_bad_features2 = 0; > + sbp->sb_bad_features2 = sbp->sb_features2; > update_flags |= XFS_SB_FEATURES2 | XFS_SB_BAD_FEATURES2; Probably should update XFS_MOUNT_ATTR2 here, not later. i.e. before we mount he log and start recovery. > @@ -1181,6 +1185,12 @@ xfs_mountfs( > xfs_mount_log_sb(mp, update_flags); > > /* > + * Re-check for ATTR2 in case it was found in bad_features2 slot. > + */ > + if (xfs_sb_version_hasattr2(&mp->m_sb)) > + mp->m_flags |= XFS_MOUNT_ATTR2; > + Rather than here. > /* > - * Detect a bad features2 field > + * Detect a mismatched features2 field. Older kernels read/wrote > + * this into the wrong slot, so to be safe we keep them in sync. > */ > -static inline int xfs_sb_has_bad_features2(xfs_sb_t *sbp) > +static inline int xfs_sb_has_mismatched_features2(xfs_sb_t *sbp) > { > - return (sbp->sb_bad_features2 != 0); > + return (sbp->sb_bad_features2 != sbp->sb_features2); > } Yep, makes sense. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Tue Apr 1 18:11:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 18:11:41 -0700 (PDT) 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.0 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 m321Aogw014887 for ; Tue, 1 Apr 2008 18:11:04 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA10655; Wed, 2 Apr 2008 09:13:49 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m31NDnsT118704719; Wed, 2 Apr 2008 09:13:49 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m31NDmb3116282386; Wed, 2 Apr 2008 09:13:48 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 2 Apr 2008 09:13:48 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [Patch] Per iclog callback chain lock Message-ID: <20080401231348.GT103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15131 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Introduce an iclog callback chain lock. Rather than use the icloglock for protecting the iclog completion callback chain, use a new per-iclog lock so that walking the callback chain doesn't require holding a global lock. This reduces contention on the icloglock during log buffer I/O completion as the callback chain lock is take for every callback that is issued. On large log buffers, this can number in the hundreds to thousands per iclog so isolating the lock to the iclog makes a lot of sense. Signed-off-by: Dave Chinner --- fs/xfs/xfs_log.c | 35 +++++++++++++++++++---------------- fs/xfs/xfs_log_priv.h | 33 ++++++++++++++++++++++++++------- 2 files changed, 45 insertions(+), 23 deletions(-) Index: 2.6.x-xfs-new/fs/xfs/xfs_log.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_log.c 2008-03-13 13:10:23.000000000 +1100 +++ 2.6.x-xfs-new/fs/xfs/xfs_log.c 2008-03-13 19:35:51.251913648 +1100 @@ -397,12 +397,10 @@ xfs_log_notify(xfs_mount_t *mp, /* mo void *iclog_hndl, /* iclog to hang callback off */ xfs_log_callback_t *cb) { - xlog_t *log = mp->m_log; xlog_in_core_t *iclog = (xlog_in_core_t *)iclog_hndl; int abortflg; - cb->cb_next = NULL; - spin_lock(&log->l_icloglock); + spin_lock(&iclog->ic_callback_lock); abortflg = (iclog->ic_state & XLOG_STATE_IOERROR); if (!abortflg) { ASSERT_ALWAYS((iclog->ic_state == XLOG_STATE_ACTIVE) || @@ -411,7 +409,7 @@ xfs_log_notify(xfs_mount_t *mp, /* mo *(iclog->ic_callback_tail) = cb; iclog->ic_callback_tail = &(cb->cb_next); } - spin_unlock(&log->l_icloglock); + spin_unlock(&iclog->ic_callback_lock); return abortflg; } /* xfs_log_notify */ @@ -1257,6 +1255,8 @@ xlog_alloc_log(xfs_mount_t *mp, iclog->ic_size = XFS_BUF_SIZE(bp) - log->l_iclog_hsize; iclog->ic_state = XLOG_STATE_ACTIVE; iclog->ic_log = log; + atomic_set(&iclog->ic_refcnt, 0); + spin_lock_init(&iclog->ic_callback_lock); iclog->ic_callback_tail = &(iclog->ic_callback); iclog->ic_datap = (char *)iclog->hic_data + log->l_iclog_hsize; @@ -1990,7 +1990,7 @@ xlog_state_clean_log(xlog_t *log) if (iclog->ic_state == XLOG_STATE_DIRTY) { iclog->ic_state = XLOG_STATE_ACTIVE; iclog->ic_offset = 0; - iclog->ic_callback = NULL; /* don't need to free */ + ASSERT(iclog->ic_callback == NULL); /* * If the number of ops in this iclog indicate it just * contains the dummy transaction, we can @@ -2193,37 +2193,40 @@ xlog_state_do_callback( be64_to_cpu(iclog->ic_header.h_lsn); spin_unlock(&log->l_grant_lock); - /* - * Keep processing entries in the callback list - * until we come around and it is empty. We - * need to atomically see that the list is - * empty and change the state to DIRTY so that - * we don't miss any more callbacks being added. - */ - spin_lock(&log->l_icloglock); } else { + spin_unlock(&log->l_icloglock); ioerrors++; } - cb = iclog->ic_callback; + /* + * Keep processing entries in the callback list until + * we come around and it is empty. We need to + * atomically see that the list is empty and change the + * state to DIRTY so that we don't miss any more + * callbacks being added. + */ + spin_lock(&iclog->ic_callback_lock); + cb = iclog->ic_callback; while (cb) { iclog->ic_callback_tail = &(iclog->ic_callback); iclog->ic_callback = NULL; - spin_unlock(&log->l_icloglock); + spin_unlock(&iclog->ic_callback_lock); /* perform callbacks in the order given */ for (; cb; cb = cb_next) { cb_next = cb->cb_next; cb->cb_func(cb->cb_arg, aborted); } - spin_lock(&log->l_icloglock); + spin_lock(&iclog->ic_callback_lock); cb = iclog->ic_callback; } loopdidcallbacks++; funcdidcallbacks++; + spin_lock(&log->l_icloglock); ASSERT(iclog->ic_callback == NULL); + spin_unlock(&iclog->ic_callback_lock); if (!(iclog->ic_state & XLOG_STATE_IOERROR)) iclog->ic_state = XLOG_STATE_DIRTY; Index: 2.6.x-xfs-new/fs/xfs/xfs_log_priv.h =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_log_priv.h 2008-02-22 13:48:25.000000000 +1100 +++ 2.6.x-xfs-new/fs/xfs/xfs_log_priv.h 2008-03-13 19:34:57.430809151 +1100 @@ -324,6 +324,19 @@ typedef struct xlog_rec_ext_header { * - ic_offset is the current number of bytes written to in this iclog. * - ic_refcnt is bumped when someone is writing to the log. * - ic_state is the state of the iclog. + * + * Because of cacheline contention on large machines, we need to separate + * various resources onto different cachelines. To start with, make the + * structure cacheline aligned. The following fields can be contended on + * by independent processes: + * + * - ic_callback_* + * - ic_refcnt + * - fields protected by the global l_icloglock + * + * so we need to ensure that these fields are located in separate cachelines. + * We'll put all the read-only and l_icloglock fields in the first cacheline, + * and move everything else out to subsequent cachelines. */ typedef struct xlog_iclog_fields { sv_t ic_forcesema; @@ -332,18 +345,23 @@ typedef struct xlog_iclog_fields { struct xlog_in_core *ic_prev; struct xfs_buf *ic_bp; struct log *ic_log; - xfs_log_callback_t *ic_callback; - xfs_log_callback_t **ic_callback_tail; -#ifdef XFS_LOG_TRACE - struct ktrace *ic_trace; -#endif int ic_size; int ic_offset; - atomic_t ic_refcnt; int ic_bwritecnt; ushort_t ic_state; char *ic_datap; /* pointer to iclog data */ -} xlog_iclog_fields_t; +#ifdef XFS_LOG_TRACE + struct ktrace *ic_trace; +#endif + + /* Callback structures need their own cacheline */ + spinlock_t ic_callback_lock ____cacheline_aligned_in_smp; + xfs_log_callback_t *ic_callback; + xfs_log_callback_t **ic_callback_tail; + + /* reference counts need their own cacheline */ + atomic_t ic_refcnt ____cacheline_aligned_in_smp; +} xlog_iclog_fields_t ____cacheline_aligned_in_smp; typedef union xlog_in_core2 { xlog_rec_header_t hic_header; @@ -366,6 +384,7 @@ typedef struct xlog_in_core { #define ic_bp hic_fields.ic_bp #define ic_log hic_fields.ic_log #define ic_callback hic_fields.ic_callback +#define ic_callback_lock hic_fields.ic_callback_lock #define ic_callback_tail hic_fields.ic_callback_tail #define ic_trace hic_fields.ic_trace #define ic_size hic_fields.ic_size From owner-xfs@oss.sgi.com Tue Apr 1 18:11:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 18:11:27 -0700 (PDT) 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.0 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 m321Aoh2014887 for ; Tue, 1 Apr 2008 18:11:11 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA11016; Wed, 2 Apr 2008 09:24:08 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m31NO7sT118601451; Wed, 2 Apr 2008 09:24:07 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m31NO6CX118689677; Wed, 2 Apr 2008 09:24:06 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 2 Apr 2008 09:24:06 +1000 From: David Chinner To: David Chinner Cc: xfs-dev , xfs-oss Subject: Re: [Patch] Per iclog callback chain lock Message-ID: <20080401232406.GX103491721@sgi.com> References: <20080401231348.GT103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080401231348.GT103491721@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15130 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 09:13:48AM +1000, David Chinner wrote: > Introduce an iclog callback chain lock. > > Rather than use the icloglock for protecting the iclog completion > callback chain, use a new per-iclog lock so that walking the > callback chain doesn't require holding a global lock. > > This reduces contention on the icloglock during log buffer I/O > completion as the callback chain lock is take for every callback > that is issued. This is not accurate - the callback chain is removed in bulk then walked without the lock, but will loop over the iclog chain in case callbacks were added while processing the chain (not sure if that can even happen, though). [mental note - don't write patch descriptions before first coffee completion occurs.] Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Tue Apr 1 18:11:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 18:11:19 -0700 (PDT) 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.0 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 m321Aogs014887 for ; Tue, 1 Apr 2008 18:10:58 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA10899; Wed, 2 Apr 2008 09:18:16 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m31NIGsT118164335; Wed, 2 Apr 2008 09:18:16 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m31NIFof118690659; Wed, 2 Apr 2008 09:18:15 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 2 Apr 2008 09:18:15 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [Patch] unique per-AG inode generation number initialisation Message-ID: <20080401231815.GW103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15128 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Don't initialise new inode generation numbers to zero When we allocation new inode chunks, we initialise the generation numbers to zero. This works fine until we delete a chunk and then reallocate it, resulting in the same inode numbers but with a reset generation count. This can result in inode/generation pairs of different inodes occurring relatively close together. Given that the inode/gen pair makes up the "unique" portion of an NFS filehandle on XFS, this can result in file handles cached on clients being seen on the wire from the server but refer to a different file. This causes .... issues for NFS clients. Hence we need a unique generation number initialisation for each inode to prevent reuse of a small portion of the generation number space. Make this initialiser per-allocation group so that it is not a single point of contention in the filesystem, and increment it on every allocation within an AG to reduce the chance that a generation number is reused for a given inode number if the inode chunk is deleted and reallocated immediately afterwards. It is safe to add the agi_newinogen field to the AGI without using a feature bit. If an older kernel is used, it simply will not update the field on allocation. If the kernel is updated and the field has garbage in it, then it's like having a random seed to the generation number.... Signed-off-by: Dave Chinner --- fs/xfs/xfs_ag.h | 4 +++- fs/xfs/xfs_ialloc.c | 30 ++++++++++++++++++++++-------- 2 files changed, 25 insertions(+), 9 deletions(-) Index: 2.6.x-xfs-new/fs/xfs/xfs_ag.h =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_ag.h 2008-01-18 18:30:06.000000000 +1100 +++ 2.6.x-xfs-new/fs/xfs/xfs_ag.h 2008-03-26 13:03:41.122918236 +1100 @@ -121,6 +121,7 @@ typedef struct xfs_agi { * still being referenced. */ __be32 agi_unlinked[XFS_AGI_UNLINKED_BUCKETS]; + __be32 agi_newinogen; /* inode cluster generation */ } xfs_agi_t; #define XFS_AGI_MAGICNUM 0x00000001 @@ -134,7 +135,8 @@ typedef struct xfs_agi { #define XFS_AGI_NEWINO 0x00000100 #define XFS_AGI_DIRINO 0x00000200 #define XFS_AGI_UNLINKED 0x00000400 -#define XFS_AGI_NUM_BITS 11 +#define XFS_AGI_NEWINOGEN 0x00000800 +#define XFS_AGI_NUM_BITS 12 #define XFS_AGI_ALL_BITS ((1 << XFS_AGI_NUM_BITS) - 1) /* disk block (xfs_daddr_t) in the AG */ Index: 2.6.x-xfs-new/fs/xfs/xfs_ialloc.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_ialloc.c 2008-03-25 15:41:27.000000000 +1100 +++ 2.6.x-xfs-new/fs/xfs/xfs_ialloc.c 2008-03-26 14:29:47.998554368 +1100 @@ -309,6 +309,8 @@ xfs_ialloc_ag_alloc( free = XFS_MAKE_IPTR(args.mp, fbuf, i); free->di_core.di_magic = cpu_to_be16(XFS_DINODE_MAGIC); free->di_core.di_version = version; + free->di_core.di_gen = agi->agi_newinogen; + be32_add_cpu(&agi->agi_newinogen, 1); free->di_next_unlinked = cpu_to_be32(NULLAGINO); xfs_ialloc_log_di(tp, fbuf, i, XFS_DI_CORE_BITS | XFS_DI_NEXT_UNLINKED); @@ -347,7 +349,8 @@ xfs_ialloc_ag_alloc( * Log allocation group header fields */ xfs_ialloc_log_agi(tp, agbp, - XFS_AGI_COUNT | XFS_AGI_FREECOUNT | XFS_AGI_NEWINO); + XFS_AGI_COUNT | XFS_AGI_FREECOUNT | + XFS_AGI_NEWINO | XFS_AGI_NEWINOGEN); /* * Modify/log superblock values for inode count and inode free count. */ @@ -896,11 +899,12 @@ nextag: ino = XFS_AGINO_TO_INO(mp, agno, rec.ir_startino + offset); XFS_INOBT_CLR_FREE(&rec, offset); rec.ir_freecount--; + be32_add_cpu(&agi->agi_newinogen, 1); if ((error = xfs_inobt_update(cur, rec.ir_startino, rec.ir_freecount, rec.ir_free))) goto error0; be32_add(&agi->agi_freecount, -1); - xfs_ialloc_log_agi(tp, agbp, XFS_AGI_FREECOUNT); + xfs_ialloc_log_agi(tp, agbp, XFS_AGI_FREECOUNT | XFS_AGI_NEWINOGEN); down_read(&mp->m_peraglock); mp->m_perag[tagno].pagi_freecount--; up_read(&mp->m_peraglock); @@ -1320,6 +1324,11 @@ xfs_ialloc_compute_maxlevels( /* * Log specified fields for the ag hdr (inode section) + * + * We don't log the unlinked inode fields through here; they + * get logged directly to the buffer. Hence we have a discontinuity + * in the fields we are logging and we need two calls to map all + * the dirtied parts of the agi.... */ void xfs_ialloc_log_agi( @@ -1342,22 +1351,27 @@ xfs_ialloc_log_agi( offsetof(xfs_agi_t, agi_newino), offsetof(xfs_agi_t, agi_dirino), offsetof(xfs_agi_t, agi_unlinked), + offsetof(xfs_agi_t, agi_newinogen), sizeof(xfs_agi_t) }; + int log_newino = fields & XFS_AGI_NEWINOGEN; + #ifdef DEBUG xfs_agi_t *agi; /* allocation group header */ agi = XFS_BUF_TO_AGI(bp); ASSERT(be32_to_cpu(agi->agi_magicnum) == XFS_AGI_MAGIC); #endif - /* - * Compute byte offsets for the first and last fields. - */ + fields &= ~XFS_AGI_NEWINOGEN; + + /* Compute byte offsets for the first and last fields. */ xfs_btree_offsets(fields, offsets, XFS_AGI_NUM_BITS, &first, &last); - /* - * Log the allocation group inode header buffer. - */ xfs_trans_log_buf(tp, bp, first, last); + if (log_newino) { + xfs_btree_offsets(XFS_AGI_NEWINOGEN, offsets, XFS_AGI_NUM_BITS, + &first, &last); + xfs_trans_log_buf(tp, bp, first, last); + } } /* From owner-xfs@oss.sgi.com Tue Apr 1 18:11:17 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 18:11:42 -0700 (PDT) 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.0 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 m321Aoh4014887 for ; Tue, 1 Apr 2008 18:11:15 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA10354; Wed, 2 Apr 2008 09:00:46 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m31N0jsT118685679; Wed, 2 Apr 2008 09:00:46 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m31N0jA4117633674; Wed, 2 Apr 2008 09:00:45 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 2 Apr 2008 09:00:44 +1000 From: David Chinner To: David Chinner Cc: xfs-dev , xfs@oss.sgi.com Subject: Re: [Review] Improve XFS error checking and propagation Message-ID: <20080401230044.GS103491721@sgi.com> References: <20080311010420.GD155407@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080311010420.GD155407@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15133 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs ping? On Tue, Mar 11, 2008 at 12:04:21PM +1100, David Chinner wrote: > A recent paper at the FAST08 conference highlighted a large number > of unchecked error paths in Linux filesystems and I/O layers. As a > subsystem, XFS had the highest aggregate numbers of bad error > propagation. A tarball which contains a quilt patch series of 32 > patches aimed at improving this situation can be found here: > > http://oss.sgi.com/~dgc/xfs/error-check/xfs-error-checking.tar.gz > > The paper "EIO: Error Handling is Occasionally Correct" can be found > here: > > http://www.cs.wisc.edu/adsl/Publications/eio-fast08.html > > And the in depth results here: > > http://www.cs.wisc.edu/adsl/Publications/eio-fast08/readme.html > http://www.cs.wisc.edu/adsl/Publications/eio-fast08/ > > The XFS results I've been working from are here: > > http://www.cs.wisc.edu/adsl/Publications/eio-fast08/fullfs-xfs-without-false-positives.txt > > and included below is an annotated version of this file as I've > worked through it. The graph of the XFS error paths is a good > visual representation of how the bad error paths tend to cluster > together: > > http://www.cs.wisc.edu/adsl/Publications/eio-fast08/singlefs-xfs.pdf > > (you'll need at least 800% zoom to be able to read it at all) > > The paper analysed a 2.6.15 kernel, but I've been working against an > xfs-dev tree (~2.6.24). Of the 101 reported problems for the 2.6.15 > kernel that was analysed: > > - 7 did not exist anymore (bhv layer, dirv1, write path changes) > - 11 were false positives that were not modified > - 24 were false positives that have been patched to remove > (e.g. int xfs_foo() to void xfs_foo()) > - 37 real problems where an error needed to be returned and are > fixed in the patch series. > - 3 where there is no error path to return an error and no > point in even warning about it (ENOSPC flushing) > - 10 where there is no error path to return an error, but > patched to warn to the syslog about potential data loss > or metadata I/O errors > - 4 were already fixed in the xfs-dev tree > - 2 where the error is ignored because we must continue anyway > (patched to warn to syslog) > - 4 that I haven't yet fixed (xfs_buf_iostrategy and > xfs_buf_iostart) because I need to think about them more. > > Cheers, > > Dave. > -- > Dave Chinner > Principal Engineer > SGI Australian Software Group > > > ---------------------------------------- fs/xfs/ ---- > > d 1 xfs_write -> _xfs_log_force fs/xfs/linux-2.6/xfs_lrw.c 881 > d 2 xfs_write -> _xfs_log_force fs/xfs/linux-2.6/xfs_lrw.c 884 > F 3 xfs_flush_device -> _xfs_log_force fs/xfs/linux-2.6/xfs_super.c 547 > F 4 xfs_qm_dqflush -> _xfs_log_force fs/xfs/quota/xfs_dquot.c 1294 > F 5 xfs_qm_dqflock_pushbuf_wait -> _xfs_log_force fs/xfs/quota/xfs_dquot.c 1591 > F 6 xfs_qm_dqunpin_wait -> _xfs_log_force fs/xfs/quota/xfs_dquot_item.c 204 > F 7 xfs_qm_dquot_logitem_pushbuf -> _xfs_log_force fs/xfs/quota/xfs_dquot_item.c 267 > F 8 xfs_alloc_search_busy -> _xfs_log_force fs/xfs/xfs_alloc.c 2593 > F 9 xfs_iunpin_wait -> _xfs_log_force fs/xfs/xfs_inode.c 2847 > F 10 xfs_iflush -> _xfs_log_force fs/xfs/xfs_inode.c 3243 > F 11 xfs_inode_item_pushbuf -> _xfs_log_force fs/xfs/xfs_inode_item.c 819 > P 12 xfs_log_unmount_write -> _xfs_log_force fs/xfs/xfs_log.c 529 > F 13 xlog_recover_finish -> _xfs_log_force fs/xfs/xfs_log_recover.c 3961 > F 14 xfs_unmountfs -> _xfs_log_force fs/xfs/xfs_mount.c 1088 > F 15 xfs_trans_push_ail -> _xfs_log_force fs/xfs/xfs_trans_ail.c 198 > F 16 xfs_syncsub -> _xfs_log_force fs/xfs/xfs_vfsops.c 1440 > F 17 xfs_syncsub -> _xfs_log_force fs/xfs/xfs_vfsops.c 1455 > F 18 xfs_syncsub -> _xfs_log_force fs/xfs/xfs_vfsops.c 1491 > F 19 xfs_syncsub -> _xfs_log_force fs/xfs/xfs_vfsops.c 1543 > P 20 xfs_fsync -> _xfs_log_force fs/xfs/xfs_vnodeops.c 1129 > P 21 xfs_qm_write_sb_changes -> _xfs_trans_commit fs/xfs/quota/xfs_qm.c 2414 > P 22 xfs_qm_scall_setqlim -> _xfs_trans_commit fs/xfs/quota/xfs_qm_syscalls.c 739 > P 23 xfs_itruncate_finish -> _xfs_trans_commit fs/xfs/xfs_inode.c 1718 > P 24 xlog_recover_process_efi -> _xfs_trans_commit fs/xfs/xfs_log_recover.c 3047 > P 25 xlog_recover_clear_agi_bucket -> _xfs_trans_commit fs/xfs/xfs_log_recover.c 3174 > PB 26 xfs_mount_log_sbunit -> _xfs_trans_commit fs/xfs/xfs_mount.c 1579 > P 27 xfs_growfs_rt_alloc -> _xfs_trans_commit fs/xfs/xfs_rtalloc.c 154 > P 28 xfs_growfs_rt_alloc -> _xfs_trans_commit fs/xfs/xfs_rtalloc.c 191 > P 29 xfs_growfs_rt -> _xfs_trans_commit fs/xfs/xfs_rtalloc.c 2103 > P 30 xfs_inactive_attrs -> _xfs_trans_commit fs/xfs/xfs_vnodeops.c 1505 > C 31 xfs_inactive -> _xfs_trans_commit fs/xfs/xfs_vnodeops.c 1790 > d 32 xfs_initialize_vnode -> bhv_insert fs/xfs/linux-2.6/xfs_super.c 220 > d 33 vfs_insertops -> bhv_insert fs/xfs/linux-2.6/xfs_vfs.c 259 > N 34 linvfs_truncate -> block_truncate_page fs/xfs/linux-2.6/xfs_iops.c 651 > G 35 fs_flushinval_pages -> filemap_fdatawait fs/xfs/linux-2.6/xfs_fs_subr.c 83 > G 36 fs_flush_pages -> filemap_fdatawait fs/xfs/linux-2.6/xfs_fs_subr.c 108 > G 37 fs_flushinval_pages -> filemap_fdatawrite fs/xfs/linux-2.6/xfs_fs_subr.c 82 > G 38 fs_flush_pages -> filemap_fdatawrite fs/xfs/linux-2.6/xfs_fs_subr.c 105 > n 39 xfs_flush_inode_work -> filemap_flush fs/xfs/linux-2.6/xfs_super.c 508 > PM 40 xlog_sync -> pagebuf_associate_memory fs/xfs/xfs_log.c 1358 > PM 41 xlog_sync -> pagebuf_associate_memory fs/xfs/xfs_log.c 1395 > PM 42 xlog_write_log_records -> pagebuf_associate_memory fs/xfs/xfs_log_recover.c 1156 > PM 43 xlog_write_log_records -> pagebuf_associate_memory fs/xfs/xfs_log_recover.c 1159 > PM 44 xlog_do_recovery_pass -> pagebuf_associate_memory fs/xfs/xfs_log_recover.c 3646 > PM 45 xlog_do_recovery_pass -> pagebuf_associate_memory fs/xfs/xfs_log_recover.c 3653 > PM 46 xlog_do_recovery_pass -> pagebuf_associate_memory fs/xfs/xfs_log_recover.c 3705 > PM 47 xlog_do_recovery_pass -> pagebuf_associate_memory fs/xfs/xfs_log_recover.c 3711 > M 48 xfs_buf_read_flags -> pagebuf_iostart fs/xfs/linux-2.6/xfs_buf.c 636 > M 49 xfsbufd -> pagebuf_iostrategy fs/xfs/linux-2.6/xfs_buf.c 1755 > M 50 xfs_flush_buftarg -> pagebuf_iostrategy fs/xfs/linux-2.6/xfs_buf.c 1816 > M 51 XFS_bwrite -> pagebuf_iostrategy fs/xfs/linux-2.6/xfs_buf.h 503 > n 52 xfs_flush_device_work -> sync_blockdev fs/xfs/linux-2.6/xfs_super.c 533 > f 53 exit_xfs_fs -> unregister_filesystem fs/xfs/linux-2.6/xfs_super.c 999 > PM 54 xfs_acl_vset -> xfs_acl_vremove fs/xfs/xfs_acl.c 326 > f 55 xfs_ialloc_ag_select -> xfs_alloc_pagf_init fs/xfs/xfs_ialloc.c 411 > P 56 xfs_qm_dqflush -> xfs_bawrite fs/xfs/quota/xfs_dquot.c 1300 > N 57 xfs_qm_dqflock_pushbuf_wait -> xfs_bawrite fs/xfs/quota/xfs_dquot.c 1595 > N 58 xfs_qm_dquot_logitem_pushbuf -> xfs_bawrite fs/xfs/quota/xfs_dquot_item.c 275 > N 59 xfs_buf_item_push -> xfs_bawrite fs/xfs/xfs_buf_item.c 669 > P 60 xfs_iflush -> xfs_bawrite fs/xfs/xfs_inode.c 3249 > N 61 xfs_inode_item_pushbuf -> xfs_bawrite fs/xfs/xfs_inode_item.c 823 > F 62 xfs_qm_dqflush -> xfs_bdwrite fs/xfs/quota/xfs_dquot.c 1298 > F 63 xfs_qm_dqiter_bufs -> xfs_bdwrite fs/xfs/quota/xfs_qm.c 1551 > F 64 xfs_iflush -> xfs_bdwrite fs/xfs/xfs_inode.c 3247 > F 65 xlog_recover_do_buffer_trans -> xfs_bdwrite fs/xfs/xfs_log_recover.c 2271 > F 66 xlog_recover_do_inode_trans -> xfs_bdwrite fs/xfs/xfs_log_recover.c 2535 > F 67 xlog_recover_do_dquot_trans -> xfs_bdwrite fs/xfs/xfs_log_recover.c 2664 > C 68 xfs_inactive -> xfs_bmap_finish fs/xfs/xfs_vnodeops.c 1788 > P 69 xfs_iomap_write_allocate -> xfs_bmap_last_offset fs/xfs/xfs_iomap.c 787 > d 70 xfs_dir_leaf_rebalance -> xfs_dir_leaf_compact fs/xfs/xfs_dir_leaf.c 1146 > d 71 xfs_dir_leaf_rebalance -> xfs_dir_leaf_compact fs/xfs/xfs_dir_leaf.c 1176 > d 72 xfs_dir_leaf_to_shortform -> xfs_dir_shortform_addname fs/xfs/xfs_dir_leaf.c 693 > P 73 xlog_recover_process_efi -> xfs_free_extent fs/xfs/xfs_log_recover.c 3041 > n 74 xfs_inode_item_push -> xfs_iflush fs/xfs/xfs_inode_item.c 879 > P 75 xlog_recover_do_inode_trans -> xfs_imap fs/xfs/xfs_log_recover.c 2320 > f 76 xfs_bmap_add_extent -> xfs_mod_incore_sb fs/xfs/xfs_bmap.c 689 > f 77 xfs_bmap_add_extent_hole_delay -> xfs_mod_incore_sb fs/xfs/xfs_bmap.c 1918 > f 78 xfs_bmap_del_extent -> xfs_mod_incore_sb fs/xfs/xfs_bmap.c 3117 > f 79 xfs_bmapi -> xfs_mod_incore_sb fs/xfs/xfs_bmap.c 4801 > f 80 xfs_bmapi -> xfs_mod_incore_sb fs/xfs/xfs_bmap.c 4805 > f 81 xfs_bunmapi -> xfs_mod_incore_sb fs/xfs/xfs_bmap.c 5452 > f 82 xfs_bunmapi -> xfs_mod_incore_sb fs/xfs/xfs_bmap.c 5458 > f 83 xfs_trans_reserve -> xfs_mod_incore_sb fs/xfs/xfs_trans.c 305 > P 84 xfs_qm_quotacheck -> xfs_mount_reset_sbqflags fs/xfs/quota/xfs_qm.c 1962 > N 85 xfs_qm_dqpurge -> xfs_qm_dqflush fs/xfs/quota/xfs_dquot.c 1505 > NB 86 xfs_qm_dquot_logitem_push -> xfs_qm_dqflush fs/xfs/quota/xfs_dquot_item.c 168 > N 87 xfs_qm_shake_freelist -> xfs_qm_dqflush fs/xfs/quota/xfs_qm.c 2134 > N 88 xfs_qm_dqreclaim_one -> xfs_qm_dqflush fs/xfs/quota/xfs_qm.c 2306 > PM 89 xfs_qm_quotacheck -> xfs_qm_dqflush_all fs/xfs/quota/xfs_qm.c 1930 > P 90 xfs_qm_scall_quotaoff -> xfs_qm_log_quotaoff fs/xfs/quota/xfs_qm_syscalls.c 291 > P 91 xfs_qm_scall_quotaoff -> xfs_qm_log_quotaoff_end fs/xfs/quota/xfs_qm_syscalls.c 347 > F 92 xfs_qm_newmount -> xfs_qm_mount_quotas fs/xfs/quota/xfs_qm_bhv.c 273 > F 93 xfs_qm_endmount -> xfs_qm_mount_quotas fs/xfs/quota/xfs_qm_bhv.c 301 > PM 94 xfs_quiesce_fs -> xfs_syncsub fs/xfs/xfs_vfsops.c 632 > P 95 xlog_recover_process_efi -> xfs_trans_reserve fs/xfs/xfs_log_recover.c 3036 > P 96 xlog_recover_clear_agi_bucket -> xfs_trans_reserve fs/xfs/xfs_log_recover.c 3152 > P 97 xfs_qm_scall_trunc_qfiles -> xfs_truncate_file fs/xfs/quota/xfs_qm_syscalls.c 395 > P 98 xfs_qm_scall_trunc_qfiles -> xfs_truncate_file fs/xfs/quota/xfs_qm_syscalls.c 404 > P 99 xfs_log_unmount_write -> xlog_state_release_iclog fs/xfs/xfs_log.c 570 > P 100 xfs_log_unmount_write -> xlog_state_release_iclog fs/xfs/xfs_log.c 606 > f 101 xfs_log_force_umount -> xlog_state_sync_all fs/xfs/xfs_log.c 3586 > > f = false positive > F = false positive + patch to remove condition > G = patch in mainline git tree already > M = __must_check annotations found this as well > P = real, patch to fix > n = no error path to return error > N = no error path to return error, patch to warn about error added > d = does not exist anymore. > B = some other bug found and fixed at same time > C = error ignored, must continue anyway. If silent, made noisy > > Notes: > > - all the xfs_mod_incore_sb() are false positive because they are freeing > blocks or extents which means there can never be an error returned. The only > error that can be returned is ENOSPC when trying to allocate blocks.... > > - none of the callers of xfs_mount_log_sb() check the return value. > > - new function xfs_log_sbcount failed to check return of xfs_trans_commit. > Callers are failing to check return value. > > - most of the callers to xfs_log_force() are not interested in errors - they'll > get them through other means (i.e. log error implies filesystem shutdown). > Only a handful of callers really should return errors, such as fsync(), > sync writes or synchronous transaction commits. > -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Tue Apr 1 18:24:33 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 18:24:45 -0700 (PDT) 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.0 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 m321OUSP019932 for ; Tue, 1 Apr 2008 18:24:31 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA14823; Wed, 2 Apr 2008 11:24:58 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m321OvsT62904127; Wed, 2 Apr 2008 11:24:57 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m321Oqp6116799419; Wed, 2 Apr 2008 11:24:52 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 2 Apr 2008 11:24:52 +1000 From: David Chinner To: Michael Nishimoto Cc: David Chinner , XFS Mailing List Subject: Re: Definition of XFS_DQUOT_LOGRES() Message-ID: <20080402012452.GA103491721@sgi.com> References: <47F16988.2080406@agami.com> <20080401012856.GL103491721@sgi.com> <47F2A321.60907@agami.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <47F2A321.60907@agami.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15134 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Tue, Apr 01, 2008 at 02:03:29PM -0700, Michael Nishimoto wrote: > David Chinner wrote: > >On Mon, Mar 31, 2008 at 03:45:28PM -0700, Michael Nishimoto wrote: > >>The comment for XFS_DQUOT_LOGRES states that we need to reserve space > >>for 3 dquots. I can't figure out why we need to add this amount to *all* > >>operations and why this amount wasn't added after doing a runtime > >>quotaon check. > > > >It probably could be done that way. But given that: > > > >>/* > >> * In the worst case, when both user and group quotas are on, > >> * we can have a max of three dquots changing in a single transaction. > >> */ > >>#define XFS_DQUOT_LOGRES(mp) (sizeof(xfs_disk_dquot_t) * 3) > > > >sizeof(xfs_disk_dquot_t) = 104 bytes, > > > >the overall addition to the reservations is minor considering: > > > >[0]kdb> xtrres 0xe0000038055ac6c0 > >write: 109752 truncate: 223672 rename: 305976 > >link: 153144 remove: 153144 symlink: 158520 > >create: 158392 mkdir: 158392 ifree: 58936 > >ichange: 2104 growdata: 45696 swrite: 384 > >addafork: 70584 writeid: 384 attrinval: 179328 > >attrset: 22968 attrrm: 90552 clearagi: 1152 > >growrtalloc: 66048 growrtzero: 4224 growrtfree: 6272 > >[0]kdb> > > > >on a 14GB filesystem most of the transactions this is added to > >are on the far side of 150k and that means we're talking about less > >than 0.2% of the entire reservation comes from the dquot. With > >larger block sizes and/or larger filesystems, these get much > >larger. e.g. same 14GB device, 64k block size instead of 4k: > > > >[0]kdb> xtrres 0xe00000b8027d39f8 > >write: 987576 truncate: 1977272 rename: 2891064 > >link: 1445688 remove: 1445688 symlink: 1512504 > >create: 1511864 mkdir: 1511864 ifree: 470584 > >ichange: 1592 growdata: 395904 swrite: 384 > >addafork: 658616 writeid: 384 attrinval: 1581696 > >attrset: 329656 attrrm: 791480 clearagi: 640 > >growrtalloc: 592640 growrtzero: 65664 growrtfree: 67200 > > > >The rename reservation is *2.8MB* (up from 300k). IOWs, 300 bytes is > >really noise when it comes to reservation space. (OT: See why I want to > >increase the log size now? :) > > > >Is it worth the complexity of adding this dquot reservation at > >runtime for a best case reduction of 0.2% in log space reservation > >usage? Probably not, but patches can be convincing ;) > > > >Cheers, > > > >Dave. > > Here is a patch to fix a sign problem when growing the log to 2G. > Michael, can you repost this patch with a Signed-off-by tag and..... > --- xfs_log.2.c 2008-04-01 11:55:45.000000000 -0700 > +++ xfs_log.3.c 2008-04-01 11:56:53.000000000 -0700 > @@ -230,20 +230,24 @@ > static void > xlog_grant_add_space_write(struct log *log, int bytes) > { > - log->l_grant_write_bytes += bytes; > - if (log->l_grant_write_bytes > log->l_logsize) { > - log->l_grant_write_bytes -= log->l_logsize; > - log->l_grant_write_cycle++; > + int __tmp = (log)->l_logsize - (log)->l_grant_write_bytes; No need for "__" in the tmp var, nor the () around log... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Tue Apr 1 18:50:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 18:50:12 -0700 (PDT) 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.2 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 m321o0oJ026399 for ; Tue, 1 Apr 2008 18:50:02 -0700 X-ASG-Debug-ID: 1207101033-62f700850000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ext.agami.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D07B67268CC for ; Tue, 1 Apr 2008 18:50:33 -0700 (PDT) Received: from ext.agami.com (64.221.212.177.ptr.us.xo.net [64.221.212.177]) by cuda.sgi.com with ESMTP id oowllHUU0NRSfBDv for ; Tue, 01 Apr 2008 18:50:33 -0700 (PDT) Received: from agami.com (mail [192.168.168.5]) by ext.agami.com (8.12.5/8.12.5) with ESMTP id m31L37eL029945 for ; Tue, 1 Apr 2008 14:03:07 -0700 Received: from mx1.agami.com (mx1.agami.com [10.123.10.30]) by agami.com (8.12.11/8.12.11) with ESMTP id m31L37ec015683 for ; Tue, 1 Apr 2008 14:03:07 -0700 Received: from [10.123.4.142] ([10.123.4.142]) by mx1.agami.com with Microsoft SMTPSVC(6.0.3790.1830); Tue, 1 Apr 2008 14:03:30 -0700 Message-ID: <47F2A321.60907@agami.com> Date: Tue, 01 Apr 2008 14:03:29 -0700 From: Michael Nishimoto User-Agent: Mail/News 1.5.0.4 (X11/20060629) MIME-Version: 1.0 To: David Chinner CC: XFS Mailing List X-ASG-Orig-Subj: Re: Definition of XFS_DQUOT_LOGRES() Subject: Re: Definition of XFS_DQUOT_LOGRES() References: <47F16988.2080406@agami.com> <20080401012856.GL103491721@sgi.com> In-Reply-To: <20080401012856.GL103491721@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 01 Apr 2008 21:03:30.0160 (UTC) FILETIME=[D66E6700:01C8943B] X-Barracuda-Connect: 64.221.212.177.ptr.us.xo.net[64.221.212.177] X-Barracuda-Start-Time: 1207101036 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.1, rules version 3.1.46580 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15135 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: miken@agami.com Precedence: bulk X-list: xfs David Chinner wrote: > On Mon, Mar 31, 2008 at 03:45:28PM -0700, Michael Nishimoto wrote: >> The comment for XFS_DQUOT_LOGRES states that we need to reserve space >> for 3 dquots. I can't figure out why we need to add this amount to *all* >> operations and why this amount wasn't added after doing a runtime >> quotaon check. > > It probably could be done that way. But given that: > >> /* >> * In the worst case, when both user and group quotas are on, >> * we can have a max of three dquots changing in a single transaction. >> */ >> #define XFS_DQUOT_LOGRES(mp) (sizeof(xfs_disk_dquot_t) * 3) > > sizeof(xfs_disk_dquot_t) = 104 bytes, > > the overall addition to the reservations is minor considering: > > [0]kdb> xtrres 0xe0000038055ac6c0 > write: 109752 truncate: 223672 rename: 305976 > link: 153144 remove: 153144 symlink: 158520 > create: 158392 mkdir: 158392 ifree: 58936 > ichange: 2104 growdata: 45696 swrite: 384 > addafork: 70584 writeid: 384 attrinval: 179328 > attrset: 22968 attrrm: 90552 clearagi: 1152 > growrtalloc: 66048 growrtzero: 4224 growrtfree: 6272 > [0]kdb> > > on a 14GB filesystem most of the transactions this is added to > are on the far side of 150k and that means we're talking about less > than 0.2% of the entire reservation comes from the dquot. With > larger block sizes and/or larger filesystems, these get much > larger. e.g. same 14GB device, 64k block size instead of 4k: > > [0]kdb> xtrres 0xe00000b8027d39f8 > write: 987576 truncate: 1977272 rename: 2891064 > link: 1445688 remove: 1445688 symlink: 1512504 > create: 1511864 mkdir: 1511864 ifree: 470584 > ichange: 1592 growdata: 395904 swrite: 384 > addafork: 658616 writeid: 384 attrinval: 1581696 > attrset: 329656 attrrm: 791480 clearagi: 640 > growrtalloc: 592640 growrtzero: 65664 growrtfree: 67200 > > The rename reservation is *2.8MB* (up from 300k). IOWs, 300 bytes is > really noise when it comes to reservation space. (OT: See why I want to > increase the log size now? :) > > Is it worth the complexity of adding this dquot reservation at > runtime for a best case reduction of 0.2% in log space reservation > usage? Probably not, but patches can be convincing ;) > > Cheers, > > Dave. Here is a patch to fix a sign problem when growing the log to 2G. --- xfs_log.2.c 2008-04-01 11:55:45.000000000 -0700 +++ xfs_log.3.c 2008-04-01 11:56:53.000000000 -0700 @@ -230,20 +230,24 @@ static void xlog_grant_add_space_write(struct log *log, int bytes) { - log->l_grant_write_bytes += bytes; - if (log->l_grant_write_bytes > log->l_logsize) { - log->l_grant_write_bytes -= log->l_logsize; - log->l_grant_write_cycle++; + int __tmp = (log)->l_logsize - (log)->l_grant_write_bytes; + if (__tmp > bytes) + (log)->l_grant_write_bytes += bytes; + else { + (log)->l_grant_write_cycle++; + (log)->l_grant_write_bytes = bytes - __tmp; } } static void xlog_grant_add_space_reserve(struct log *log, int bytes) { - log->l_grant_reserve_bytes += bytes; - if (log->l_grant_reserve_bytes > log->l_logsize) { - log->l_grant_reserve_bytes -= log->l_logsize; - log->l_grant_reserve_cycle++; + int __tmp = (log)->l_logsize - (log)->l_grant_reserve_bytes; + if (__tmp > bytes) + (log)->l_grant_reserve_bytes += bytes; + else { + (log)->l_grant_reserve_cycle++; + (log)->l_grant_reserve_bytes = bytes - __tmp; } } From owner-xfs@oss.sgi.com Tue Apr 1 19:57:42 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 19:57:52 -0700 (PDT) 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=BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from relay.sgi.com (relay2.corp.sgi.com [192.26.58.22]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m322vfsn003159 for ; Tue, 1 Apr 2008 19:57:42 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7456B30409A; Tue, 1 Apr 2008 19:58:13 -0700 (PDT) Received: from itchy (xaiki@itchy.melbourne.sgi.com [134.14.55.96]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m322w9jm083470; Wed, 2 Apr 2008 13:58:11 +1100 (AEDT) From: Niv Sardi To: David Chinner Cc: xfs-dev , xfs@oss.sgi.com Subject: Re: [Review] Improve XFS error checking and propagation References: <20080311010420.GD155407@sgi.com> <20080401230044.GS103491721@sgi.com> Date: Wed, 02 Apr 2008 13:58:09 +1100 In-Reply-To: <20080401230044.GS103491721@sgi.com> (David Chinner's message of "Wed, 2 Apr 2008 09:00:44 +1000") Message-ID: User-Agent: Gnus/5.110007 (No Gnus v0.7) Emacs/23.0.60 (i486-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15136 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@cxhome.ath.cx Precedence: bulk X-list: xfs David Chinner writes: > On Tue, Mar 11, 2008 at 12:04:21PM +1100, David Chinner wrote: >> A recent paper at the FAST08 conference highlighted a large number >> of unchecked error paths in Linux filesystems and I/O layers. As a >> subsystem, XFS had the highest aggregate numbers of bad error >> propagation. A tarball which contains a quilt patch series of 32 >> patches aimed at improving this situation can be found here: >> >> http://oss.sgi.com/~dgc/xfs/error-check/xfs-error-checking.tar.gz All looks good except some minor typo-editing, and NOK xfs-mustcheck-quotamount.patch # need to check if can happen when forcing quotas I'm not sure what happens if we really DO want quotas (specified on mount line and such). OK xfs-mustcheck-reset-dqcounts.patch OK xfs-mustcheck-dqflushall.patch OK xfs-mustcheck-acl-setmode.patch OK xfs-mustcheck-search-busy.patch EDITED xfs-mustcheck-compute-diff.patch # xfs_fs_cmn_err alignment OK xfs-mustcheck-bmap-adjacent.patch OK xfs-mustcheck-iflush-fork.patch # less error handeling !! OK xfs-mustcheck-bulkstat-dinode.patch OK xfs-mustcheck-quiesce-fs.patch OK xfs-mustcheck-bdstrat.patch OK xfs-fix-error-prototypes.patch # not error handeling related OK xfs-mustcheck-acl-vremove.patch OK xfs-mustcheck-icsb-disable.patch OK xfs-mustcheck-ioend-unwritten.patch OK xfs-mustcheck-buf-associate.patch OK xfs-mustcheck-reserve-blocks.patch EDITED xfs-mustcheck-bawrite.patch # xfs_fs_cmn_err alignment OK xfs-mustcheck-bdwrite.patch OK xfs-mustcheck-truncate-page.patch # might be incomplete EDITED xfs-mustcheck-dqflush.patch # slight style change/typo OK xfs-mustcheck-reset-sbqflags.patch OK xfs-mustcheck-quotaoff.patch EDITED xfs-mustcheck-inactive.patch # slight style change/typo OK xfs-mustcheck-trans-reserve.patch OK xfs-mustcheck-quota-trunc.patch OK xfs-mustcheck-log-unmount.patch OK xfs-mustcheck-free-extent.patch OK xfs-mustcheck-xfs-imap.patch OK xfs-mustcheck-bmap-last-offset.patch OK xfs-mustcheck-trans-commit.patch OK xfs-mustcheck-log-force.patch Cheers, -- Niv Sardi From owner-xfs@oss.sgi.com Tue Apr 1 21:02:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 21:02:37 -0700 (PDT) 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=BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from relay.sgi.com (netops-testserver-3.corp.sgi.com [192.26.57.72]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m3242GBC017636 for ; Tue, 1 Apr 2008 21:02:17 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by netops-testserver-3.corp.sgi.com (Postfix) with ESMTP id 8D1DC9088D; Tue, 1 Apr 2008 21:02:46 -0700 (PDT) Received: from itchy (xaiki@itchy.melbourne.sgi.com [134.14.55.96]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3242fjm085594; Wed, 2 Apr 2008 15:02:44 +1100 (AEDT) From: Niv Sardi To: David Chinner Cc: xfs-dev , xfs-oss Subject: Re: [Patch] unique per-AG inode generation number initialisation References: <20080401231815.GW103491721@sgi.com> Date: Wed, 02 Apr 2008 15:02:42 +1100 In-Reply-To: <20080401231815.GW103491721@sgi.com> (David Chinner's message of "Wed, 2 Apr 2008 09:18:15 +1000") Message-ID: User-Agent: Gnus/5.110007 (No Gnus v0.7) Emacs/23.0.60 (i486-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15137 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@cxhome.ath.cx Precedence: bulk X-list: xfs David Chinner writes: > Don't initialise new inode generation numbers to zero > > When we allocation new inode chunks, we initialise the generation > numbers to zero. This works fine until we delete a chunk and then > reallocate it, resulting in the same inode numbers but with a > reset generation count. This can result in inode/generation > pairs of different inodes occurring relatively close together. > > Given that the inode/gen pair makes up the "unique" portion of > an NFS filehandle on XFS, this can result in file handles cached > on clients being seen on the wire from the server but refer to > a different file. This causes .... issues for NFS clients. > > Hence we need a unique generation number initialisation for > each inode to prevent reuse of a small portion of the generation > number space. Make this initialiser per-allocation group so > that it is not a single point of contention in the filesystem, > and increment it on every allocation within an AG to reduce the > chance that a generation number is reused for a given inode number > if the inode chunk is deleted and reallocated immediately > afterwards. > > It is safe to add the agi_newinogen field to the AGI without > using a feature bit. If an older kernel is used, it simply > will not update the field on allocation. If the kernel is > updated and the field has garbage in it, then it's like having a > random seed to the generation number.... > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_ag.h | 4 +++- > fs/xfs/xfs_ialloc.c | 30 ++++++++++++++++++++++-------- > 2 files changed, 25 insertions(+), 9 deletions(-) Appart from the bit of overhead all seems good. > Index: 2.6.x-xfs-new/fs/xfs/xfs_ag.h > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_ag.h 2008-01-18 18:30:06.000000000 +1100 > +++ 2.6.x-xfs-new/fs/xfs/xfs_ag.h 2008-03-26 13:03:41.122918236 +1100 > @@ -121,6 +121,7 @@ typedef struct xfs_agi { > * still being referenced. > */ > __be32 agi_unlinked[XFS_AGI_UNLINKED_BUCKETS]; > + __be32 agi_newinogen; /* inode cluster generation */ > } xfs_agi_t; > > #define XFS_AGI_MAGICNUM 0x00000001 > @@ -134,7 +135,8 @@ typedef struct xfs_agi { > #define XFS_AGI_NEWINO 0x00000100 > #define XFS_AGI_DIRINO 0x00000200 > #define XFS_AGI_UNLINKED 0x00000400 > -#define XFS_AGI_NUM_BITS 11 > +#define XFS_AGI_NEWINOGEN 0x00000800 > +#define XFS_AGI_NUM_BITS 12 > #define XFS_AGI_ALL_BITS ((1 << XFS_AGI_NUM_BITS) - 1) > > /* disk block (xfs_daddr_t) in the AG */ > Index: 2.6.x-xfs-new/fs/xfs/xfs_ialloc.c > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_ialloc.c 2008-03-25 15:41:27.000000000 +1100 > +++ 2.6.x-xfs-new/fs/xfs/xfs_ialloc.c 2008-03-26 14:29:47.998554368 +1100 > @@ -309,6 +309,8 @@ xfs_ialloc_ag_alloc( > free = XFS_MAKE_IPTR(args.mp, fbuf, i); > free->di_core.di_magic = cpu_to_be16(XFS_DINODE_MAGIC); > free->di_core.di_version = version; > + free->di_core.di_gen = agi->agi_newinogen; > + be32_add_cpu(&agi->agi_newinogen, 1); > free->di_next_unlinked = cpu_to_be32(NULLAGINO); > xfs_ialloc_log_di(tp, fbuf, i, > XFS_DI_CORE_BITS | XFS_DI_NEXT_UNLINKED); > @@ -347,7 +349,8 @@ xfs_ialloc_ag_alloc( > * Log allocation group header fields > */ > xfs_ialloc_log_agi(tp, agbp, > - XFS_AGI_COUNT | XFS_AGI_FREECOUNT | XFS_AGI_NEWINO); > + XFS_AGI_COUNT | XFS_AGI_FREECOUNT | > + XFS_AGI_NEWINO | XFS_AGI_NEWINOGEN); > /* > * Modify/log superblock values for inode count and inode free count. > */ > @@ -896,11 +899,12 @@ nextag: > ino = XFS_AGINO_TO_INO(mp, agno, rec.ir_startino + offset); > XFS_INOBT_CLR_FREE(&rec, offset); > rec.ir_freecount--; > + be32_add_cpu(&agi->agi_newinogen, 1); > if ((error = xfs_inobt_update(cur, rec.ir_startino, rec.ir_freecount, > rec.ir_free))) > goto error0; > be32_add(&agi->agi_freecount, -1); > - xfs_ialloc_log_agi(tp, agbp, XFS_AGI_FREECOUNT); > + xfs_ialloc_log_agi(tp, agbp, XFS_AGI_FREECOUNT | XFS_AGI_NEWINOGEN); > down_read(&mp->m_peraglock); > mp->m_perag[tagno].pagi_freecount--; > up_read(&mp->m_peraglock); > @@ -1320,6 +1324,11 @@ xfs_ialloc_compute_maxlevels( > > /* > * Log specified fields for the ag hdr (inode section) > + * > + * We don't log the unlinked inode fields through here; they > + * get logged directly to the buffer. Hence we have a discontinuity > + * in the fields we are logging and we need two calls to map all > + * the dirtied parts of the agi.... > */ > void > xfs_ialloc_log_agi( > @@ -1342,22 +1351,27 @@ xfs_ialloc_log_agi( > offsetof(xfs_agi_t, agi_newino), > offsetof(xfs_agi_t, agi_dirino), > offsetof(xfs_agi_t, agi_unlinked), > + offsetof(xfs_agi_t, agi_newinogen), > sizeof(xfs_agi_t) > }; > + int log_newino = fields & XFS_AGI_NEWINOGEN; > + > #ifdef DEBUG > xfs_agi_t *agi; /* allocation group header */ > > agi = XFS_BUF_TO_AGI(bp); > ASSERT(be32_to_cpu(agi->agi_magicnum) == XFS_AGI_MAGIC); > #endif > - /* > - * Compute byte offsets for the first and last fields. > - */ > + fields &= ~XFS_AGI_NEWINOGEN; > + > + /* Compute byte offsets for the first and last fields. */ > xfs_btree_offsets(fields, offsets, XFS_AGI_NUM_BITS, &first, &last); > - /* > - * Log the allocation group inode header buffer. > - */ > xfs_trans_log_buf(tp, bp, first, last); > + if (log_newino) { > + xfs_btree_offsets(XFS_AGI_NEWINOGEN, offsets, XFS_AGI_NUM_BITS, > + &first, &last); > + xfs_trans_log_buf(tp, bp, first, last); > + } > } > > /* -- Niv Sardi From owner-xfs@oss.sgi.com Tue Apr 1 21:25:53 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 21:26:10 -0700 (PDT) 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 m324PnuU021284 for ; Tue, 1 Apr 2008 21:25: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 OAA19804; Wed, 2 Apr 2008 14:11:43 +1000 Message-ID: <47F3150B.6000106@sgi.com> Date: Wed, 02 Apr 2008 15:09:31 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [Patch] Per iclog callback chain lock References: <20080401231348.GT103491721@sgi.com> In-Reply-To: <20080401231348.GT103491721@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15139 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Looks fine to me - just one small comment. David Chinner wrote: > Introduce an iclog callback chain lock. > > Rather than use the icloglock for protecting the iclog completion > callback chain, use a new per-iclog lock so that walking the > callback chain doesn't require holding a global lock. > > This reduces contention on the icloglock during log buffer I/O > completion as the callback chain lock is take for every callback > that is issued. On large log buffers, this can number in the > hundreds to thousands per iclog so isolating the lock to the > iclog makes a lot of sense. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_log.c | 35 +++++++++++++++++++---------------- > fs/xfs/xfs_log_priv.h | 33 ++++++++++++++++++++++++++------- > 2 files changed, 45 insertions(+), 23 deletions(-) > > Index: 2.6.x-xfs-new/fs/xfs/xfs_log.c > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_log.c 2008-03-13 13:10:23.000000000 +1100 > +++ 2.6.x-xfs-new/fs/xfs/xfs_log.c 2008-03-13 19:35:51.251913648 +1100 > @@ -397,12 +397,10 @@ xfs_log_notify(xfs_mount_t *mp, /* mo > void *iclog_hndl, /* iclog to hang callback off */ > xfs_log_callback_t *cb) > { > - xlog_t *log = mp->m_log; > xlog_in_core_t *iclog = (xlog_in_core_t *)iclog_hndl; > int abortflg; > > - cb->cb_next = NULL; > - spin_lock(&log->l_icloglock); > + spin_lock(&iclog->ic_callback_lock); > abortflg = (iclog->ic_state & XLOG_STATE_IOERROR); > if (!abortflg) { > ASSERT_ALWAYS((iclog->ic_state == XLOG_STATE_ACTIVE) || > @@ -411,7 +409,7 @@ xfs_log_notify(xfs_mount_t *mp, /* mo > *(iclog->ic_callback_tail) = cb; > iclog->ic_callback_tail = &(cb->cb_next); > } > - spin_unlock(&log->l_icloglock); > + spin_unlock(&iclog->ic_callback_lock); > return abortflg; > } /* xfs_log_notify */ > > @@ -1257,6 +1255,8 @@ xlog_alloc_log(xfs_mount_t *mp, > iclog->ic_size = XFS_BUF_SIZE(bp) - log->l_iclog_hsize; > iclog->ic_state = XLOG_STATE_ACTIVE; > iclog->ic_log = log; > + atomic_set(&iclog->ic_refcnt, 0); Not related to this change but looks like we need it anyway. Did you mean to include it in this change? > + spin_lock_init(&iclog->ic_callback_lock); > iclog->ic_callback_tail = &(iclog->ic_callback); > iclog->ic_datap = (char *)iclog->hic_data + log->l_iclog_hsize; > > @@ -1990,7 +1990,7 @@ xlog_state_clean_log(xlog_t *log) > if (iclog->ic_state == XLOG_STATE_DIRTY) { > iclog->ic_state = XLOG_STATE_ACTIVE; > iclog->ic_offset = 0; > - iclog->ic_callback = NULL; /* don't need to free */ > + ASSERT(iclog->ic_callback == NULL); > /* > * If the number of ops in this iclog indicate it just > * contains the dummy transaction, we can > @@ -2193,37 +2193,40 @@ xlog_state_do_callback( > be64_to_cpu(iclog->ic_header.h_lsn); > spin_unlock(&log->l_grant_lock); > > - /* > - * Keep processing entries in the callback list > - * until we come around and it is empty. We > - * need to atomically see that the list is > - * empty and change the state to DIRTY so that > - * we don't miss any more callbacks being added. > - */ > - spin_lock(&log->l_icloglock); > } else { > + spin_unlock(&log->l_icloglock); > ioerrors++; > } > - cb = iclog->ic_callback; > > + /* > + * Keep processing entries in the callback list until > + * we come around and it is empty. We need to > + * atomically see that the list is empty and change the > + * state to DIRTY so that we don't miss any more > + * callbacks being added. > + */ > + spin_lock(&iclog->ic_callback_lock); > + cb = iclog->ic_callback; > while (cb) { > iclog->ic_callback_tail = &(iclog->ic_callback); > iclog->ic_callback = NULL; > - spin_unlock(&log->l_icloglock); > + spin_unlock(&iclog->ic_callback_lock); > > /* perform callbacks in the order given */ > for (; cb; cb = cb_next) { > cb_next = cb->cb_next; > cb->cb_func(cb->cb_arg, aborted); > } > - spin_lock(&log->l_icloglock); > + spin_lock(&iclog->ic_callback_lock); > cb = iclog->ic_callback; > } > > loopdidcallbacks++; > funcdidcallbacks++; > > + spin_lock(&log->l_icloglock); > ASSERT(iclog->ic_callback == NULL); > + spin_unlock(&iclog->ic_callback_lock); Okay so we can acquire the l_icloglock while holding ic_callback_lock. > if (!(iclog->ic_state & XLOG_STATE_IOERROR)) > iclog->ic_state = XLOG_STATE_DIRTY; > > Index: 2.6.x-xfs-new/fs/xfs/xfs_log_priv.h > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_log_priv.h 2008-02-22 13:48:25.000000000 +1100 > +++ 2.6.x-xfs-new/fs/xfs/xfs_log_priv.h 2008-03-13 19:34:57.430809151 +1100 > @@ -324,6 +324,19 @@ typedef struct xlog_rec_ext_header { > * - ic_offset is the current number of bytes written to in this iclog. > * - ic_refcnt is bumped when someone is writing to the log. > * - ic_state is the state of the iclog. > + * > + * Because of cacheline contention on large machines, we need to separate > + * various resources onto different cachelines. To start with, make the > + * structure cacheline aligned. The following fields can be contended on > + * by independent processes: > + * > + * - ic_callback_* > + * - ic_refcnt > + * - fields protected by the global l_icloglock > + * > + * so we need to ensure that these fields are located in separate cachelines. > + * We'll put all the read-only and l_icloglock fields in the first cacheline, > + * and move everything else out to subsequent cachelines. > */ > typedef struct xlog_iclog_fields { > sv_t ic_forcesema; > @@ -332,18 +345,23 @@ typedef struct xlog_iclog_fields { > struct xlog_in_core *ic_prev; > struct xfs_buf *ic_bp; > struct log *ic_log; > - xfs_log_callback_t *ic_callback; > - xfs_log_callback_t **ic_callback_tail; > -#ifdef XFS_LOG_TRACE > - struct ktrace *ic_trace; > -#endif > int ic_size; > int ic_offset; > - atomic_t ic_refcnt; > int ic_bwritecnt; > ushort_t ic_state; > char *ic_datap; /* pointer to iclog data */ > -} xlog_iclog_fields_t; > +#ifdef XFS_LOG_TRACE > + struct ktrace *ic_trace; > +#endif > + > + /* Callback structures need their own cacheline */ > + spinlock_t ic_callback_lock ____cacheline_aligned_in_smp; > + xfs_log_callback_t *ic_callback; > + xfs_log_callback_t **ic_callback_tail; > + > + /* reference counts need their own cacheline */ > + atomic_t ic_refcnt ____cacheline_aligned_in_smp; > +} xlog_iclog_fields_t ____cacheline_aligned_in_smp; > > typedef union xlog_in_core2 { > xlog_rec_header_t hic_header; > @@ -366,6 +384,7 @@ typedef struct xlog_in_core { > #define ic_bp hic_fields.ic_bp > #define ic_log hic_fields.ic_log > #define ic_callback hic_fields.ic_callback > +#define ic_callback_lock hic_fields.ic_callback_lock > #define ic_callback_tail hic_fields.ic_callback_tail > #define ic_trace hic_fields.ic_trace > #define ic_size hic_fields.ic_size > From owner-xfs@oss.sgi.com Tue Apr 1 21:31:10 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 21:31:18 -0700 (PDT) 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=BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from relay.sgi.com (relay1.corp.sgi.com [192.26.58.214]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m324VA63022405 for ; Tue, 1 Apr 2008 21:31:10 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by relay1.corp.sgi.com (Postfix) with ESMTP id DD9548F8092; Tue, 1 Apr 2008 21:31:42 -0700 (PDT) Received: from itchy (xaiki@itchy.melbourne.sgi.com [134.14.55.96]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m324Vajm084801; Wed, 2 Apr 2008 15:31:38 +1100 (AEDT) From: Niv Sardi To: David Chinner Cc: xfs-dev , xfs@oss.sgi.com Subject: Re: [Review] Improve XFS error checking and propagation References: <20080311010420.GD155407@sgi.com> <20080401230044.GS103491721@sgi.com> <20080402040708.GB103491721@sgi.com> Date: Wed, 02 Apr 2008 15:31:37 +1100 In-Reply-To: <20080402040708.GB103491721@sgi.com> (David Chinner's message of "Wed, 2 Apr 2008 14:07:08 +1000") Message-ID: User-Agent: Gnus/5.110007 (No Gnus v0.7) Emacs/23.0.60 (i486-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15140 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@cxhome.ath.cx Precedence: bulk X-list: xfs David Chinner writes: > On Wed, Apr 02, 2008 at 01:58:09PM +1100, Niv Sardi wrote: >> David Chinner writes: >> > On Tue, Mar 11, 2008 at 12:04:21PM +1100, David Chinner wrote: >> >> A recent paper at the FAST08 conference highlighted a large number >> >> of unchecked error paths in Linux filesystems and I/O layers. As a >> >> subsystem, XFS had the highest aggregate numbers of bad error >> >> propagation. A tarball which contains a quilt patch series of 32 >> >> patches aimed at improving this situation can be found here: >> >> >> >> http://oss.sgi.com/~dgc/xfs/error-check/xfs-error-checking.tar.gz >> >> All looks good except some minor typo-editing, >> >> and >> >> NOK xfs-mustcheck-quotamount.patch # need to check if can happen when forcing quotas >> >> I'm not sure what happens if we really DO want quotas (specified on >> mount line and such). > > The behaviour will be exactly the same as previously, because the > error returned by xfs_qm_mount_quotas() is ignored. i.e. if we try > to mount with quotas and the quota mount fails, we continue (after > issuing a warning to syslog) that quotas were not turned on. > > This is especially important for root filesystems with quota > enabled.... OK, I wasn't sure. All the rest are minor aesthetics/typos my messed up notes, and can be ignored… >> OK xfs-mustcheck-reset-dqcounts.patch >> OK xfs-mustcheck-dqflushall.patch >> OK xfs-mustcheck-acl-setmode.patch >> OK xfs-mustcheck-search-busy.patch >> EDITED xfs-mustcheck-compute-diff.patch # xfs_fs_cmn_err alignment > > That patch doesn't have any calls to xfs_fs_cmn_err() in it. Can you > clarify, please? Oops, the edit was for: -+STATIC void /* success (>= minlen) */ ++STATIC void as it didn't really make sense anymore. >> OK xfs-mustcheck-bmap-adjacent.patch >> OK xfs-mustcheck-iflush-fork.patch # less error handeling !! > > You can't have less error handling than intentionally ignoring > the return from a function that can't return an error. You can > have simpler code, though, by declaring the function void.... hum, I can't remember why I wrote that anymore, oh well… looks good now. >> OK xfs-mustcheck-bulkstat-dinode.patch >> OK xfs-mustcheck-quiesce-fs.patch >> OK xfs-mustcheck-bdstrat.patch >> OK xfs-fix-error-prototypes.patch # not error handeling related >> OK xfs-mustcheck-acl-vremove.patch >> OK xfs-mustcheck-icsb-disable.patch >> OK xfs-mustcheck-ioend-unwritten.patch >> OK xfs-mustcheck-buf-associate.patch >> OK xfs-mustcheck-reserve-blocks.patch >> EDITED xfs-mustcheck-bawrite.patch # xfs_fs_cmn_err alignment > > Which means? That's purely aesthetic, sometimes we split the string and keep it aligned, and sometimes we pad it left so that it fits, I prefer splitting. >> OK xfs-mustcheck-bdwrite.patch >> OK xfs-mustcheck-truncate-page.patch # might be incomplete Note to self: re-read one's notes before sending them out, I wanted to look at why we couldn't propagate error better, but now it's all understood =) >> EDITED xfs-mustcheck-dqflush.patch # slight style change/typo > Details? -hence we nevre know if we've failed to flush a dquot to disk. +hence we never know if we've failed to flush a dquot to disk. and xfs_fs_cmn_err stuff. >> OK xfs-mustcheck-reset-sbqflags.patch >> OK xfs-mustcheck-quotaoff.patch >> EDITED xfs-mustcheck-inactive.patch # slight style change/typo > > Details? -correctly. if we fail to write the final quota off trnasaction, +correctly. if we fail to write the final quota off transaction, and xfs_fs_cmn_err stuff. Cheers, -- Niv Sardi From owner-xfs@oss.sgi.com Tue Apr 1 21:39:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 21:39:20 -0700 (PDT) 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.0 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 m324d70W023550 for ; Tue, 1 Apr 2008 21:39:11 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA20458; Wed, 2 Apr 2008 14:39:43 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m324dgsT118759982; Wed, 2 Apr 2008 14:39:42 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m324df1O118778255; Wed, 2 Apr 2008 14:39:41 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 2 Apr 2008 14:39:41 +1000 From: David Chinner To: Lachlan McIlroy Cc: David Chinner , xfs-dev , xfs-oss Subject: Re: [Patch] Per iclog callback chain lock Message-ID: <20080402043941.GC103491721@sgi.com> References: <20080401231348.GT103491721@sgi.com> <47F3150B.6000106@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <47F3150B.6000106@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15141 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 03:09:31PM +1000, Lachlan McIlroy wrote: > Looks fine to me - just one small comment. ..... > >@@ -1257,6 +1255,8 @@ xlog_alloc_log(xfs_mount_t *mp, > > iclog->ic_size = XFS_BUF_SIZE(bp) - log->l_iclog_hsize; > > iclog->ic_state = XLOG_STATE_ACTIVE; > > iclog->ic_log = log; > >+ atomic_set(&iclog->ic_refcnt, 0); > Not related to this change but looks like we need it anyway. > Did you mean to include it in this change? I added it just to be explicit. It's not actually needed as we kmem_zalloc() the log structure.... > >+ spin_lock(&iclog->ic_callback_lock); > >+ cb = iclog->ic_callback; .... > >+ spin_lock(&log->l_icloglock); > > ASSERT(iclog->ic_callback == NULL); > >+ spin_unlock(&iclog->ic_callback_lock); > Okay so we can acquire the l_icloglock while holding ic_callback_lock. Yup - it's a new lock, so we can make whatever rules we like ;) Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Tue Apr 1 22:11:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 22:12:06 -0700 (PDT) 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.0 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 m325BtWl027241 for ; Tue, 1 Apr 2008 22:11:57 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA21138; Wed, 2 Apr 2008 15:12:29 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m325CSsT118809405; Wed, 2 Apr 2008 15:12:29 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m325CNf0118789674; Wed, 2 Apr 2008 15:12:23 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 2 Apr 2008 15:12:23 +1000 From: David Chinner To: Niv Sardi Cc: David Chinner , xfs-dev , xfs@oss.sgi.com Subject: Re: [Review] Improve XFS error checking and propagation Message-ID: <20080402051223.GD103491721@sgi.com> References: <20080311010420.GD155407@sgi.com> <20080401230044.GS103491721@sgi.com> <20080402040708.GB103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15142 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 03:31:37PM +1100, Niv Sardi wrote: > David Chinner writes: > > > On Wed, Apr 02, 2008 at 01:58:09PM +1100, Niv Sardi wrote: > >> OK xfs-mustcheck-reset-dqcounts.patch > >> OK xfs-mustcheck-dqflushall.patch > >> OK xfs-mustcheck-acl-setmode.patch > >> OK xfs-mustcheck-search-busy.patch > >> EDITED xfs-mustcheck-compute-diff.patch # xfs_fs_cmn_err alignment > > > > That patch doesn't have any calls to xfs_fs_cmn_err() in it. Can you > > clarify, please? > > Oops, the edit was for: > -+STATIC void /* success (>= minlen) */ > ++STATIC void > > as it didn't really make sense anymore. Ok, Fixed. > >> OK xfs-mustcheck-bulkstat-dinode.patch > >> OK xfs-mustcheck-quiesce-fs.patch > >> OK xfs-mustcheck-bdstrat.patch > >> OK xfs-fix-error-prototypes.patch # not error handeling related > >> OK xfs-mustcheck-acl-vremove.patch > >> OK xfs-mustcheck-icsb-disable.patch > >> OK xfs-mustcheck-ioend-unwritten.patch > >> OK xfs-mustcheck-buf-associate.patch > >> OK xfs-mustcheck-reserve-blocks.patch > >> EDITED xfs-mustcheck-bawrite.patch # xfs_fs_cmn_err alignment > > > > Which means? > > That's purely aesthetic, sometimes we split the string and keep it > aligned, and sometimes we pad it left so that it fits, I prefer > splitting. Ok. If it involves splitting a string into 3 lines because of indentation, then I tend to do one long line. i.e. this: if (error) xfs_fs_cmn_err(CE_WARN, mp, "xfs_qm_dquot_logitem_pushbuf: pushbuf error %d on qip %p, bp %p", error, qip, bp); Instead of: if (error) xfs_fs_cmn_err(CE_WARN, mp, "xfs_qm_dquot_logitem_pushbuf:" " pushbuf error %d on qip %p, " " bp %p", error, qip, bp); The first is much easier to read and grep for.... > >> EDITED xfs-mustcheck-dqflush.patch # slight style change/typo > > Details? > > -hence we nevre know if we've failed to flush a dquot to disk. > +hence we never know if we've failed to flush a dquot to disk. Oh, in the patch description.... > and xfs_fs_cmn_err stuff. Same as above... > >> OK xfs-mustcheck-reset-sbqflags.patch > >> OK xfs-mustcheck-quotaoff.patch > >> EDITED xfs-mustcheck-inactive.patch # slight style change/typo > > > > Details? > > -correctly. if we fail to write the final quota off trnasaction, > +correctly. if we fail to write the final quota off transaction, Ah, that's from the quotaoff patch. No wonder I couldn't find the typo ;) But I also split the xfs_fs_cmn_err() in xfs-mustcheck-inactive (much nicer). All fixed up. Thanks Niv. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Tue Apr 1 22:20:47 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 22:20:54 -0700 (PDT) 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 m325KgLQ028745 for ; Tue, 1 Apr 2008 22:20:45 -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 PAA21438; Wed, 2 Apr 2008 15:21:15 +1000 Message-ID: <47F32557.2030300@sgi.com> Date: Wed, 02 Apr 2008 16:19:03 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [Patch] Per iclog callback chain lock References: <20080401231348.GT103491721@sgi.com> <47F3150B.6000106@sgi.com> <20080402043941.GC103491721@sgi.com> In-Reply-To: <20080402043941.GC103491721@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15143 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs David Chinner wrote: > On Wed, Apr 02, 2008 at 03:09:31PM +1000, Lachlan McIlroy wrote: >> Looks fine to me - just one small comment. > ..... >>> @@ -1257,6 +1255,8 @@ xlog_alloc_log(xfs_mount_t *mp, >>> iclog->ic_size = XFS_BUF_SIZE(bp) - log->l_iclog_hsize; >>> iclog->ic_state = XLOG_STATE_ACTIVE; >>> iclog->ic_log = log; >>> + atomic_set(&iclog->ic_refcnt, 0); >> Not related to this change but looks like we need it anyway. >> Did you mean to include it in this change? > > I added it just to be explicit. It's not actually needed as we > kmem_zalloc() the log structure.... Ahh, it is zeroed. I was wondering why it hadn't caused any problems. > >>> + spin_lock(&iclog->ic_callback_lock); >>> + cb = iclog->ic_callback; > .... >>> + spin_lock(&log->l_icloglock); >>> ASSERT(iclog->ic_callback == NULL); >>> + spin_unlock(&iclog->ic_callback_lock); >> Okay so we can acquire the l_icloglock while holding ic_callback_lock. > > Yup - it's a new lock, so we can make whatever rules we like ;) > > Cheers, > > Dave. From owner-xfs@oss.sgi.com Tue Apr 1 22:24:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 22:24:45 -0700 (PDT) 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.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_52, SUBJ_TICKET 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 m325OU0J029569 for ; Tue, 1 Apr 2008 22:24:34 -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 PAA21517; Wed, 2 Apr 2008 15:25:02 +1000 Message-ID: <47F3263A.7030401@sgi.com> Date: Wed, 02 Apr 2008 16:22:50 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [Patch] Remove xlog_ticket allocator References: <20080401231439.GU103491721@sgi.com> In-Reply-To: <20080401231439.GU103491721@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15144 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Nice one - cleans up a lot of code. Looks good to me. David Chinner wrote: > Remove the xlog_ticket allocator > > The ticket allocator is just a simple slab implementation > internal to the log. It requires the icloglock to be held > when manipulating it and this contributes to contention > on that lock. > > Just kill the entire allocator and use a memory zone instead. > While there, allow us to gracefully fail allocation with ENOMEM. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_log.c | 137 ++++---------------------------------------------- > fs/xfs/xfs_log_priv.h | 9 +-- > fs/xfs/xfs_vfsops.c | 12 ++-- > fs/xfs/xfsidbg.c | 11 +--- > 4 files changed, 25 insertions(+), 144 deletions(-) > > Index: 2.6.x-xfs-new/fs/xfs/xfs_log.c > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_log.c 2008-03-13 13:58:08.866070224 +1100 > +++ 2.6.x-xfs-new/fs/xfs/xfs_log.c 2008-03-13 14:03:38.448138656 +1100 > @@ -41,6 +41,7 @@ > #include "xfs_inode.h" > #include "xfs_rw.h" > > +kmem_zone_t *xfs_log_ticket_zone; > > #define xlog_write_adv_cnt(ptr, len, off, bytes) \ > { (ptr) += (bytes); \ > @@ -73,8 +74,6 @@ STATIC int xlog_state_get_iclog_space(x > xlog_ticket_t *ticket, > int *continued_write, > int *logoffsetp); > -STATIC void xlog_state_put_ticket(xlog_t *log, > - xlog_ticket_t *tic); > STATIC int xlog_state_release_iclog(xlog_t *log, > xlog_in_core_t *iclog); > STATIC void xlog_state_switch_iclogs(xlog_t *log, > @@ -101,7 +100,6 @@ STATIC void xlog_ungrant_log_space(xlog_ > > > /* local ticket functions */ > -STATIC void xlog_state_ticket_alloc(xlog_t *log); > STATIC xlog_ticket_t *xlog_ticket_get(xlog_t *log, > int unit_bytes, > int count, > @@ -330,7 +328,7 @@ xfs_log_done(xfs_mount_t *mp, > */ > xlog_trace_loggrant(log, ticket, "xfs_log_done: (non-permanent)"); > xlog_ungrant_log_space(log, ticket); > - xlog_state_put_ticket(log, ticket); > + xlog_ticket_put(log, ticket); > } else { > xlog_trace_loggrant(log, ticket, "xfs_log_done: (permanent)"); > xlog_regrant_reserve_log_space(log, ticket); > @@ -469,6 +467,8 @@ xfs_log_reserve(xfs_mount_t *mp, > /* may sleep if need to allocate more tickets */ > internal_ticket = xlog_ticket_get(log, unit_bytes, cnt, > client, flags); > + if (!internal_ticket) > + return XFS_ERROR(ENOMEM); > internal_ticket->t_trans_type = t_type; > *ticket = internal_ticket; > xlog_trace_loggrant(log, internal_ticket, > @@ -693,7 +693,7 @@ xfs_log_unmount_write(xfs_mount_t *mp) > if (tic) { > xlog_trace_loggrant(log, tic, "unmount rec"); > xlog_ungrant_log_space(log, tic); > - xlog_state_put_ticket(log, tic); > + xlog_ticket_put(log, tic); > } > } else { > /* > @@ -1208,7 +1208,6 @@ xlog_alloc_log(xfs_mount_t *mp, > spin_lock_init(&log->l_icloglock); > spin_lock_init(&log->l_grant_lock); > initnsema(&log->l_flushsema, 0, "ic-flush"); > - xlog_state_ticket_alloc(log); /* wait until after icloglock inited */ > > /* log record size must be multiple of BBSIZE; see xlog_rec_header_t */ > ASSERT((XFS_BUF_SIZE(bp) & BBMASK) == 0); > @@ -1541,7 +1540,6 @@ STATIC void > xlog_dealloc_log(xlog_t *log) > { > xlog_in_core_t *iclog, *next_iclog; > - xlog_ticket_t *tic, *next_tic; > int i; > > iclog = log->l_iclog; > @@ -1562,22 +1560,6 @@ xlog_dealloc_log(xlog_t *log) > spinlock_destroy(&log->l_icloglock); > spinlock_destroy(&log->l_grant_lock); > > - /* XXXsup take a look at this again. */ > - if ((log->l_ticket_cnt != log->l_ticket_tcnt) && > - !XLOG_FORCED_SHUTDOWN(log)) { > - xfs_fs_cmn_err(CE_WARN, log->l_mp, > - "xlog_dealloc_log: (cnt: %d, total: %d)", > - log->l_ticket_cnt, log->l_ticket_tcnt); > - /* ASSERT(log->l_ticket_cnt == log->l_ticket_tcnt); */ > - > - } else { > - tic = log->l_unmount_free; > - while (tic) { > - next_tic = tic->t_next; > - kmem_free(tic, PAGE_SIZE); > - tic = next_tic; > - } > - } > xfs_buf_free(log->l_xbuf); > #ifdef XFS_LOG_TRACE > if (log->l_trace != NULL) { > @@ -2798,18 +2780,6 @@ xlog_ungrant_log_space(xlog_t *log, > > > /* > - * Atomically put back used ticket. > - */ > -STATIC void > -xlog_state_put_ticket(xlog_t *log, > - xlog_ticket_t *tic) > -{ > - spin_lock(&log->l_icloglock); > - xlog_ticket_put(log, tic); > - spin_unlock(&log->l_icloglock); > -} /* xlog_state_put_ticket */ > - > -/* > * Flush iclog to disk if this is the last reference to the given iclog and > * the WANT_SYNC bit is set. > * > @@ -3179,92 +3149,19 @@ xlog_state_want_sync(xlog_t *log, xlog_i > */ > > /* > - * Algorithm doesn't take into account page size. ;-( > - */ > -STATIC void > -xlog_state_ticket_alloc(xlog_t *log) > -{ > - xlog_ticket_t *t_list; > - xlog_ticket_t *next; > - xfs_caddr_t buf; > - uint i = (PAGE_SIZE / sizeof(xlog_ticket_t)) - 2; > - > - /* > - * The kmem_zalloc may sleep, so we shouldn't be holding the > - * global lock. XXXmiken: may want to use zone allocator. > - */ > - buf = (xfs_caddr_t) kmem_zalloc(PAGE_SIZE, KM_SLEEP); > - > - spin_lock(&log->l_icloglock); > - > - /* Attach 1st ticket to Q, so we can keep track of allocated memory */ > - t_list = (xlog_ticket_t *)buf; > - t_list->t_next = log->l_unmount_free; > - log->l_unmount_free = t_list++; > - log->l_ticket_cnt++; > - log->l_ticket_tcnt++; > - > - /* Next ticket becomes first ticket attached to ticket free list */ > - if (log->l_freelist != NULL) { > - ASSERT(log->l_tail != NULL); > - log->l_tail->t_next = t_list; > - } else { > - log->l_freelist = t_list; > - } > - log->l_ticket_cnt++; > - log->l_ticket_tcnt++; > - > - /* Cycle through rest of alloc'ed memory, building up free Q */ > - for ( ; i > 0; i--) { > - next = t_list + 1; > - t_list->t_next = next; > - t_list = next; > - log->l_ticket_cnt++; > - log->l_ticket_tcnt++; > - } > - t_list->t_next = NULL; > - log->l_tail = t_list; > - spin_unlock(&log->l_icloglock); > -} /* xlog_state_ticket_alloc */ > - > - > -/* > - * Put ticket into free list > - * > - * Assumption: log lock is held around this call. > + * Free a used ticket. > */ > STATIC void > xlog_ticket_put(xlog_t *log, > xlog_ticket_t *ticket) > { > sv_destroy(&ticket->t_sema); > - > - /* > - * Don't think caching will make that much difference. It's > - * more important to make debug easier. > - */ > -#if 0 > - /* real code will want to use LIFO for caching */ > - ticket->t_next = log->l_freelist; > - log->l_freelist = ticket; > - /* no need to clear fields */ > -#else > - /* When we debug, it is easier if tickets are cycled */ > - ticket->t_next = NULL; > - if (log->l_tail) { > - log->l_tail->t_next = ticket; > - } else { > - ASSERT(log->l_freelist == NULL); > - log->l_freelist = ticket; > - } > - log->l_tail = ticket; > -#endif /* DEBUG */ > - log->l_ticket_cnt++; > + kmem_zone_free(xfs_log_ticket_zone, ticket); > } /* xlog_ticket_put */ > > > /* > - * Grab ticket off freelist or allocation some more > + * Allocate and initialise a new log ticket. > */ > STATIC xlog_ticket_t * > xlog_ticket_get(xlog_t *log, > @@ -3276,21 +3173,9 @@ xlog_ticket_get(xlog_t *log, > xlog_ticket_t *tic; > uint num_headers; > > - alloc: > - if (log->l_freelist == NULL) > - xlog_state_ticket_alloc(log); /* potentially sleep */ > - > - spin_lock(&log->l_icloglock); > - if (log->l_freelist == NULL) { > - spin_unlock(&log->l_icloglock); > - goto alloc; > - } > - tic = log->l_freelist; > - log->l_freelist = tic->t_next; > - if (log->l_freelist == NULL) > - log->l_tail = NULL; > - log->l_ticket_cnt--; > - spin_unlock(&log->l_icloglock); > + tic = kmem_zone_zalloc(xfs_log_ticket_zone, KM_SLEEP|KM_MAYFAIL); > + if (!tic) > + return NULL; > > /* > * Permanent reservations have up to 'cnt'-1 active log operations > Index: 2.6.x-xfs-new/fs/xfs/xfs_log_priv.h > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_log_priv.h 2008-03-13 13:59:10.806160556 +1100 > +++ 2.6.x-xfs-new/fs/xfs/xfs_log_priv.h 2008-03-13 14:06:58.110733971 +1100 > @@ -242,7 +242,7 @@ typedef struct xlog_res { > > typedef struct xlog_ticket { > sv_t t_sema; /* sleep on this semaphore : 20 */ > - struct xlog_ticket *t_next; /* :4|8 */ > + struct xlog_ticket *t_next; /* :4|8 */ > struct xlog_ticket *t_prev; /* :4|8 */ > xlog_tid_t t_tid; /* transaction identifier : 4 */ > int t_curr_res; /* current reservation in bytes : 4 */ > @@ -406,13 +406,8 @@ typedef struct log { > sema_t l_flushsema; /* iclog flushing semaphore */ > int l_flushcnt; /* # of procs waiting on this > * sema */ > - int l_ticket_cnt; /* free ticket count */ > - int l_ticket_tcnt; /* total ticket count */ > int l_covered_state;/* state of "covering disk > * log entries" */ > - xlog_ticket_t *l_freelist; /* free list of tickets */ > - xlog_ticket_t *l_unmount_free;/* kmem_free these addresses */ > - xlog_ticket_t *l_tail; /* free list of tickets */ > xlog_in_core_t *l_iclog; /* head log queue */ > spinlock_t l_icloglock; /* grab to change iclog state */ > xfs_lsn_t l_tail_lsn; /* lsn of 1st LR with unflushed > @@ -478,6 +473,8 @@ extern struct xfs_buf *xlog_get_bp(xlog_ > extern void xlog_put_bp(struct xfs_buf *); > extern int xlog_bread(xlog_t *, xfs_daddr_t, int, struct xfs_buf *); > > +extern kmem_zone_t *xfs_log_ticket_zone; > + > /* iclog tracing */ > #define XLOG_TRACE_GRAB_FLUSH 1 > #define XLOG_TRACE_REL_FLUSH 2 > Index: 2.6.x-xfs-new/fs/xfs/xfs_vfsops.c > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_vfsops.c 2008-03-13 13:58:08.866070224 +1100 > +++ 2.6.x-xfs-new/fs/xfs/xfs_vfsops.c 2008-03-13 13:59:59.208010688 +1100 > @@ -68,15 +68,17 @@ xfs_init(void) > /* > * Initialize all of the zone allocators we use. > */ > + xfs_log_ticket_zone = kmem_zone_init(sizeof(xlog_ticket_t), > + "xfs_log_ticket"); > xfs_bmap_free_item_zone = kmem_zone_init(sizeof(xfs_bmap_free_item_t), > - "xfs_bmap_free_item"); > + "xfs_bmap_free_item"); > xfs_btree_cur_zone = kmem_zone_init(sizeof(xfs_btree_cur_t), > - "xfs_btree_cur"); > - xfs_trans_zone = kmem_zone_init(sizeof(xfs_trans_t), "xfs_trans"); > - xfs_da_state_zone = > - kmem_zone_init(sizeof(xfs_da_state_t), "xfs_da_state"); > + "xfs_btree_cur"); > + xfs_da_state_zone = kmem_zone_init(sizeof(xfs_da_state_t), > + "xfs_da_state"); > xfs_dabuf_zone = kmem_zone_init(sizeof(xfs_dabuf_t), "xfs_dabuf"); > xfs_ifork_zone = kmem_zone_init(sizeof(xfs_ifork_t), "xfs_ifork"); > + xfs_trans_zone = kmem_zone_init(sizeof(xfs_trans_t), "xfs_trans"); > xfs_acl_zone_init(xfs_acl_zone, "xfs_acl"); > xfs_mru_cache_init(); > xfs_filestream_init(); > Index: 2.6.x-xfs-new/fs/xfs/xfsidbg.c > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfsidbg.c 2008-03-13 13:07:25.000000000 +1100 > +++ 2.6.x-xfs-new/fs/xfs/xfsidbg.c 2008-03-13 14:10:13.489855395 +1100 > @@ -5607,9 +5607,9 @@ xfsidbg_xiclog(xlog_in_core_t *iclog) > be32_to_cpu(iclog->ic_header.h_magicno), > be32_to_cpu(iclog->ic_header.h_cycle), > be32_to_cpu(iclog->ic_header.h_version), > - be64_to_cpu(iclog->ic_header.h_lsn)); > + (unsigned long long)be64_to_cpu(iclog->ic_header.h_lsn)); > kdb_printf("tail_lsn: 0x%Lx len: %d prev_block: %d num_ops: %d\n", > - be64_to_cpu(iclog->ic_header.h_tail_lsn), > + (unsigned long long)be64_to_cpu(iclog->ic_header.h_tail_lsn), > be32_to_cpu(iclog->ic_header.h_len), > be32_to_cpu(iclog->ic_header.h_prev_block), > be32_to_cpu(iclog->ic_header.h_num_logops)); > @@ -5829,11 +5829,8 @@ xfsidbg_xlog(xlog_t *log) > }; > > kdb_printf("xlog at 0x%p\n", log); > - kdb_printf("&flushsm: 0x%p flushcnt: %d tic_cnt: %d tic_tcnt: %d \n", > - &log->l_flushsema, log->l_flushcnt, > - log->l_ticket_cnt, log->l_ticket_tcnt); > - kdb_printf("freelist: 0x%p tail: 0x%p ICLOG: 0x%p \n", > - log->l_freelist, log->l_tail, log->l_iclog); > + kdb_printf("&flushsm: 0x%p flushcnt: %d ICLOG: 0x%p \n", > + &log->l_flushsema, log->l_flushcnt, log->l_iclog); > kdb_printf("&icloglock: 0x%p tail_lsn: %s last_sync_lsn: %s \n", > &log->l_icloglock, xfs_fmtlsn(&log->l_tail_lsn), > xfs_fmtlsn(&log->l_last_sync_lsn)); > From owner-xfs@oss.sgi.com Tue Apr 1 22:34:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 22:34:35 -0700 (PDT) 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.0 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 m325YMgp030991 for ; Tue, 1 Apr 2008 22:34:26 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA21758; Wed, 2 Apr 2008 15:34:54 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m325YrsT118437010; Wed, 2 Apr 2008 15:34:54 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m325Ypgk118820456; Wed, 2 Apr 2008 15:34:51 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 2 Apr 2008 15:34:51 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [Patch] xfsqa: 091 needs to support sector size != 512 bytes Message-ID: <20080402053451.GE103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15145 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Test 091 assumes a direct I/O alignment of 512 bytes, a hold over from 2.4 kernels. On 2.6. kernels, direct I/O needs to be aligned to the sector size the filesystem was mkfs'd with. Teach 091 about 2.6 kernels and grab the sector size from the xfs_info output. Signed-off-by: Dave Chinner --- xfstests/091 | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) Index: xfs-cmds/xfstests/091 =================================================================== --- xfs-cmds.orig/xfstests/091 2007-03-19 08:49:37.000000000 +1100 +++ xfs-cmds/xfstests/091 2008-04-02 15:27:39.266824430 +1000 @@ -43,10 +43,20 @@ run_fsx() psize=`$here/src/feature -s` bsize=512 -# 2.4 Linux kernels support bsize aligned direct I/O only kernel=`uname -r | sed -e 's/\(2\..\).*/\1/'` + +# 2.4 Linux kernels support bsize aligned direct I/O only [ "$HOSTOS" = "Linux" -a "$kernel" = "2.4" ] && bsize=$psize +# 2.6 Linux kernels support sector aligned direct I/O only +if [ "$HOSTOS" = "Linux" -a "$kernel" = "2.6" ]; then + xfs_info $TEST_DIR | _filter_mkfs 2> $tmp.info + if [ $? -eq 0 ]; then + source $tmp.info + bsize=$sectsz + fi +fi + # fsx usage: # # -N numops: total # operations to do From owner-xfs@oss.sgi.com Tue Apr 1 22:37:28 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 22:37:35 -0700 (PDT) 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.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_64 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 m325bNsj031692 for ; Tue, 1 Apr 2008 22:37:26 -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 PAA21840; Wed, 2 Apr 2008 15:37:52 +1000 Message-ID: <47F3293C.6090708@sgi.com> Date: Wed, 02 Apr 2008 16:35:40 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [Patch] Cacheline align xlog_t References: <20080401231552.GV103491721@sgi.com> In-Reply-To: <20080401231552.GV103491721@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15146 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Looks good - just one comment. David Chinner wrote: > Reorganise xlog_t for better cacheline isolation of contention > > To reduce contention on the log in large CPU count, separate > out different parts of the xlog_t structure onto different cachelines. > Move each lock onto a different cacheline along with all the members > that are accessed/modified while that lock is held. > > Also, move the debugging code into debug code. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_log.c | 5 +--- > fs/xfs/xfs_log_priv.h | 55 +++++++++++++++++++++++++++----------------------- > 2 files changed, 32 insertions(+), 28 deletions(-) > > Index: 2.6.x-xfs-new/fs/xfs/xfs_log.c > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_log.c 2008-03-13 14:03:38.000000000 +1100 > +++ 2.6.x-xfs-new/fs/xfs/xfs_log.c 2008-03-13 14:20:21.803846380 +1100 > @@ -1237,9 +1237,9 @@ xlog_alloc_log(xfs_mount_t *mp, > XFS_BUF_SET_FSPRIVATE2(bp, (unsigned long)1); > iclog->ic_bp = bp; > iclog->hic_data = bp->b_addr; > - > +#ifdef DEBUG > log->l_iclog_bak[i] = (xfs_caddr_t)&(iclog->ic_header); > - > +#endif > head = &iclog->ic_header; > memset(head, 0, sizeof(xlog_rec_header_t)); > head->h_magicno = cpu_to_be32(XLOG_HEADER_MAGIC_NUM); > @@ -1250,7 +1250,6 @@ xlog_alloc_log(xfs_mount_t *mp, > head->h_fmt = cpu_to_be32(XLOG_FMT); > memcpy(&head->h_fs_uuid, &mp->m_sb.sb_uuid, sizeof(uuid_t)); > > - > iclog->ic_size = XFS_BUF_SIZE(bp) - log->l_iclog_hsize; > iclog->ic_state = XLOG_STATE_ACTIVE; > iclog->ic_log = log; > Index: 2.6.x-xfs-new/fs/xfs/xfs_log_priv.h > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_log_priv.h 2008-03-13 14:06:58.000000000 +1100 > +++ 2.6.x-xfs-new/fs/xfs/xfs_log_priv.h 2008-03-13 14:20:31.478596832 +1100 > @@ -402,8 +402,29 @@ typedef struct xlog_in_core { > * that round off problems won't occur when releasing partial reservations. > */ > typedef struct log { > + /* The following fields don't need locking */ > + struct xfs_mount *l_mp; /* mount point */ > + struct xfs_buf *l_xbuf; /* extra buffer for log > + * wrapping */ > + struct xfs_buftarg *l_targ; /* buftarg of log */ > + uint l_flags; > + uint l_quotaoffs_flag; /* XFS_DQ_*, for QUOTAOFFs */ > + struct xfs_buf_cancel **l_buf_cancel_table; > + int l_iclog_hsize; /* size of iclog header */ > + int l_iclog_heads; /* # of iclog header sectors */ > + uint l_sectbb_log; /* log2 of sector size in BBs */ > + uint l_sectbb_mask; /* sector size (in BBs) > + * alignment mask */ > + int l_iclog_size; /* size of log in bytes */ > + int l_iclog_size_log; /* log power size of log */ > + int l_iclog_bufs; /* number of iclog buffers */ > + xfs_daddr_t l_logBBstart; /* start block of log */ > + int l_logsize; /* size of log in bytes */ > + int l_logBBsize; /* size of log in BB chunks */ > + > /* The following block of fields are changed while holding icloglock */ > - sema_t l_flushsema; /* iclog flushing semaphore */ > + sema_t l_flushsema ____cacheline_aligned_in_smp; > + /* iclog flushing semaphore */ > int l_flushcnt; /* # of procs waiting on this > * sema */ > int l_covered_state;/* state of "covering disk > @@ -413,27 +434,14 @@ typedef struct log { > xfs_lsn_t l_tail_lsn; /* lsn of 1st LR with unflushed > * buffers */ > xfs_lsn_t l_last_sync_lsn;/* lsn of last LR on disk */ > - struct xfs_mount *l_mp; /* mount point */ > - struct xfs_buf *l_xbuf; /* extra buffer for log > - * wrapping */ > - struct xfs_buftarg *l_targ; /* buftarg of log */ > - xfs_daddr_t l_logBBstart; /* start block of log */ > - int l_logsize; /* size of log in bytes */ > - int l_logBBsize; /* size of log in BB chunks */ > int l_curr_cycle; /* Cycle number of log writes */ > int l_prev_cycle; /* Cycle number before last > * block increment */ > int l_curr_block; /* current logical log block */ > int l_prev_block; /* previous logical log block */ > - int l_iclog_size; /* size of log in bytes */ > - int l_iclog_size_log; /* log power size of log */ > - int l_iclog_bufs; /* number of iclog buffers */ > - > - /* The following field are used for debugging; need to hold icloglock */ > - char *l_iclog_bak[XLOG_MAX_ICLOGS]; > > /* The following block of fields are changed while holding grant_lock */ > - spinlock_t l_grant_lock; > + spinlock_t l_grant_lock ____cacheline_aligned_in_smp; > xlog_ticket_t *l_reserve_headq; > xlog_ticket_t *l_write_headq; > int l_grant_reserve_cycle; > @@ -441,20 +449,17 @@ typedef struct log { > int l_grant_write_cycle; > int l_grant_write_bytes; > > - /* The following fields don't need locking */ > #ifdef XFS_LOG_TRACE > struct ktrace *l_trace; > struct ktrace *l_grant_trace; > #endif > - uint l_flags; > - uint l_quotaoffs_flag; /* XFS_DQ_*, for QUOTAOFFs */ > - struct xfs_buf_cancel **l_buf_cancel_table; > - int l_iclog_hsize; /* size of iclog header */ > - int l_iclog_heads; /* # of iclog header sectors */ > - uint l_sectbb_log; /* log2 of sector size in BBs */ > - uint l_sectbb_mask; /* sector size (in BBs) > - * alignment mask */ > -} xlog_t; > + > + /* The following field are used for debugging; need to hold icloglock */ > +#ifdef DEBUG > + char *l_iclog_bak[XLOG_MAX_ICLOGS]; > +#endif > + > +} xlog_t ____cacheline_aligned_in_smp; Is it necessary to add a ____cacheline_aligned_in_smp tag here? The important sections of the xlog_t structure are already tagged. > > #define XLOG_FORCED_SHUTDOWN(log) ((log)->l_flags & XLOG_IO_ERROR) > > From owner-xfs@oss.sgi.com Tue Apr 1 22:43:33 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 22:43:40 -0700 (PDT) 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.0 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 m325hToY032646 for ; Tue, 1 Apr 2008 22:43:32 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA21975; Wed, 2 Apr 2008 15:44:05 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m325i4sT118800444; Wed, 2 Apr 2008 15:44:04 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m325i3vU118576416; Wed, 2 Apr 2008 15:44:03 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 2 Apr 2008 15:44:03 +1000 From: David Chinner To: Lachlan McIlroy Cc: David Chinner , xfs-dev , xfs-oss Subject: Re: [Patch] Cacheline align xlog_t Message-ID: <20080402054403.GF103491721@sgi.com> References: <20080401231552.GV103491721@sgi.com> <47F3293C.6090708@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <47F3293C.6090708@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15147 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 04:35:40PM +1000, Lachlan McIlroy wrote: > >*/ > >- uint l_sectbb_log; /* log2 of sector size in > >BBs */ > >- uint l_sectbb_mask; /* sector size (in BBs) > >- * alignment mask */ > >-} xlog_t; > >+ > >+ /* The following field are used for debugging; need to hold > >icloglock */ > >+#ifdef DEBUG > >+ char *l_iclog_bak[XLOG_MAX_ICLOGS]; > >+#endif > >+ > >+} xlog_t ____cacheline_aligned_in_smp; > Is it necessary to add a ____cacheline_aligned_in_smp tag here? The > important sections of the xlog_t structure are already tagged. This just means that the start of the structure is cacheline aligned. I don't think the internal alignment commands force the entire structure to be cacheline aligned, merely pad the struture internally. In that case, even though the specific internal parts of the structure are on separate cache lines, there's no guarantee that all the related members are on the same cacheline. Hence I'm explicitly stating the exact alignment I want for the structure.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Tue Apr 1 22:58:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 22:58:17 -0700 (PDT) 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.0 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 m325w6RR002075 for ; Tue, 1 Apr 2008 22:58:08 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA22376; Wed, 2 Apr 2008 15:58:35 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m325wXsT118666214; Wed, 2 Apr 2008 15:58:34 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m325wVpS118673323; Wed, 2 Apr 2008 15:58:31 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 2 Apr 2008 15:58:31 +1000 From: David Chinner To: Emmanuel Florac Cc: David Chinner , xfs@oss.sgi.com Subject: Re: Serious XFS crash Message-ID: <20080402055831.GG103491721@sgi.com> References: <20080325185453.3a1957dd@galadriel.home> <20080325233611.GW103491721@sgi.com> <20080401140035.46470306@galadriel.home> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20080401140035.46470306@galadriel.home> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15148 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Tue, Apr 01, 2008 at 02:00:35PM +0200, Emmanuel Florac wrote: > Le Wed, 26 Mar 2008 10:36:11 +1100 vous écriviez: > > > What sector size is being used for the XFS filesystem? If it's > > not the same as teh filesystem block size, then XFS can't have done > > this itself because the offset that this garbage starts at would > > not be block aligned..... > > I've gone thru the logs. This machine had a serious XFS crash on march > 6 due to bad blocks (failed drive in the RAID-5). Is it possible that > the March 19 XFS crash is related to this, i. e. after running > xfs_repair on march 6 it remained some on-disk garbage that provoked a > new crash a couple of weeks later? > > Here is the march 6 crash : > > Mar 6 10:42:46 system3 kernel: [xfs_alloc_read_agf+244/432] > xfs_alloc_read_agf+0xf4/0x1b0 Mar 6 10:42:46 system3 kernel: > [xfs_alloc_fix_freelist+1000/1120] xfs_alloc_fix_freelist+0x3e8/0x460 > Mar 6 10:42:46 system3 last message repeated 2 times Mar 6 10:42:46 > system3 kernel: [_xfs_trans_commit+489/928] .... The log is rather garbled - can you repost? Also, XFS usually outputs an error message before the stack trace; can you make sure you paste that as well (if it exists)? Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Tue Apr 1 23:21:34 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 23:21:42 -0700 (PDT) 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.0 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 m326LUIS005231 for ; Tue, 1 Apr 2008 23:21:32 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA22959; Wed, 2 Apr 2008 16:21:55 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m326LqsT118778853; Wed, 2 Apr 2008 16:21:54 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m326LlJD118466688; Wed, 2 Apr 2008 16:21:47 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 2 Apr 2008 16:21:47 +1000 From: David Chinner To: Takashi Sato Cc: David Chinner , linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com, dm-devel@redhat.com, linux-kernel@vger.kernel.org Subject: Re: [RFC PATCH 2/2] Add timeout feature Message-ID: <20080402062147.GH103491721@sgi.com> References: <20080328180736t-sato@mail.jp.nec.com> <20080331000057.GI108924158@sgi.com> <2530BB4B166747659C8F65C9C3DE7CFB@nsl.ad.nec.co.jp> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <2530BB4B166747659C8F65C9C3DE7CFB@nsl.ad.nec.co.jp> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15149 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Tue, Apr 01, 2008 at 07:54:42PM +0900, Takashi Sato wrote: > Hi, > > David Chinner wrote: > >The timeout is not for the freeze operation - the timeout is > >only set up once the freeze is complete. i.e: > > > >$ time sudo ~/test_src/xfs_io -f -x -c 'gfreeze 10' /mnt/scratch/test > >freezing with level = 10 > > > >real 0m23.204s > >user 0m0.008s > >sys 0m0.012s > > > >The freeze takes 23s, and then the 10s timeout is started. So > >this timeout does not protect against freeze_bdev() hangs at all. > >All it does is introduce silent unfreezing of the block device that > >can not be synchronised with the application that is operating > >on the frozen device. > > Exactly my timeout feature is only for an application, not for > freeze_bdev(). > I think it is needed for the situation we can't unfreeze from userspace. > (e.g. Freezing the root filesystem) Ummm - why can't you unfreeze the root fs from userspace? freezing only prevents modification to the filesystem. A frozen filesystem is effectively a read-only filesystem... On XFS: # xfs_freeze -f / # echo $? 0 # xfs_freeze -u / # echo $? 0 The underlying filesystem is broken w.r.t. freezing if you can't read from it successfully once it's been frozen.... > >FWIW, resetting this timeout from userspace is unreliable - there's > >no guarantee that under load your userspace process will get to run > >again inside the timeout to reset it, hence leaving you with a > >unfrozen filesystem when you really want it frozen... > > The timeout period specified to the reset ioctl should be much larger than > the interval for calling the reset ioctl repeatedly. > (e.g timeout period = 2 minutes, calling interval = 5 seconds) What application developer will ever use this? > The reset ioctl will work under such setting. > If a timeout still occurs before a reset, it would imply that an unexpected > problem (e.g. deadlock) occur in an application. Right - the application is broken and needs fixing. We don't need to supply a crutch in a "new" API to support hypothetically broken applications that don't actually exist yet. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Tue Apr 1 23:26:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 23:26:51 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_65 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 m326QXgu006083 for ; Tue, 1 Apr 2008 23:26:36 -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 QAA23147; Wed, 2 Apr 2008 16:27:08 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 9B57A58C4C16; Wed, 2 Apr 2008 16:27:08 +1000 (EST) Message-Id: <20080402062708.380299192@chook.melbourne.sgi.com> References: <20080402062508.017738664@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Wed, 02 Apr 2008 16:25:11 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 3/7] XFS: Refactor node format directory lookup/addname Content-Disposition: inline; filename=refactor_leafn_lookup.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15150 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs The next step for case-insensitive support is to avoid polution of the dentry cache with entries pointing to the same inode, but with names that only differ in case. To perform this, we will need to pass the actual filename that matched backup to the XFS/VFS interface and make sure the dentry cache only contains entries with the actual case-sensitive name. But, before we can do this, it was found that the directory lookup code with multiple leaves was shared with code adding a name to that directory. Most of xfs_dir2_leafn_lookup_int() could be broken into two functions determined by if (args->addname) { } else { }. For the following patch, only the lookup case needs to handle the various xfs_nameops, with case-insensitive match handling in addition to returning the actual name. So, this patch separates xfs_dir2_leafn_lookup_int() into xfs_dir2_leafn_lookup_for_addname() and xfs_dir2_leafn_lookup_for_entry(). xfs_dir2_leafn_lookup_for_addname() iterates through the data blocks looking for a suitable empty space to insert the name while xfs_dir2_leafn_lookup_for_entry() uses the xfs_nameops to find the entry. xfs_dir2_leafn_lookup_for_entry() path also retains the data block where the first case-insensitive match occured as in the next patch which will return the name, the name is obtained from that block. Signed-off-by: Barry Naujok --- fs/xfs/xfs_dir2_node.c | 373 +++++++++++++++++++++++++++++-------------------- 1 file changed, 225 insertions(+), 148 deletions(-) Index: kern_ci/fs/xfs/xfs_dir2_node.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_node.c +++ kern_ci/fs/xfs/xfs_dir2_node.c @@ -387,12 +387,11 @@ xfs_dir2_leafn_lasthash( } /* - * Look up a leaf entry in a node-format leaf block. - * If this is an addname then the extrablk in state is a freespace block, - * otherwise it's a data block. + * Look up a leaf entry for space to add a name in a node-format leaf block. + * The extrablk in state is a freespace block. */ -int -xfs_dir2_leafn_lookup_int( +static int +xfs_dir2_leafn_lookup_for_addname( xfs_dabuf_t *bp, /* leaf buffer */ xfs_da_args_t *args, /* operation arguments */ int *indexp, /* out: leaf entry index */ @@ -401,7 +400,6 @@ xfs_dir2_leafn_lookup_int( xfs_dabuf_t *curbp; /* current data/free buffer */ xfs_dir2_db_t curdb; /* current data block number */ xfs_dir2_db_t curfdb; /* current free block number */ - xfs_dir2_data_entry_t *dep; /* data block entry */ xfs_inode_t *dp; /* incore directory inode */ int error; /* error return value */ int fi; /* free entry index */ @@ -414,7 +412,6 @@ xfs_dir2_leafn_lookup_int( xfs_dir2_db_t newdb; /* new data block number */ xfs_dir2_db_t newfdb; /* new free block number */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dacmp_t cmp; /* comparison result */ dp = args->dp; tp = args->trans; @@ -432,27 +429,15 @@ xfs_dir2_leafn_lookup_int( /* * Do we have a buffer coming in? */ - if (state->extravalid) - curbp = state->extrablk.bp; - else - curbp = NULL; + curbp = state->extravalid ? state->extrablk.bp : NULL; /* * For addname, it's a free block buffer, get the block number. */ - if (args->addname) { - curfdb = curbp ? state->extrablk.blkno : -1; - curdb = -1; - length = xfs_dir2_data_entsize(args->namelen); - if ((free = (curbp ? curbp->data : NULL))) - ASSERT(be32_to_cpu(free->hdr.magic) == XFS_DIR2_FREE_MAGIC); - } - /* - * For others, it's a data block buffer, get the block number. - */ - else { - curfdb = -1; - curdb = curbp ? state->extrablk.blkno : -1; - } + curfdb = curbp ? state->extrablk.blkno : -1; + free = curbp ? curbp->data : NULL; + curdb = -1; + length = xfs_dir2_data_entsize(args->namelen); + ASSERT(!free || be32_to_cpu(free->hdr.magic) == XFS_DIR2_FREE_MAGIC); /* * Loop over leaf entries with the right hash value. */ @@ -472,134 +457,69 @@ xfs_dir2_leafn_lookup_int( * For addname, we're looking for a place to put the new entry. * We want to use a data block with an entry of equal * hash value to ours if there is one with room. + * + * If this block isn't the data block we already have + * in hand, take a look at it. */ - if (args->addname) { + if (newdb != curdb) { + curdb = newdb; /* - * If this block isn't the data block we already have - * in hand, take a look at it. + * Convert the data block to the free block + * holding its freespace information. */ - if (newdb != curdb) { - curdb = newdb; - /* - * Convert the data block to the free block - * holding its freespace information. - */ - newfdb = xfs_dir2_db_to_fdb(mp, newdb); - /* - * If it's not the one we have in hand, - * read it in. - */ - if (newfdb != curfdb) { - /* - * If we had one before, drop it. - */ - if (curbp) - xfs_da_brelse(tp, curbp); - /* - * Read the free block. - */ - if ((error = xfs_da_read_buf(tp, dp, - xfs_dir2_db_to_da(mp, - newfdb), - -1, &curbp, - XFS_DATA_FORK))) { - return error; - } - free = curbp->data; - ASSERT(be32_to_cpu(free->hdr.magic) == - XFS_DIR2_FREE_MAGIC); - ASSERT((be32_to_cpu(free->hdr.firstdb) % - XFS_DIR2_MAX_FREE_BESTS(mp)) == - 0); - ASSERT(be32_to_cpu(free->hdr.firstdb) <= curdb); - ASSERT(curdb < - be32_to_cpu(free->hdr.firstdb) + - be32_to_cpu(free->hdr.nvalid)); - } - /* - * Get the index for our entry. - */ - fi = xfs_dir2_db_to_fdindex(mp, curdb); - /* - * If it has room, return it. - */ - if (unlikely(be16_to_cpu(free->bests[fi]) == NULLDATAOFF)) { - XFS_ERROR_REPORT("xfs_dir2_leafn_lookup_int", - XFS_ERRLEVEL_LOW, mp); - if (curfdb != newfdb) - xfs_da_brelse(tp, curbp); - return XFS_ERROR(EFSCORRUPTED); - } - curfdb = newfdb; - if (be16_to_cpu(free->bests[fi]) >= length) { - *indexp = index; - state->extravalid = 1; - state->extrablk.bp = curbp; - state->extrablk.blkno = curfdb; - state->extrablk.index = fi; - state->extrablk.magic = - XFS_DIR2_FREE_MAGIC; - ASSERT(args->oknoent); - return XFS_ERROR(ENOENT); - } - } - } - /* - * Not adding a new entry, so we really want to find - * the name given to us. - */ - else { + newfdb = xfs_dir2_db_to_fdb(mp, newdb); /* - * If it's a different data block, go get it. + * If it's not the one we have in hand, + * read it in. */ - if (newdb != curdb) { + if (newfdb != curfdb) { /* - * If we had a block before, drop it. + * If we had one before, drop it. */ if (curbp) xfs_da_brelse(tp, curbp); /* - * Read the data block. + * Read the free block. */ - if ((error = - xfs_da_read_buf(tp, dp, - xfs_dir2_db_to_da(mp, newdb), -1, - &curbp, XFS_DATA_FORK))) { + error = xfs_da_read_buf(tp, dp, + xfs_dir2_db_to_da(mp, newfdb), + -1, &curbp, XFS_DATA_FORK); + if (error) return error; - } - xfs_dir2_data_check(dp, curbp); - curdb = newdb; + + free = curbp->data; + ASSERT(be32_to_cpu(free->hdr.magic) == + XFS_DIR2_FREE_MAGIC); + ASSERT((be32_to_cpu(free->hdr.firstdb) % + XFS_DIR2_MAX_FREE_BESTS(mp)) == 0); + ASSERT(be32_to_cpu(free->hdr.firstdb) <= curdb); + ASSERT(curdb < be32_to_cpu(free->hdr.firstdb) + + be32_to_cpu(free->hdr.nvalid)); } /* - * Point to the data entry. + * Get the index for our entry. + */ + fi = xfs_dir2_db_to_fdindex(mp, curdb); + /* + * If it has room, return it. */ - dep = (xfs_dir2_data_entry_t *) - ((char *)curbp->data + - xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); - /* - * Compare the entry, return it if it matches. - */ - cmp = args->oknoent ? - xfs_dir_compname(dp, dep->name, dep->namelen, - args->name, args->namelen): - xfs_da_compname(dep->name, dep->namelen, - args->name, args->namelen); - if (cmp != XFS_CMP_DIFFERENT && - cmp != args->cmpresult) { - args->cmpresult = cmp; - args->inumber = be64_to_cpu(dep->inumber); + if (unlikely(be16_to_cpu(free->bests[fi]) == NULLDATAOFF)) { + XFS_ERROR_REPORT("xfs_dir2_leafn_lookup_int", + XFS_ERRLEVEL_LOW, mp); + if (curfdb != newfdb) + xfs_da_brelse(tp, curbp); + return XFS_ERROR(EFSCORRUPTED); + } + curfdb = newfdb; + if (be16_to_cpu(free->bests[fi]) >= length) { *indexp = index; - if (cmp == XFS_CMP_EXACT) { - state->extravalid = 1; - state->extrablk.blkno = curdb; - state->extrablk.index = - (int)((char *)dep - - (char *)curbp->data); - state->extrablk.magic = - XFS_DIR2_DATA_MAGIC; - state->extrablk.bp = curbp; - return XFS_ERROR(EEXIST); - } + state->extravalid = 1; + state->extrablk.bp = curbp; + state->extrablk.blkno = curfdb; + state->extrablk.index = fi; + state->extrablk.magic = XFS_DIR2_FREE_MAGIC; + ASSERT(args->oknoent); + return XFS_ERROR(ENOENT); } } } @@ -608,31 +528,166 @@ xfs_dir2_leafn_lookup_int( * If we are holding a buffer, give it back in case our caller * finds it useful. */ - if ((state->extravalid = (curbp != NULL))) { + if (curbp != NULL) { + state->extravalid = 1; state->extrablk.bp = curbp; state->extrablk.index = -1; /* * For addname, giving back a free block. */ - if (args->addname) { - state->extrablk.blkno = curfdb; - state->extrablk.magic = XFS_DIR2_FREE_MAGIC; + state->extrablk.blkno = curfdb; + state->extrablk.magic = XFS_DIR2_FREE_MAGIC; + } + /* + * Return the final index, that will be the insertion point. + */ + *indexp = index; + ASSERT(index == be16_to_cpu(leaf->hdr.count) || args->oknoent); + return XFS_ERROR(ENOENT); +} + +/* + * Look up a leaf entry in a node-format leaf block. + * The extrablk in state a data block. + */ +static int +xfs_dir2_leafn_lookup_for_entry( + xfs_dabuf_t *bp, /* leaf buffer */ + xfs_da_args_t *args, /* operation arguments */ + int *indexp, /* out: leaf entry index */ + xfs_da_state_t *state) /* state to fill in */ +{ + xfs_dabuf_t *curbp; /* current data/free buffer */ + xfs_dir2_db_t curdb; /* current data block number */ + xfs_dir2_data_entry_t *dep; /* data block entry */ + xfs_inode_t *dp; /* incore directory inode */ + int error; /* error return value */ + int index; /* leaf entry index */ + xfs_dir2_leaf_t *leaf; /* leaf structure */ + xfs_dir2_leaf_entry_t *lep; /* leaf entry */ + xfs_mount_t *mp; /* filesystem mount point */ + xfs_dir2_db_t newdb; /* new data block number */ + xfs_trans_t *tp; /* transaction pointer */ + xfs_dacmp_t cmp; /* comparison result */ + xfs_dabuf_t *ci_bp = NULL; /* buffer with CI match */ + + dp = args->dp; + tp = args->trans; + mp = dp->i_mount; + leaf = bp->data; + ASSERT(be16_to_cpu(leaf->hdr.info.magic) == XFS_DIR2_LEAFN_MAGIC); +#ifdef __KERNEL__ + ASSERT(be16_to_cpu(leaf->hdr.count) > 0); +#endif + xfs_dir2_leafn_check(dp, bp); + /* + * Look up the hash value in the leaf entries. + */ + index = xfs_dir2_leaf_search_hash(args, bp); + /* + * Do we have a buffer coming in? + */ + if (state->extravalid) { + curbp = state->extrablk.bp; + curdb = state->extrablk.blkno; + if (args->cmpresult == XFS_CMP_CASE) + ci_bp = curbp; + } else { + curbp = NULL; + curdb = -1; + } + /* + * Loop over leaf entries with the right hash value. + */ + for (lep = &leaf->ents[index]; + index < be16_to_cpu(leaf->hdr.count) && + be32_to_cpu(lep->hashval) == args->hashval; + lep++, index++) { + /* + * Skip stale leaf entries. + */ + if (be32_to_cpu(lep->address) == XFS_DIR2_NULL_DATAPTR) + continue; + /* + * Pull the data block number from the entry. + */ + newdb = xfs_dir2_dataptr_to_db(mp, be32_to_cpu(lep->address)); + /* + * Not adding a new entry, so we really want to find + * the name given to us. + * + * If it's a different data block, go get it. + */ + if (newdb != curdb) { + /* + * If we had a block before, drop it (unless it + * contains a case-insensitive match). + */ + if (curbp && curbp != ci_bp) + xfs_da_brelse(tp, curbp); + /* + * Read the data block. + */ + error = xfs_da_read_buf(tp, dp, + xfs_dir2_db_to_da(mp, newdb), -1, + &curbp, XFS_DATA_FORK); + if (error) + return error; + xfs_dir2_data_check(dp, curbp); + curdb = newdb; } /* - * For other callers, giving back a data block. + * Point to the data entry. */ - else { + dep = (xfs_dir2_data_entry_t *)((char *)curbp->data + + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); + /* + * Compare the entry, return it if it matches. + */ + cmp = args->oknoent ? + xfs_dir_compname(dp, dep->name, dep->namelen, + args->name, args->namelen): + xfs_da_compname(dep->name, dep->namelen, + args->name, args->namelen); + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { + args->cmpresult = cmp; + args->inumber = be64_to_cpu(dep->inumber); + *indexp = index; + if (ci_bp && ci_bp != curbp) + xfs_da_brelse(tp, ci_bp); + state->extravalid = 1; state->extrablk.blkno = curdb; + state->extrablk.index = (int)((char *)dep - + (char *)curbp->data); state->extrablk.magic = XFS_DIR2_DATA_MAGIC; + state->extrablk.bp = curbp; + if (cmp == XFS_CMP_EXACT) + return XFS_ERROR(EEXIST); } } /* - * For lookup (where args->oknoent is set, and args->addname is not - * set, the state->extrablk info is not used, just freed. + * if we have a case-insensitive match, we have to return ENOENT + * so xfs_da_node_lookup_int() can try the next leaf if one exists + * for the hash that may have an exact match. + * xfs_dir2_node_lookup() below handles the ENOENT and args->cmpresult + * to find the case-insensitive match and returns EEXIST. */ - if (args->cmpresult == XFS_CMP_CASE) { - ASSERT(!args->addname); - return XFS_ERROR(EEXIST); + if (args->cmpresult == XFS_CMP_CASE) + return XFS_ERROR(ENOENT); + /* + * Didn't find a match. + * If we are holding a buffer, give it back in case our caller + * finds it useful. + */ + if (curbp != NULL) { + state->extravalid = 1; + state->extrablk.bp = curbp; + state->extrablk.index = -1; + /* + * Giving back a data block. + */ + state->extrablk.blkno = curdb; + state->extrablk.magic = XFS_DIR2_DATA_MAGIC; } /* * Return the final index, that will be the insertion point. @@ -643,6 +698,23 @@ xfs_dir2_leafn_lookup_int( } /* + * Look up a leaf entry in a node-format leaf block. + * If this is an addname then the extrablk in state is a freespace block, + * otherwise it's a data block. + */ +int +xfs_dir2_leafn_lookup_int( + xfs_dabuf_t *bp, /* leaf buffer */ + xfs_da_args_t *args, /* operation arguments */ + int *indexp, /* out: leaf entry index */ + xfs_da_state_t *state) /* state to fill in */ +{ + return args->addname ? + xfs_dir2_leafn_lookup_for_addname(bp, args, indexp, state) : + xfs_dir2_leafn_lookup_for_entry(bp, args, indexp, state); +} + +/* * Move count leaf entries from source to destination leaf. * Log entries and headers. Stale entries are preserved. */ @@ -1785,6 +1857,11 @@ xfs_dir2_node_lookup( if (error) rval = error; /* + * If case-insensitive match was found in a leaf, return EEXIST. + */ + else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) + rval = EEXIST; + /* * Release the btree blocks and leaf block. */ for (i = 0; i < state->path.active; i++) { -- From owner-xfs@oss.sgi.com Tue Apr 1 23:26:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 23:26:55 -0700 (PDT) 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.9 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 m326QWtO006081 for ; Tue, 1 Apr 2008 23:26:36 -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 QAA23141; Wed, 2 Apr 2008 16:27:07 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id BFC4758C4C0F; Wed, 2 Apr 2008 16:27:07 +1000 (EST) Message-Id: <20080402062508.017738664@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Wed, 02 Apr 2008 16:25:08 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 0/7] XFS: case-insensitive lookup and Unicode support X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15151 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs The following sequence of patches (must be applied in order) implements case-insensitive support in XFS in two ways: 1. ASCII only case-insensitive 2. Unicode case-insensitive mount ASCII only case-insensitive support is a mkfs option and is primary implemented to support existing IRIX filesystems migrating to Linux. Unicode support is also a mkfs option, but the case-insensitive mode is a mount time option. The user space patches were posted back in January: http://oss.sgi.com/archives/xfs/2008-01/msg00102.html -- From owner-xfs@oss.sgi.com Tue Apr 1 23:26:42 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 23:27:21 -0700 (PDT) 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.7 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_35, J_CHICKENPOX_41,J_CHICKENPOX_43,J_CHICKENPOX_53,J_CHICKENPOX_71 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 m326QYsn006089 for ; Tue, 1 Apr 2008 23:26:36 -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 QAA23154; Wed, 2 Apr 2008 16:27:09 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 88CD858C4C0F; Wed, 2 Apr 2008 16:27:09 +1000 (EST) Message-Id: <20080402062709.286398420@chook.melbourne.sgi.com> References: <20080402062508.017738664@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Wed, 02 Apr 2008 16:25:14 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 6/7] XFS: Native Language Support for Unicode in XFS Content-Disposition: inline; filename=nls_support.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15154 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Implement the "-o nls=" mount option and required conversion of older style charater sets to/from UTF-8 to support non-UTF8 locales. This option is compatible with other Linux filesystems supporting the "nls" mount option. NLS conversion is performed on filename operations including readdir and also user domain extended attribute names. The name zone defined in the "return name" patch is used for temporarily holding the converted name. If Unicode is not configed Y, then the NLS support is virtually a no-op. Signed-off-by: Barry Naujok --- fs/xfs/linux-2.6/xfs_linux.h | 5 + fs/xfs/linux-2.6/xfs_super.c | 21 ++++++ fs/xfs/xfs_attr.c | 78 +++++++++++++++--------- fs/xfs/xfs_attr.h | 6 - fs/xfs/xfs_attr_leaf.c | 74 ++++++++++++++++------- fs/xfs/xfs_clnt.h | 1 fs/xfs/xfs_dir2_block.c | 14 +++- fs/xfs/xfs_dir2_leaf.c | 15 ++++ fs/xfs/xfs_dir2_sf.c | 12 +++ fs/xfs/xfs_mount.h | 2 fs/xfs/xfs_rename.c | 12 +++ fs/xfs/xfs_unicode.c | 137 +++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_unicode.h | 16 +++++ fs/xfs/xfs_vfsops.c | 21 ++++++ fs/xfs/xfs_vnodeops.c | 117 +++++++++++++++++++++++++----------- 15 files changed, 429 insertions(+), 102 deletions(-) Index: kern_ci/fs/xfs/linux-2.6/xfs_linux.h =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_linux.h +++ kern_ci/fs/xfs/linux-2.6/xfs_linux.h @@ -181,6 +181,11 @@ #define howmany(x, y) (((x)+((y)-1))/(y)) /* + * NLS UTF-8 (unicode) character set + */ +#define XFS_NLS_UTF8 "utf8" + +/* * Various platform dependent calls that don't fit anywhere else */ #define xfs_sort(a,n,s,fn) sort(a,n,s,fn,NULL) Index: kern_ci/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_super.c +++ kern_ci/fs/xfs/linux-2.6/xfs_super.c @@ -126,6 +126,7 @@ xfs_args_allocate( #define MNTOPT_NOATTR2 "noattr2" /* do not use attr2 attribute format */ #define MNTOPT_FILESTREAM "filestreams" /* use filestreams allocator */ #define MNTOPT_CILOOKUP "ci" /* case-insensitive dir lookup */ +#define MNTOPT_NLS "nls" /* NLS code page to use */ #define MNTOPT_QUOTA "quota" /* disk quotas (user) */ #define MNTOPT_NOQUOTA "noquota" /* no quotas */ #define MNTOPT_USRQUOTA "usrquota" /* user quota enabled */ @@ -320,9 +321,20 @@ xfs_parseargs( args->flags &= ~XFSMNT_ATTR2; } else if (!strcmp(this_char, MNTOPT_FILESTREAM)) { args->flags2 |= XFSMNT2_FILESTREAMS; +#ifdef CONFIG_XFS_UNICODE } else if (!strcmp(this_char, MNTOPT_CILOOKUP)) { args->flags2 |= XFSMNT2_CILOOKUP; -#ifndef CONFIG_XFS_UNICODE + } else if (!strcmp(this_char, MNTOPT_NLS)) { + if (!value || !*value) { + cmn_err(CE_WARN, + "XFS: %s option requires an argument", + this_char); + return EINVAL; + } + strncpy(args->nls, value, MAXNAMELEN); +#else + } else if (!strcmp(this_char, MNTOPT_CILOOKUP) || + !strcmp(this_char, MNTOPT_NLS)) { cmn_err(CE_WARN, "XFS: %s option requires Unicode support", this_char); @@ -530,6 +542,13 @@ xfs_showargs( if (!(mp->m_qflags & XFS_ALL_QUOTA_ACCT)) seq_puts(m, "," MNTOPT_NOQUOTA); + if (xfs_sb_version_hasunicode(&mp->m_sb)) { + if (mp->m_nls) + seq_printf(m, "," MNTOPT_NLS "=%s", mp->m_nls->charset); + else + seq_puts(m, "," MNTOPT_NLS "=" XFS_NLS_UTF8); + } + return 0; } __uint64_t Index: kern_ci/fs/xfs/xfs_attr.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_attr.c +++ kern_ci/fs/xfs/xfs_attr.c @@ -108,7 +108,7 @@ ktrace_t *xfs_attr_trace_buf; *========================================================================*/ int -xfs_attr_fetch(xfs_inode_t *ip, const char *name, int namelen, +xfs_attr_fetch(xfs_inode_t *ip, const uchar_t *name, int namelen, char *value, int *valuelenp, int flags, struct cred *cred) { xfs_da_args_t args; @@ -167,6 +167,7 @@ xfs_attr_get( cred_t *cred) { int error, namelen; + const uchar_t *uni_name; XFS_STATS_INC(xs_attr_get); @@ -176,24 +177,29 @@ xfs_attr_get( if (namelen >= MAXNAMELEN) return(EFAULT); /* match IRIX behaviour */ + if (XFS_FORCED_SHUTDOWN(ip->i_mount)) + return(EIO); + /* Enforce UTF-8 only for user attr names */ if (xfs_sb_version_hasunicode(&ip->i_mount->m_sb) && (flags & (ATTR_ROOT | ATTR_SECURE)) == 0) { - error = xfs_unicode_validate(name, namelen); + error = xfs_nls_to_unicode(ip->i_mount, name, namelen, + &uni_name, &namelen); if (error) return error; - } - if (XFS_FORCED_SHUTDOWN(ip->i_mount)) - return(EIO); + } else + uni_name = name; xfs_ilock(ip, XFS_ILOCK_SHARED); - error = xfs_attr_fetch(ip, name, namelen, value, valuelenp, flags, cred); + error = xfs_attr_fetch(ip, uni_name, namelen, value, valuelenp, + flags, cred); xfs_iunlock(ip, XFS_ILOCK_SHARED); + xfs_unicode_nls_free(name, uni_name); return(error); } int -xfs_attr_set_int(xfs_inode_t *dp, const char *name, int namelen, +xfs_attr_set_int(xfs_inode_t *dp, const uchar_t *name, int namelen, char *value, int valuelen, int flags) { xfs_da_args_t args; @@ -437,26 +443,31 @@ xfs_attr_set( int valuelen, int flags) { - int namelen; + int error, namelen; + const uchar_t *uni_name; namelen = strlen(name); if (namelen >= MAXNAMELEN) return EFAULT; /* match IRIX behaviour */ + XFS_STATS_INC(xs_attr_set); + + if (XFS_FORCED_SHUTDOWN(dp->i_mount)) + return (EIO); + /* Enforce UTF-8 only for user attr names */ if (xfs_sb_version_hasunicode(&dp->i_mount->m_sb) && (flags & (ATTR_ROOT | ATTR_SECURE)) == 0) { - int error = xfs_unicode_validate(name, namelen); + error = xfs_nls_to_unicode(dp->i_mount, name, namelen, + &uni_name, &namelen); if (error) return error; - } - - XFS_STATS_INC(xs_attr_set); - - if (XFS_FORCED_SHUTDOWN(dp->i_mount)) - return (EIO); + } else + uni_name = name; - return xfs_attr_set_int(dp, name, namelen, value, valuelen, flags); + error = xfs_attr_set_int(dp, uni_name, namelen, value, valuelen, flags); + xfs_unicode_nls_free(name, uni_name); + return error; } /* @@ -464,7 +475,8 @@ xfs_attr_set( * Transitions attribute list from Btree to shortform as necessary. */ int -xfs_attr_remove_int(xfs_inode_t *dp, const char *name, int namelen, int flags) +xfs_attr_remove_int(xfs_inode_t *dp, const uchar_t *name, int namelen, + int flags) { xfs_da_args_t args; xfs_fsblock_t firstblock; @@ -591,35 +603,41 @@ xfs_attr_remove( const char *name, int flags) { - int namelen; + int error, namelen; + const uchar_t *uni_name; namelen = strlen(name); if (namelen >= MAXNAMELEN) return EFAULT; /* match IRIX behaviour */ + XFS_STATS_INC(xs_attr_remove); + + if (XFS_FORCED_SHUTDOWN(dp->i_mount)) + return (EIO); + /* Enforce UTF-8 only for user attr names */ if (xfs_sb_version_hasunicode(&dp->i_mount->m_sb) && (flags & (ATTR_ROOT | ATTR_SECURE)) == 0) { - int error = xfs_unicode_validate(name, namelen); + error = xfs_nls_to_unicode(dp->i_mount, name, namelen, + &uni_name, &namelen); if (error) return error; - } - - XFS_STATS_INC(xs_attr_remove); - - if (XFS_FORCED_SHUTDOWN(dp->i_mount)) - return (EIO); + } else + uni_name = name; xfs_ilock(dp, XFS_ILOCK_SHARED); if (XFS_IFORK_Q(dp) == 0 || (dp->i_d.di_aformat == XFS_DINODE_FMT_EXTENTS && dp->i_d.di_anextents == 0)) { xfs_iunlock(dp, XFS_ILOCK_SHARED); + xfs_unicode_nls_free(name, uni_name); return(XFS_ERROR(ENOATTR)); } xfs_iunlock(dp, XFS_ILOCK_SHARED); - return xfs_attr_remove_int(dp, name, namelen, flags); + error = xfs_attr_remove_int(dp, uni_name, namelen, flags); + xfs_unicode_nls_free(name, uni_name); + return error; } int /* error */ @@ -658,9 +676,9 @@ xfs_attr_list_int(xfs_attr_list_context_ */ /*ARGSUSED*/ STATIC int -xfs_attr_put_listent(xfs_attr_list_context_t *context, attrnames_t *namesp, - char *name, int namelen, - int valuelen, char *value) +xfs_attr_user_list(xfs_attr_list_context_t *context, attrnames_t *namesp, + char *name, int namelen, + int valuelen, char *value) { attrlist_ent_t *aep; int arraytop; @@ -789,7 +807,7 @@ xfs_attr_list( context.alist->al_count = 0; context.alist->al_more = 0; context.alist->al_offset[0] = context.bufsize; - context.put_listent = xfs_attr_put_listent; + context.put_listent = xfs_attr_user_list; } if (XFS_FORCED_SHUTDOWN(dp->i_mount)) Index: kern_ci/fs/xfs/xfs_attr.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_attr.h +++ kern_ci/fs/xfs/xfs_attr.h @@ -158,13 +158,13 @@ struct xfs_da_args; /* * Overall external interface routines. */ -int xfs_attr_set_int(struct xfs_inode *, const char *, int, char *, int, int); -int xfs_attr_remove_int(struct xfs_inode *, const char *, int, int); +int xfs_attr_set_int(struct xfs_inode *, const uchar_t *, int, char *, int, int); +int xfs_attr_remove_int(struct xfs_inode *, const uchar_t *, int, int); int xfs_attr_list_int(struct xfs_attr_list_context *); int xfs_attr_inactive(struct xfs_inode *dp); int xfs_attr_shortform_getvalue(struct xfs_da_args *); -int xfs_attr_fetch(struct xfs_inode *, const char *, int, +int xfs_attr_fetch(struct xfs_inode *, const uchar_t *, int, char *, int *, int, struct cred *); int xfs_attr_rmtval_get(struct xfs_da_args *args); Index: kern_ci/fs/xfs/xfs_attr_leaf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_attr_leaf.c +++ kern_ci/fs/xfs/xfs_attr_leaf.c @@ -42,6 +42,7 @@ #include "xfs_attr.h" #include "xfs_attr_leaf.h" #include "xfs_error.h" +#include "xfs_unicode.h" /* * xfs_attr_leaf.c @@ -89,6 +90,9 @@ STATIC void xfs_attr_leaf_moveents(xfs_a int dst_start, int move_count, xfs_mount_t *mp); STATIC int xfs_attr_leaf_entsize(xfs_attr_leafblock_t *leaf, int index); +STATIC int xfs_attr_put_listent(xfs_attr_list_context_t *context, + attrnames_t *namesp, char *name, int namelen, + int valuelen, char *value); /*======================================================================== * Namespace helper routines @@ -150,7 +154,7 @@ xfs_attr_shortform_bytesfit(xfs_inode_t int offset; int minforkoff; /* lower limit on valid forkoff locations */ int maxforkoff; /* upper limit on valid forkoff locations */ - int dsize; + int dsize; xfs_mount_t *mp = dp->i_mount; offset = (XFS_LITINO(mp) - bytes) >> 3; /* rounded down */ @@ -171,39 +175,39 @@ xfs_attr_shortform_bytesfit(xfs_inode_t } dsize = dp->i_df.if_bytes; - + switch (dp->i_d.di_format) { case XFS_DINODE_FMT_EXTENTS: - /* - * If there is no attr fork and the data fork is extents, - * determine if creating the default attr fork will result - * in the extents form migrating to btree. If so, the - * minimum offset only needs to be the space required for + /* + * If there is no attr fork and the data fork is extents, + * determine if creating the default attr fork will result + * in the extents form migrating to btree. If so, the + * minimum offset only needs to be the space required for * the btree root. - */ + */ if (!dp->i_d.di_forkoff && dp->i_df.if_bytes > mp->m_attroffset) dsize = XFS_BMDR_SPACE_CALC(MINDBTPTRS); break; - + case XFS_DINODE_FMT_BTREE: /* * If have data btree then keep forkoff if we have one, - * otherwise we are adding a new attr, so then we set - * minforkoff to where the btree root can finish so we have + * otherwise we are adding a new attr, so then we set + * minforkoff to where the btree root can finish so we have * plenty of room for attrs */ if (dp->i_d.di_forkoff) { - if (offset < dp->i_d.di_forkoff) + if (offset < dp->i_d.di_forkoff) return 0; - else + else return dp->i_d.di_forkoff; } else dsize = XFS_BMAP_BROOT_SPACE(dp->i_df.if_broot); break; } - - /* - * A data fork btree root must have space for at least + + /* + * A data fork btree root must have space for at least * MINDBTPTRS key/ptr pairs if the data fork is small or empty. */ minforkoff = MAX(dsize, XFS_BMDR_SPACE_CALC(MINDBTPTRS)); @@ -370,7 +374,7 @@ xfs_attr_shortform_remove(xfs_da_args_t */ totsize -= size; if (totsize == sizeof(xfs_attr_sf_hdr_t) && !args->addname && - (mp->m_flags & XFS_MOUNT_ATTR2) && + (mp->m_flags & XFS_MOUNT_ATTR2) && (dp->i_d.di_format != XFS_DINODE_FMT_BTREE)) { /* * Last attribute now removed, revert to original @@ -631,7 +635,7 @@ xfs_attr_shortform_list(xfs_attr_list_co continue; } namesp = xfs_attr_flags_namesp(sfe->flags); - error = context->put_listent(context, + error = xfs_attr_put_listent(context, namesp, (char *)sfe->nameval, (int)sfe->namelen, @@ -734,7 +738,7 @@ xfs_attr_shortform_list(xfs_attr_list_co cursor->hashval = sbp->hash; cursor->offset = 0; } - error = context->put_listent(context, + error = á(context, namesp, sbp->name, sbp->namelen, @@ -2418,7 +2422,7 @@ xfs_attr_leaf_list_int(xfs_dabuf_t *bp, xfs_attr_leaf_name_local_t *name_loc = XFS_ATTR_LEAF_NAME_LOCAL(leaf, i); - retval = context->put_listent(context, + retval = xfs_attr_put_listent(context, namesp, (char *)name_loc->nameval, (int)name_loc->namelen, @@ -2445,7 +2449,7 @@ xfs_attr_leaf_list_int(xfs_dabuf_t *bp, retval = xfs_attr_rmtval_get(&args); if (retval) return retval; - retval = context->put_listent(context, + retval = xfs_attr_put_listent(context, namesp, (char *)name_rmt->name, (int)name_rmt->namelen, @@ -2454,7 +2458,7 @@ xfs_attr_leaf_list_int(xfs_dabuf_t *bp, kmem_free(args.value, valuelen); } else { - retval = context->put_listent(context, + retval = xfs_attr_put_listent(context, namesp, (char *)name_rmt->name, (int)name_rmt->namelen, @@ -2472,6 +2476,32 @@ xfs_attr_leaf_list_int(xfs_dabuf_t *bp, return(retval); } +/* + * Do NLS name conversion if required for user attribute names and call + * context's put_listent routine + */ + +STATIC int +xfs_attr_put_listent(xfs_attr_list_context_t *context, attrnames_t *namesp, + char *name, int namelen, int valuelen, char *value) +{ + char *nls_name; + int nls_namelen; + int error; + + if (xfs_is_using_nls(context->dp->i_mount) && namesp == attr_user) { + error = xfs_unicode_to_nls(context->dp->i_mount, name, namelen, + &nls_name, &nls_namelen); + if (error) + return error; + error = context->put_listent(context, namesp, nls_name, + nls_namelen, valuelen, value); + xfs_unicode_nls_free(name, nls_name); + return error; + } else + return context->put_listent(context, namesp, name, namelen, + valuelen, value); +} /*======================================================================== * Manage the INCOMPLETE flag in a leaf entry Index: kern_ci/fs/xfs/xfs_clnt.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_clnt.h +++ kern_ci/fs/xfs/xfs_clnt.h @@ -48,6 +48,7 @@ struct xfs_mount_args { char rtname[MAXNAMELEN+1]; /* realtime device filename */ char logname[MAXNAMELEN+1]; /* journal device filename */ char mtpt[MAXNAMELEN+1]; /* filesystem mount point */ + char nls[MAXNAMELEN+1]; /* NLS character set to use */ int sunit; /* stripe unit (BBs) */ int swidth; /* stripe width (BBs), multiple of sunit */ uchar_t iosizelog; /* log2 of the preferred I/O size */ Index: kern_ci/fs/xfs/xfs_dir2_block.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_block.c +++ kern_ci/fs/xfs/xfs_dir2_block.c @@ -38,6 +38,7 @@ #include "xfs_dir2_block.h" #include "xfs_dir2_trace.h" #include "xfs_error.h" +#include "xfs_unicode.h" /* * Local function prototypes. @@ -450,6 +451,8 @@ xfs_dir2_block_getdents( int wantoff; /* starting block offset */ xfs_ino_t ino; xfs_off_t cook; + const uchar_t *nls_name; + int nls_namelen; mp = dp->i_mount; /* @@ -513,16 +516,21 @@ xfs_dir2_block_getdents( #if XFS_BIG_INUMS ino += mp->m_inoadd; #endif - + error = xfs_unicode_to_nls(mp, dep->name, dep->namelen, + &nls_name, &nls_namelen); + if (error) + break; /* * If it didn't fit, set the final offset to here & return. */ - if (filldir(dirent, dep->name, dep->namelen, cook, + if (filldir(dirent, nls_name, nls_namelen, cook, ino, DT_UNKNOWN)) { *offset = cook; + xfs_unicode_nls_free(dep->name, nls_name); xfs_da_brelse(NULL, bp); return 0; } + xfs_unicode_nls_free(dep->name, nls_name); } /* @@ -531,7 +539,7 @@ xfs_dir2_block_getdents( */ *offset = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk + 1, 0); xfs_da_brelse(NULL, bp); - return 0; + return error; } /* Index: kern_ci/fs/xfs/xfs_dir2_leaf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_leaf.c +++ kern_ci/fs/xfs/xfs_dir2_leaf.c @@ -40,6 +40,7 @@ #include "xfs_dir2_node.h" #include "xfs_dir2_trace.h" #include "xfs_error.h" +#include "xfs_unicode.h" /* * Local function declarations. @@ -780,6 +781,8 @@ xfs_dir2_leaf_getdents( int ra_offset; /* map entry offset for ra */ int ra_want; /* readahead count wanted */ xfs_ino_t ino; + const uchar_t *nls_name; /* NLS name buffer */ + int nls_namelen; /* * If the offset is at or past the largest allowed value, @@ -1087,13 +1090,21 @@ xfs_dir2_leaf_getdents( ino += mp->m_inoadd; #endif + error = xfs_unicode_to_nls(mp, dep->name, dep->namelen, + &nls_name, &nls_namelen); + if (error) + break; + /* * Won't fit. Return to caller. */ - if (filldir(dirent, dep->name, dep->namelen, + if (filldir(dirent, nls_name, nls_namelen, xfs_dir2_byte_to_dataptr(mp, curoff), - ino, DT_UNKNOWN)) + ino, DT_UNKNOWN)) { + xfs_unicode_nls_free(dep->name, nls_name); break; + } + xfs_unicode_nls_free(dep->name, nls_name); /* * Advance to next entry in the block. Index: kern_ci/fs/xfs/xfs_dir2_sf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_sf.c +++ kern_ci/fs/xfs/xfs_dir2_sf.c @@ -38,6 +38,7 @@ #include "xfs_dir2_leaf.h" #include "xfs_dir2_block.h" #include "xfs_dir2_trace.h" +#include "xfs_unicode.h" /* * Prototypes for internal functions. @@ -700,6 +701,7 @@ xfs_dir2_sf_getdents( xfs_off_t *offset, filldir_t filldir) { + int error; int i; /* shortform entry number */ xfs_mount_t *mp; /* filesystem mount point */ xfs_dir2_dataptr_t off; /* current entry's offset */ @@ -708,6 +710,8 @@ xfs_dir2_sf_getdents( xfs_dir2_dataptr_t dot_offset; xfs_dir2_dataptr_t dotdot_offset; xfs_ino_t ino; + const uchar_t *nls_name; /* NLS name buffer */ + int nls_namelen; mp = dp->i_mount; @@ -789,12 +793,18 @@ xfs_dir2_sf_getdents( #if XFS_BIG_INUMS ino += mp->m_inoadd; #endif + error = xfs_unicode_to_nls(mp, sfep->name, sfep->namelen, + &nls_name, &nls_namelen); + if (error) + return error; - if (filldir(dirent, sfep->name, sfep->namelen, + if (filldir(dirent, nls_name, nls_namelen, off, ino, DT_UNKNOWN)) { *offset = off; + xfs_unicode_nls_free(sfep->name, nls_name); return 0; } + xfs_unicode_nls_free(sfep->name, nls_name); sfep = xfs_dir2_sf_nextentry(sfp, sfep); } Index: kern_ci/fs/xfs/xfs_mount.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_mount.h +++ kern_ci/fs/xfs/xfs_mount.h @@ -54,6 +54,7 @@ typedef struct xfs_trans_reservations { #else struct cred; struct log; +struct nls_table; struct xfs_mount_args; struct xfs_inode; struct xfs_bmbt_irec; @@ -316,6 +317,7 @@ typedef struct xfs_mount { __uint8_t m_sectbb_log; /* sectlog - BBSHIFT */ struct xfs_nameops *m_dirnameops; /* vector of dir name ops */ struct xfs_cft *m_cft; /* unicode case fold table */ + struct nls_table *m_nls; /* active NLS table */ int m_dirblksize; /* directory block sz--bytes */ int m_dirblkfsbs; /* directory block sz--fsbs */ xfs_dablk_t m_dirdatablk; /* blockno of dir data v2 */ Index: kern_ci/fs/xfs/xfs_rename.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_rename.c +++ kern_ci/fs/xfs/xfs_rename.c @@ -250,10 +250,14 @@ xfs_rename( xfs_itrace_entry(target_dp); if (xfs_sb_version_hasunicode(&mp->m_sb)) { - error = xfs_unicode_validate(src_name, src_namelen); + error = xfs_nls_to_unicode(mp, + VNAME(src_vname), VNAMELEN(src_vname), + (const uchar_t **)&src_name, &src_namelen); if (error) return error; - error = xfs_unicode_validate(target_name, target_namelen); + error = xfs_nls_to_unicode(mp, + VNAME(target_vname), VNAMELEN(target_vname), + (const uchar_t **)&target_name, &target_namelen); if (error) return error; } @@ -265,6 +269,8 @@ xfs_rename( src_name, target_name, 0, 0, 0); if (error) { + xfs_unicode_nls_free(VNAME(src_vname), src_name); + xfs_unicode_nls_free(VNAME(target_vname), target_name); return error; } } @@ -598,6 +604,8 @@ std_return: src_name, target_name, 0, error, 0); } + xfs_unicode_nls_free(VNAME(src_vname), src_name); + xfs_unicode_nls_free(VNAME(target_vname), target_name); return error; abort_return: Index: kern_ci/fs/xfs/xfs_unicode.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_unicode.c +++ kern_ci/fs/xfs/xfs_unicode.c @@ -497,3 +497,140 @@ xfs_unicode_uninit(void) mutex_unlock(&cft_lock); mutex_destroy(&cft_lock); } + +/* + * Convert UTF-8 (Unicode) string into the specified character set in "nls". + * If no NLS conversion is required (mp->m_nls = NULL), the pointers are + * return as is. Otherwise, a new buffer is allocated and returned. + * xfs_unicode_nls_free() must be called with the source uni_name and returned + * nls_name so it can free the buffer if required. + */ +int +xfs_unicode_to_nls( + xfs_mount_t *mp, + const uchar_t *uni_name, + int uni_namelen, + const uchar_t **nls_name, + int *nls_namelen) +{ + char *n; + int i, o; + wchar_t uc; + int nlen; + int u8len; + int error; + + if (!xfs_is_using_nls(mp)) { + *nls_name = uni_name; + *nls_namelen = uni_namelen; + return 0; + } + + n = xfs_da_name_alloc(); + if (!n) + return ENOMEM; + + error = 0; + for (i = 0, o = 0; i < uni_namelen && o < MAXNAMELEN; + i += u8len, o += nlen) { + u8len = utf8_mbtowc(&uc, uni_name + i, uni_namelen - i); + if (u8len < 0) { + error = EINVAL; + goto err_out; + } + nlen = mp->m_nls->uni2char(uc, n + o, MAXNAMELEN - o); + if (nlen == -EINVAL) { + n[o] = '?'; + nlen = 1; + } else if (nlen < 0) { + error = -nlen; + goto err_out; + } + } + if (i == uni_namelen) { + *nls_name = n; + *nls_namelen = o; + return 0; + } + error = ENAMETOOLONG; +err_out: + xfs_da_name_free(n); + return error; +} + +/* + * Convert the "nls" specified charset string into UTF-8 (Unicode). + * If no NLS conversion is required (mp->m_nls = NULL), the pointers are + * return as is. Otherwise, a new buffer is allocated and returned. + * xfs_unicode_nls_free() must be called with the source uni_name and returned + * nls_name so it can free the buffer if required. + * + * As this is used for all strings coming in from outside XFS, if NLS + * conversion is not used, validate the string as properly formed UTF-8. + */ +int +xfs_nls_to_unicode( + xfs_mount_t *mp, + const uchar_t *nls_name, + int nls_namelen, + const uchar_t **uni_name, + int *uni_namelen) +{ + char *n; + int i, o; + wchar_t uc; + int nlen; + int u8len; + int error; + + if (!xfs_is_using_nls(mp)) { + error = xfs_unicode_validate(nls_name, nls_namelen); + if (error) + return error; + *uni_name = nls_name; + *uni_namelen = nls_namelen; + return 0; + } + + n = xfs_da_name_alloc(); + if (!n) + return ENOMEM; + + error = 0; + for (i = 0, o = 0; i < nls_namelen; i += nlen, o += u8len) { + nlen = mp->m_nls->char2uni(nls_name + i, nls_namelen - i, &uc); + if (nlen < 0) { + error = -nlen; + goto err_out; + } + if (uc >= 0xfffe || (uc >= 0xd800 && uc <= 0xdfff)) { + error = EINVAL; /* don't support chars outside BMP */ + goto err_out; + } + u8len = utf8_wctomb(n + o, uc, MAXNAMELEN - o); + if (u8len <= 0) { + error = (MAXNAMELEN - o < 3) ? ENAMETOOLONG : EINVAL; + goto err_out; + } + } + *uni_name = n; + *uni_namelen = o; + return 0; +err_out: + xfs_da_name_free(n); + return error; + +} + +/* + * free the buffer that MAY have been allocated by xfs_unicode_to_nls() + * or xfs_nls_to_unicode(). + */ +void +xfs_unicode_nls_free( + const uchar_t *src_name, + const uchar_t *conv_name) +{ + if (src_name != conv_name) + xfs_da_name_free((uchar_t *)conv_name); +} Index: kern_ci/fs/xfs/xfs_unicode.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_unicode.h +++ kern_ci/fs/xfs/xfs_unicode.h @@ -65,6 +65,14 @@ int xfs_unicode_validate(const uchar_t * int xfs_unicode_read_cft(struct xfs_mount *mp); void xfs_unicode_free_cft(const xfs_cft_t *cft); +#define xfs_is_using_nls(mp) ((mp)->m_nls != NULL) + +int xfs_unicode_to_nls(struct xfs_mount *mp, const uchar_t *uni_name, + int uni_namelen, const uchar_t **nls_name, int *nls_namelen); +int xfs_nls_to_unicode(struct xfs_mount *mp, const uchar_t *nls_name, + int nls_namelen, const uchar_t **uni_name, int *uni_namelen); +void xfs_unicode_nls_free(const uchar_t *src_name, const uchar_t *conv_name); + #else #define xfs_unicode_nameops xfs_default_nameops @@ -76,6 +84,14 @@ void xfs_unicode_free_cft(const xfs_cft_ #define xfs_unicode_read_cft(mp) (EOPNOTSUPP) #define xfs_unicode_free_cft(cft) +#define xfs_is_using_nls(mp) 0 + +#define xfs_unicode_to_nls(mp, uname, ulen, pnname, pnlen) \ + ((*(pnname)) = (uname), (*(pnlen)) = (ulen), 0) +#define xfs_nls_to_unicode(mp, nname, nlen, puname, pulen) \ + ((*(puname)) = (nname), (*(pulen)) = (nlen), 0) +#define xfs_unicode_nls_free(sname, cname) + #endif /* CONFIG_XFS_UNICODE */ #endif /* __XFS_UNICODE_H__ */ Index: kern_ci/fs/xfs/xfs_vfsops.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_vfsops.c +++ kern_ci/fs/xfs/xfs_vfsops.c @@ -405,13 +405,30 @@ xfs_finish_flags( if (xfs_sb_version_hasunicode(&mp->m_sb)) { if (ap->flags2 & XFSMNT2_CILOOKUP) mp->m_flags |= XFS_MOUNT_CILOOKUP; + + mp->m_nls = ap->nls[0] ? load_nls(ap->nls) : load_nls_default(); + if (!mp->m_nls) { + cmn_err(CE_WARN, + "XFS: unable to load nls mapping \"%s\"\n", ap->nls); + return XFS_ERROR(EINVAL); + } + if (strcmp(mp->m_nls->charset, XFS_NLS_UTF8) == 0) { + /* special case utf8 - no translation required */ + unload_nls(mp->m_nls); + mp->m_nls = NULL; + } } else { /* * Check for mount options which require a Unicode FS */ if (ap->flags2 & XFSMNT2_CILOOKUP) { cmn_err(CE_WARN, - "XFS: can't do case-insensitive mount on non-utf8 filesystem"); + "XFS: can't do case-insensitive mount on non-Unicode filesystem"); + return XFS_ERROR(EINVAL); + } + if (ap->nls[0]) { + cmn_err(CE_WARN, + "XFS: can't use nls mount option on non-Unicode filesystem"); return XFS_ERROR(EINVAL); } } @@ -647,6 +664,8 @@ out: xfs_unmountfs(mp, credp); xfs_qmops_put(mp); xfs_dmops_put(mp); + if (xfs_is_using_nls(mp)) + unload_nls(mp->m_nls); kmem_free(mp, sizeof(xfs_mount_t)); } Index: kern_ci/fs/xfs/xfs_vnodeops.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_vnodeops.c +++ kern_ci/fs/xfs/xfs_vnodeops.c @@ -1779,13 +1779,14 @@ xfs_lookup( return XFS_ERROR(EIO); if (xfs_sb_version_hasunicode(&dp->i_mount->m_sb)) { - error = xfs_unicode_validate(d_name->name, d_name->len); + error = xfs_nls_to_unicode(dp->i_mount, d_name->name, + d_name->len, &name.name, &name.len); if (error) return error; + } else { + name.name = d_name->name; + name.len = d_name->len; } - - name.name = (uchar_t *)d_name->name; - name.len = d_name->len; rname.name = NULL; lock_mode = xfs_ilock_map_shared(dp); error = xfs_dir_lookup_int(dp, lock_mode, &name, &e_inum, &ip, &rname); @@ -1793,11 +1794,15 @@ xfs_lookup( *ipp = ip; xfs_itrace_ref(ip); if (rname.name) { - ci_name->name = rname.name; - ci_name->len = rname.len; + error = xfs_unicode_to_nls(dp->i_mount, + rname.name, rname.len, + &ci_name->name, &ci_name->len); + /* free rname.name if conversion occurred or error */ + xfs_unicode_nls_free(ci_name->name, rname.name); } } xfs_iunlock_map_shared(dp, lock_mode); + xfs_unicode_nls_free(d_name->name, name.name); return error; } @@ -1810,7 +1815,7 @@ xfs_create( xfs_inode_t **ipp, cred_t *credp) { - char *name = VNAME(dentry); + char *name; xfs_mount_t *mp = dp->i_mount; xfs_inode_t *ip; xfs_trans_t *tp; @@ -1832,12 +1837,14 @@ xfs_create( if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); - namelen = VNAMELEN(dentry); - if (xfs_sb_version_hasunicode(&mp->m_sb)) { - error = xfs_unicode_validate(name, namelen); + error = xfs_nls_to_unicode(mp, VNAME(dentry), VNAMELEN(dentry), + (const uchar_t **)&name, &namelen); if (error) return error; + } else { + name = VNAME(dentry); + namelen = VNAMELEN(dentry); } if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) { @@ -1846,8 +1853,10 @@ xfs_create( DM_RIGHT_NULL, name, NULL, mode, 0, 0); - if (error) + if (error) { + xfs_unicode_nls_free(VNAME(dentry), name); return error; + } dm_event_sent = 1; } @@ -1999,6 +2008,7 @@ std_return: DM_RIGHT_NULL, name, NULL, mode, error, 0); } + xfs_unicode_nls_free(VNAME(dentry), name); return error; abort_return: @@ -2290,10 +2300,10 @@ xfs_remove( xfs_inode_t *dp, bhv_vname_t *dentry) { - char *name = VNAME(dentry); + char *name; xfs_mount_t *mp = dp->i_mount; xfs_inode_t *ip = VNAME_TO_INODE(dentry); - int namelen = VNAMELEN(dentry); + int namelen; xfs_trans_t *tp = NULL; int error; xfs_bmap_free_t free_list; @@ -2309,17 +2319,23 @@ xfs_remove( return XFS_ERROR(EIO); if (xfs_sb_version_hasunicode(&mp->m_sb)) { - error = xfs_unicode_validate(name, namelen); + error = xfs_nls_to_unicode(mp, VNAME(dentry), VNAMELEN(dentry), + (const uchar_t **)&name, &namelen); if (error) return error; + } else { + name = VNAME(dentry); + namelen = VNAMELEN(dentry); } if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { error = XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, name, NULL, ip->i_d.di_mode, 0, 0); - if (error) + if (error) { + xfs_unicode_nls_free(VNAME(dentry), name); return error; + } } /* @@ -2472,6 +2488,7 @@ xfs_remove( NULL, DM_RIGHT_NULL, name, NULL, ip->i_d.di_mode, error, 0); } + xfs_unicode_nls_free(VNAME(dentry), name); return error; error1: @@ -2511,22 +2528,26 @@ xfs_link( int cancel_flags; int committed; int resblks; - char *target_name = VNAME(dentry); + char *target_name; int target_namelen; xfs_itrace_entry(tdp); xfs_itrace_entry(sip); - target_namelen = VNAMELEN(dentry); ASSERT(!S_ISDIR(sip->i_d.di_mode)); if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); if (xfs_sb_version_hasunicode(&mp->m_sb)) { - error = xfs_unicode_validate(target_name, target_namelen); + error = xfs_nls_to_unicode(mp, VNAME(dentry), VNAMELEN(dentry), + (const uchar_t **)&target_name, + &target_namelen); if (error) return error; + } else { + target_name = VNAME(dentry); + target_namelen = VNAMELEN(dentry); } if (DM_EVENT_ENABLED(tdp, DM_EVENT_LINK)) { @@ -2534,8 +2555,10 @@ xfs_link( tdp, DM_RIGHT_NULL, sip, DM_RIGHT_NULL, target_name, NULL, 0, 0, 0); - if (error) + if (error) { + xfs_unicode_nls_free(VNAME(dentry), target_name); return error; + } } /* Return through std_return after this point. */ @@ -2646,6 +2669,7 @@ std_return: sip, DM_RIGHT_NULL, target_name, NULL, 0, error, 0); } + xfs_unicode_nls_free(VNAME(dentry), target_name); return error; abort_return: @@ -2666,8 +2690,8 @@ xfs_mkdir( xfs_inode_t **ipp, cred_t *credp) { - char *dir_name = VNAME(dentry); - int dir_namelen = VNAMELEN(dentry); + char *dir_name; + int dir_namelen; xfs_mount_t *mp = dp->i_mount; xfs_inode_t *cdp; /* inode of created dir */ xfs_trans_t *tp; @@ -2687,9 +2711,13 @@ xfs_mkdir( return XFS_ERROR(EIO); if (xfs_sb_version_hasunicode(&mp->m_sb)) { - error = xfs_unicode_validate(dir_name, dir_namelen); + error = xfs_nls_to_unicode(mp, VNAME(dentry), VNAMELEN(dentry), + (const uchar_t **)&dir_name, &dir_namelen); if (error) return error; + } else { + dir_name = VNAME(dentry); + dir_namelen = VNAMELEN(dentry); } tp = NULL; @@ -2699,8 +2727,10 @@ xfs_mkdir( dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, dir_name, NULL, mode, 0, 0); - if (error) + if (error) { + xfs_unicode_nls_free(VNAME(dentry), dir_name); return error; + } dm_event_sent = 1; } @@ -2858,6 +2888,7 @@ std_return: dir_name, NULL, mode, error, 0); } + xfs_unicode_nls_free(VNAME(dentry), dir_name); return error; error2: @@ -2882,8 +2913,8 @@ xfs_rmdir( bhv_vname_t *dentry) { bhv_vnode_t *dir_vp = XFS_ITOV(dp); - char *name = VNAME(dentry); - int namelen = VNAMELEN(dentry); + char *name; + int namelen; xfs_mount_t *mp = dp->i_mount; xfs_inode_t *cdp = VNAME_TO_INODE(dentry); xfs_trans_t *tp; @@ -2901,9 +2932,13 @@ xfs_rmdir( return XFS_ERROR(EIO); if (xfs_sb_version_hasunicode(&mp->m_sb)) { - error = xfs_unicode_validate(name, namelen); + error = xfs_nls_to_unicode(mp, VNAME(dentry), VNAMELEN(dentry), + (const uchar_t **)&name, &namelen); if (error) return error; + } else { + name = VNAME(dentry); + namelen = VNAMELEN(dentry); } if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { @@ -2911,8 +2946,10 @@ xfs_rmdir( dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, name, NULL, cdp->i_d.di_mode, 0, 0); - if (error) + if (error) { + xfs_unicode_nls_free(VNAME(dentry), name); return XFS_ERROR(error); + } } /* @@ -3087,6 +3124,7 @@ xfs_rmdir( name, NULL, cdp->i_d.di_mode, error, 0); } + xfs_unicode_nls_free(VNAME(dentry), name); return error; error1: @@ -3130,7 +3168,7 @@ xfs_symlink( xfs_prid_t prid; struct xfs_dquot *udqp, *gdqp; uint resblks; - char *link_name = VNAME(dentry); + char *link_name; int link_namelen; *ipp = NULL; @@ -3142,14 +3180,6 @@ xfs_symlink( if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); - link_namelen = VNAMELEN(dentry); - - if (xfs_sb_version_hasunicode(&mp->m_sb)) { - error = xfs_unicode_validate(link_name, link_namelen); - if (error) - return error; - } - /* * Check component lengths of the target path name. */ @@ -3182,12 +3212,24 @@ xfs_symlink( } } + if (xfs_sb_version_hasunicode(&mp->m_sb)) { + error = xfs_nls_to_unicode(mp, VNAME(dentry), VNAMELEN(dentry), + (const uchar_t **)&link_name, &link_namelen); + if (error) + return error; + } else { + link_name = VNAME(dentry); + link_namelen = VNAMELEN(dentry); + } + if (DM_EVENT_ENABLED(dp, DM_EVENT_SYMLINK)) { error = XFS_SEND_NAMESP(mp, DM_EVENT_SYMLINK, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, link_name, target_path, 0, 0, 0); - if (error) + if (error) { + xfs_unicode_nls_free(VNAME(dentry), link_name); return error; + } } /* Return through std_return after this point. */ @@ -3395,6 +3437,7 @@ std_return: if (!error) *ipp = ip; + xfs_unicode_nls_free(VNAME(dentry), link_name); return error; error2: -- From owner-xfs@oss.sgi.com Tue Apr 1 23:26:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 23:27:04 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, J_CHICKENPOX_72 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 m326QXnX006082 for ; Tue, 1 Apr 2008 23:26:37 -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 QAA23145; Wed, 2 Apr 2008 16:27:08 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 57FE658C4C15; Wed, 2 Apr 2008 16:27:08 +1000 (EST) Message-Id: <20080402062708.071715758@chook.melbourne.sgi.com> References: <20080402062508.017738664@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Wed, 02 Apr 2008 16:25:10 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 2/7] XFS: ASCII case-insensitive support Content-Disposition: inline; filename=ascii_ci.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15153 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Implement ASCII case-insensitive support. It's primary purpose is for supporting existing filesystems that already use this case-insensitive mode migrated from IRIX. But, if you only need ASCII-only case-insensitive support (ie. English only) and will never use another language, then this mode is perfectly adequate. ASCII-CI is implemented by generating hashes based on lower-case letters and doing lower-case compares. It implements a new xfs_nameops vector for doing the hashes and comparisons for all filename operations. It also overrides the Linux dentry cache operations with its own hash and compare functions (the same as used in the xfs_nameops vector). To create a filesystem with this CI mode, use: # mkfs.xfs -n version=ci Signed-off-by: Barry Naujok --- fs/xfs/linux-2.6/xfs_iops.c | 46 +++++++++++++++++++++++++++++++++++++- fs/xfs/linux-2.6/xfs_linux.h | 1 fs/xfs/linux-2.6/xfs_super.c | 4 +++ fs/xfs/xfs_dir2.c | 52 ++++++++++++++++++++++++++++++++++++++++++- fs/xfs/xfs_fs.h | 1 fs/xfs/linux-2.6/xfs_iops.c | 46 +++++++++++++++++++++++++++++++++++++- fs/xfs/linux-2.6/xfs_linux.h | 1 fs/xfs/linux-2.6/xfs_super.c | 4 +++ fs/xfs/xfs_dir2.c | 52 ++++++++++++++++++++++++++++++++++++++++++- fs/xfs/xfs_fs.h | 1 fs/xfs/xfs_fsops.c | 4 ++- fs/xfs/xfs_sb.h | 10 +++++++- 7 files changed, 114 insertions(+), 4 deletions(-) Index: kern_ci/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_iops.c +++ kern_ci/fs/xfs/linux-2.6/xfs_iops.c @@ -47,6 +47,7 @@ #include "xfs_buf_item.h" #include "xfs_utils.h" #include "xfs_vnodeops.h" +#include "xfs_da_btree.h" #include #include @@ -54,6 +55,8 @@ #include #include +struct dentry_operations xfs_ci_dentry_operations; + /* * Bring the atime in the XFS inode uptodate. * Used before logging the inode to disk or when the Linux inode goes away. @@ -372,10 +375,15 @@ xfs_vn_lookup( { struct xfs_inode *cip; int error; + struct xfs_mount *mp = XFS_I(dir)->i_mount; + struct dentry *result; if (dentry->d_name.len >= MAXNAMELEN) return ERR_PTR(-ENAMETOOLONG); + if (xfs_sb_version_hasoldci(&mp->m_sb)) + dentry->d_op = &xfs_ci_dentry_operations; + error = xfs_lookup(XFS_I(dir), dentry, &cip); if (unlikely(error)) { if (unlikely(error != ENOENT)) @@ -384,7 +392,10 @@ xfs_vn_lookup( return NULL; } - return d_splice_alias(cip->i_vnode, dentry); + result = d_splice_alias(cip->i_vnode, dentry); + if (result) + result->d_op = dentry->d_op; + return result; } STATIC int @@ -887,3 +898,36 @@ const struct inode_operations xfs_symlin .listxattr = xfs_vn_listxattr, .removexattr = xfs_vn_removexattr, }; + +STATIC int +xfs_ci_dentry_hash( + struct dentry *dir, + struct qstr *this) +{ + this->hash = xfs_dir_hashname(XFS_I(dir->d_inode), + this->name, this->len); + return 0; +} + +STATIC int +xfs_ci_dentry_compare( + struct dentry *dir, + struct qstr *a, + struct qstr *b) +{ + int result = xfs_dir_compname(XFS_I(dir->d_inode), a->name, a->len, + b->name, b->len) == XFS_CMP_DIFFERENT; + /* + * result == 0 if a match is found, and if so, copy the name in "b" + * to "a" to cope with negative dentries getting the correct name. + */ + if (result == 0) + memcpy((unsigned char *)a->name, b->name, a->len); + return result; +} + +struct dentry_operations xfs_ci_dentry_operations = +{ + .d_hash = xfs_ci_dentry_hash, + .d_compare = xfs_ci_dentry_compare, +}; Index: kern_ci/fs/xfs/linux-2.6/xfs_linux.h =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_linux.h +++ kern_ci/fs/xfs/linux-2.6/xfs_linux.h @@ -75,6 +75,7 @@ #include #include #include +#include #include #include Index: kern_ci/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_super.c +++ kern_ci/fs/xfs/linux-2.6/xfs_super.c @@ -67,6 +67,8 @@ static kmem_zone_t *xfs_vnode_zone; static kmem_zone_t *xfs_ioend_zone; mempool_t *xfs_ioend_pool; +extern struct dentry_operations xfs_ci_dentry_operations; + STATIC struct xfs_mount_args * xfs_args_allocate( struct super_block *sb, @@ -1359,6 +1361,8 @@ xfs_fs_fill_super( error = ENOMEM; goto fail_vnrele; } + if (xfs_sb_version_hasoldci(&mp->m_sb)) + sb->s_root->d_op = &xfs_ci_dentry_operations; mp->m_sync_work.w_syncer = xfs_sync_worker; mp->m_sync_work.w_mount = mp; Index: kern_ci/fs/xfs/xfs_dir2.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -45,6 +45,55 @@ #include "xfs_vnodeops.h" +/* + * V1/OLDCI case-insensitive support for directories + * + * This is ASCII only case support, ie. A-Z. + */ +static xfs_dahash_t +xfs_ascii_ci_hashname( + const uchar_t *name, + int namelen) +{ + xfs_dahash_t hash; + int i; + + for (i = 0, hash = 0; i < namelen; i++) + hash = tolower(name[i]) ^ rol32(hash, 7); + + return hash; +} + +static xfs_dacmp_t +xfs_ascii_ci_compname( + const uchar_t *name1, + int len1, + const uchar_t *name2, + int len2) +{ + xfs_dacmp_t result; + int i; + + if (len1 != len2) + return XFS_CMP_DIFFERENT; + + result = XFS_CMP_EXACT; + for (i = 0; i < len1; i++) { + if (name1[i] == name2[i]) + continue; + if (tolower(name1[i]) != tolower(name2[i])) + return XFS_CMP_DIFFERENT; + result = XFS_CMP_CASE; + } + + return result; +} + +static struct xfs_nameops xfs_ascii_ci_nameops = { + .hashname = xfs_ascii_ci_hashname, + .compname = xfs_ascii_ci_compname, +}; + void xfs_dir_mount( xfs_mount_t *mp) @@ -64,7 +113,8 @@ xfs_dir_mount( (mp->m_dirblksize - (uint)sizeof(xfs_da_node_hdr_t)) / (uint)sizeof(xfs_da_node_entry_t); mp->m_dir_magicpct = (mp->m_dirblksize * 37) / 100; - mp->m_dirnameops = &xfs_default_nameops; + mp->m_dirnameops = xfs_sb_version_hasoldci(&mp->m_sb) ? + &xfs_ascii_ci_nameops : &xfs_default_nameops; } /* Index: kern_ci/fs/xfs/xfs_fs.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_fs.h +++ kern_ci/fs/xfs/xfs_fs.h @@ -239,6 +239,7 @@ typedef struct xfs_fsop_resblks { #define XFS_FSOP_GEOM_FLAGS_LOGV2 0x0100 /* log format version 2 */ #define XFS_FSOP_GEOM_FLAGS_SECTOR 0x0200 /* sector sizes >1BB */ #define XFS_FSOP_GEOM_FLAGS_ATTR2 0x0400 /* inline attributes rework */ +#define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x1000 /* ASCII only CI names */ #define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x4000 /* lazy superblock counters */ Index: kern_ci/fs/xfs/xfs_fsops.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_fsops.c +++ kern_ci/fs/xfs/xfs_fsops.c @@ -95,6 +95,8 @@ xfs_fs_geometry( XFS_FSOP_GEOM_FLAGS_DIRV2 : 0) | (xfs_sb_version_hassector(&mp->m_sb) ? XFS_FSOP_GEOM_FLAGS_SECTOR : 0) | + (xfs_sb_version_hasoldci(&mp->m_sb) ? + XFS_FSOP_GEOM_FLAGS_DIRV2CI : 0) | (xfs_sb_version_haslazysbcount(&mp->m_sb) ? XFS_FSOP_GEOM_FLAGS_LAZYSB : 0) | (xfs_sb_version_hasattr2(&mp->m_sb) ? @@ -629,7 +631,7 @@ xfs_fs_goingdown( xfs_force_shutdown(mp, SHUTDOWN_FORCE_UMOUNT); thaw_bdev(sb->s_bdev, sb); } - + break; } case XFS_FSOP_GOING_FLAGS_LOGFLUSH: Index: kern_ci/fs/xfs/xfs_sb.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_sb.h +++ kern_ci/fs/xfs/xfs_sb.h @@ -46,10 +46,12 @@ struct xfs_mount; #define XFS_SB_VERSION_SECTORBIT 0x0800 #define XFS_SB_VERSION_EXTFLGBIT 0x1000 #define XFS_SB_VERSION_DIRV2BIT 0x2000 +#define XFS_SB_VERSION_OLDCIBIT 0x4000 /* ASCII only case-insens. */ #define XFS_SB_VERSION_MOREBITSBIT 0x8000 #define XFS_SB_VERSION_OKSASHFBITS \ (XFS_SB_VERSION_EXTFLGBIT | \ - XFS_SB_VERSION_DIRV2BIT) + XFS_SB_VERSION_DIRV2BIT | \ + XFS_SB_VERSION_OLDCIBIT) #define XFS_SB_VERSION_OKREALFBITS \ (XFS_SB_VERSION_ATTRBIT | \ XFS_SB_VERSION_NLINKBIT | \ @@ -436,6 +438,12 @@ static inline int xfs_sb_version_hassect ((sbp)->sb_versionnum & XFS_SB_VERSION_SECTORBIT); } +static inline int xfs_sb_version_hasoldci(xfs_sb_t *sbp) +{ + return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ + ((sbp)->sb_versionnum & XFS_SB_VERSION_OLDCIBIT); +} + static inline int xfs_sb_version_hasmorebits(xfs_sb_t *sbp) { return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ -- From owner-xfs@oss.sgi.com Tue Apr 1 23:26:41 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 23:26:59 -0700 (PDT) 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.9 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 m326QYRN006090 for ; Tue, 1 Apr 2008 23:26:39 -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 QAA23157; Wed, 2 Apr 2008 16:27:10 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id D3A4058C4C19; Wed, 2 Apr 2008 16:27:09 +1000 (EST) Message-Id: <20080402062709.577869936@chook.melbourne.sgi.com> References: <20080402062508.017738664@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Wed, 02 Apr 2008 16:25:15 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 7/7] XFS: NLS config option Content-Disposition: inline; filename=config_nls.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15152 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs This optional patch implements the NLS support as a CONFIG option. Signed-off-by: Barry Naujok --- fs/xfs/Kconfig | 10 ++++++++++ fs/xfs/xfs_unicode.c | 4 ++++ fs/xfs/xfs_unicode.h | 17 ++++++++++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) Index: kern_ci/fs/xfs/Kconfig =================================================================== --- kern_ci.orig/fs/xfs/Kconfig +++ kern_ci/fs/xfs/Kconfig @@ -87,6 +87,16 @@ config XFS_UNICODE If you don't require UTF-8 enforcement, say N. +config XFS_UNICODE_NLS + bool "XFS NLS Unicode support + depends on XFS_UNICODE + help + NLS (Native Language Support) allows non-UTF8 locales to + interact with XFS Unicode support. To specify the character + set being used, use the "-n nls=" mount option. + + If you don't require NLS conversion in XFS, say N. + config XFS_RT bool "XFS Realtime subvolume support" depends on XFS_FS Index: kern_ci/fs/xfs/xfs_unicode.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_unicode.c +++ kern_ci/fs/xfs/xfs_unicode.c @@ -498,6 +498,8 @@ xfs_unicode_uninit(void) mutex_destroy(&cft_lock); } +#ifdef CONFIG_XFS_UNICODE_NLS + /* * Convert UTF-8 (Unicode) string into the specified character set in "nls". * If no NLS conversion is required (mp->m_nls = NULL), the pointers are @@ -634,3 +636,5 @@ xfs_unicode_nls_free( if (src_name != conv_name) xfs_da_name_free((uchar_t *)conv_name); } + +#endif /* CONFIG_XFS_UNICODE_NLS */ Index: kern_ci/fs/xfs/xfs_unicode.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_unicode.h +++ kern_ci/fs/xfs/xfs_unicode.h @@ -65,6 +65,8 @@ int xfs_unicode_validate(const uchar_t * int xfs_unicode_read_cft(struct xfs_mount *mp); void xfs_unicode_free_cft(const xfs_cft_t *cft); +#ifdef CONFIG_XFS_UNICODE_NLS + #define xfs_is_using_nls(mp) ((mp)->m_nls != NULL) int xfs_unicode_to_nls(struct xfs_mount *mp, const uchar_t *uni_name, @@ -73,7 +75,20 @@ int xfs_nls_to_unicode(struct xfs_mount int nls_namelen, const uchar_t **uni_name, int *uni_namelen); void xfs_unicode_nls_free(const uchar_t *src_name, const uchar_t *conv_name); -#else +#else /* CONFIG_XFS_UNICODE_NLS */ + +#define xfs_is_using_nls(mp) 0 + +#define xfs_unicode_to_nls(mp, uname, ulen, pnname, pnlen) \ + ((*(pnname)) = (uname), (*(pnlen)) = (ulen), 0) +#define xfs_nls_to_unicode(mp, nname, nlen, puname, pulen) \ + ((*(puname)) = (nname), (*(pulen)) = (nlen), \ + xfs_unicode_validate(nname, nlen)) +#define xfs_unicode_nls_free(sname, cname) + +#endif /* CONFIG_XFS_UNICODE_NLS */ + +#else /* CONFIG_XFS_UNICODE */ #define xfs_unicode_nameops xfs_default_nameops #define xfs_unicode_ci_nameops xfs_default_nameops -- From owner-xfs@oss.sgi.com Tue Apr 1 23:26:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 23:27:24 -0700 (PDT) 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.7 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42, J_CHICKENPOX_43,J_CHICKENPOX_45,J_CHICKENPOX_47,J_CHICKENPOX_48 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 m326QYao006084 for ; Tue, 1 Apr 2008 23:26:36 -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 QAA23149; Wed, 2 Apr 2008 16:27:09 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id F1D1458C4C17; Wed, 2 Apr 2008 16:27:08 +1000 (EST) Message-Id: <20080402062708.654277049@chook.melbourne.sgi.com> References: <20080402062508.017738664@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Wed, 02 Apr 2008 16:25:12 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 4/7] XFS: Return case-insensitive match for dentry cache Content-Disposition: inline; filename=return_name.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15156 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs This implements the code to store the actual filename found during a lookup in the dentry cache and to avoid multiple entries in the dcache pointing to the same inode. It also introduces a new type, xfs_name, which is similar to the dentry cache's qstr type. It contains a pointer to a zone allocated string (MAXNAMELEN sized) and the length of the actual name. This string does not need to be NULL terminated (a counted string). xfs_name_t is only used in the lookup path for this patch, but may be used in other locations too if desired. It maybe desirable not to use xfs_name_t at all in the lookup functions but stick to separate parameters (which will mean 7 instead of 5 arguments). To avoid polluting the dcache, we implement a new directory inode operations for lookup. xfs_vn_ci_lookup() interacts directly with the dcache and the code was derived from ntfs_lookup() in fs/ntfs/namei.c. The dentry hash and compare overrides introduced in the ASCII-CI patch has been removed. The "actual name" is only allocated and returned for a case- insensitive match and not an actual match. Signed-off-by: Barry Naujok --- fs/xfs/linux-2.6/xfs_export.c | 2 fs/xfs/linux-2.6/xfs_iops.c | 165 +++++++++++++++++++++++++++++++----------- fs/xfs/linux-2.6/xfs_iops.h | 1 fs/xfs/linux-2.6/xfs_super.c | 5 + fs/xfs/linux-2.6/xfs_vnode.h | 1 fs/xfs/xfs_da_btree.c | 16 ++++ fs/xfs/xfs_da_btree.h | 13 +++ fs/xfs/xfs_dir2.c | 28 +++++-- fs/xfs/xfs_dir2.h | 4 - fs/xfs/xfs_dir2_block.c | 9 ++ fs/xfs/xfs_dir2_leaf.c | 9 ++ fs/xfs/xfs_dir2_node.c | 20 ++++- fs/xfs/xfs_dir2_sf.c | 13 +++ fs/xfs/xfs_rename.c | 5 + fs/xfs/xfs_utils.c | 12 ++- fs/xfs/xfs_utils.h | 6 + fs/xfs/xfs_vfsops.c | 2 fs/xfs/xfs_vnodeops.c | 15 +++ fs/xfs/xfs_vnodeops.h | 4 - 19 files changed, 264 insertions(+), 66 deletions(-) Index: kern_ci/fs/xfs/linux-2.6/xfs_export.c =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_export.c +++ kern_ci/fs/xfs/linux-2.6/xfs_export.c @@ -216,7 +216,7 @@ xfs_fs_get_parent( struct xfs_inode *cip; struct dentry *parent; - error = xfs_lookup(XFS_I(child->d_inode), &dotdot, &cip); + error = xfs_lookup(XFS_I(child->d_inode), &dotdot.d_name, &cip, NULL); if (unlikely(error)) return ERR_PTR(-error); Index: kern_ci/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_iops.c +++ kern_ci/fs/xfs/linux-2.6/xfs_iops.c @@ -375,27 +375,125 @@ xfs_vn_lookup( { struct xfs_inode *cip; int error; - struct xfs_mount *mp = XFS_I(dir)->i_mount; + + if (dentry->d_name.len >= MAXNAMELEN) + return ERR_PTR(-ENAMETOOLONG); + + error = xfs_lookup(XFS_I(dir), &dentry->d_name, &cip, NULL); + if (unlikely(error)) { + if (unlikely(error != ENOENT)) + return ERR_PTR(-error); + d_add(dentry, NULL); + return NULL; + } + + return d_splice_alias(cip->i_vnode, dentry); +} + +STATIC struct dentry * +xfs_vn_ci_lookup( + struct inode *dir, + struct dentry *dentry, + struct nameidata *nd) +{ + struct xfs_inode *cip; + int error; struct dentry *result; + struct qstr ci_name = {0, 0, NULL}; + struct inode *inode; if (dentry->d_name.len >= MAXNAMELEN) return ERR_PTR(-ENAMETOOLONG); - if (xfs_sb_version_hasoldci(&mp->m_sb)) - dentry->d_op = &xfs_ci_dentry_operations; + error = xfs_lookup(XFS_I(dir), &dentry->d_name, &cip, &ci_name); - error = xfs_lookup(XFS_I(dir), dentry, &cip); if (unlikely(error)) { if (unlikely(error != ENOENT)) return ERR_PTR(-error); d_add(dentry, NULL); return NULL; } + inode = cip->i_vnode; + + /* if exact match, just splice and exit */ + if (!ci_name.name) { + result = d_splice_alias(inode, dentry); + return result; + } - result = d_splice_alias(cip->i_vnode, dentry); - if (result) - result->d_op = dentry->d_op; - return result; + /* + * case-insensitive match, create a dentry to return and fill it + * in with the correctly cased name. Parameter "dentry" is not + * used anymore and the caller will free it. + * Derived from fs/ntfs/namei.c + */ + + ci_name.hash = full_name_hash(ci_name.name, ci_name.len); + + /* Does an existing dentry match? */ + result = d_lookup(dentry->d_parent, &ci_name); + if (!result) { + /* if not, create one */ + result = d_alloc(dentry->d_parent, &ci_name); + xfs_da_name_free((char *)ci_name.name); + if (!result) + return ERR_PTR(-ENOMEM); + dentry = d_splice_alias(inode, result); + if (dentry) { + dput(result); + return dentry; + } + return result; + } + xfs_da_name_free((char *)ci_name.name); + + /* an existing dentry matches, use it */ + + if (result->d_inode) { + /* + * already an inode attached, deref the inode that was + * refcounted with xfs_lookup and return the dentry. + */ + if (unlikely(result->d_inode != inode)) { + /* This can happen because bad inodes are unhashed. */ + BUG_ON(!is_bad_inode(inode)); + BUG_ON(!is_bad_inode(result->d_inode)); + } + iput(inode); + return result; + } + + if (!S_ISDIR(inode->i_mode)) { + /* not a directory, easy to handle */ + d_instantiate(result, inode); + return result; + } + + spin_lock(&dcache_lock); + if (list_empty(&inode->i_dentry)) { + /* + * Directory without a 'disconnected' dentry; we need to do + * d_instantiate() by hand because it takes dcache_lock which + * we already hold. + */ + list_add(&result->d_alias, &inode->i_dentry); + result->d_inode = inode; + spin_unlock(&dcache_lock); + security_d_instantiate(result, inode); + return result; + } + /* + * Directory with a 'disconnected' dentry; get a reference to the + * 'disconnected' dentry. + */ + dentry = list_entry(inode->i_dentry.next, struct dentry, d_alias); + dget_locked(dentry); + spin_unlock(&dcache_lock); + security_d_instantiate(result, inode); + d_move(dentry, result); + iput(inode); + dput(result); + return dentry; } STATIC int @@ -886,6 +984,25 @@ const struct inode_operations xfs_dir_in .removexattr = xfs_vn_removexattr, }; +const struct inode_operations xfs_dir_ci_inode_operations = { + .create = xfs_vn_create, + .lookup = xfs_vn_ci_lookup, + .link = xfs_vn_link, + .unlink = xfs_vn_unlink, + .symlink = xfs_vn_symlink, + .mkdir = xfs_vn_mkdir, + .rmdir = xfs_vn_rmdir, + .mknod = xfs_vn_mknod, + .rename = xfs_vn_rename, + .permission = xfs_vn_permission, + .getattr = xfs_vn_getattr, + .setattr = xfs_vn_setattr, + .setxattr = xfs_vn_setxattr, + .getxattr = xfs_vn_getxattr, + .listxattr = xfs_vn_listxattr, + .removexattr = xfs_vn_removexattr, +}; + const struct inode_operations xfs_symlink_inode_operations = { .readlink = generic_readlink, .follow_link = xfs_vn_follow_link, @@ -899,35 +1016,3 @@ const struct inode_operations xfs_symlin .removexattr = xfs_vn_removexattr, }; -STATIC int -xfs_ci_dentry_hash( - struct dentry *dir, - struct qstr *this) -{ - this->hash = xfs_dir_hashname(XFS_I(dir->d_inode), - this->name, this->len); - return 0; -} - -STATIC int -xfs_ci_dentry_compare( - struct dentry *dir, - struct qstr *a, - struct qstr *b) -{ - int result = xfs_dir_compname(XFS_I(dir->d_inode), a->name, a->len, - b->name, b->len) == XFS_CMP_DIFFERENT; - /* - * result == 0 if a match is found, and if so, copy the name in "b" - * to "a" to cope with negative dentries getting the correct name. - */ - if (result == 0) - memcpy((unsigned char *)a->name, b->name, a->len); - return result; -} - -struct dentry_operations xfs_ci_dentry_operations = -{ - .d_hash = xfs_ci_dentry_hash, - .d_compare = xfs_ci_dentry_compare, -}; Index: kern_ci/fs/xfs/linux-2.6/xfs_iops.h =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_iops.h +++ kern_ci/fs/xfs/linux-2.6/xfs_iops.h @@ -20,6 +20,7 @@ extern const struct inode_operations xfs_inode_operations; extern const struct inode_operations xfs_dir_inode_operations; +extern const struct inode_operations xfs_dir_ci_inode_operations; extern const struct inode_operations xfs_symlink_inode_operations; extern const struct file_operations xfs_file_operations; Index: kern_ci/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_super.c +++ kern_ci/fs/xfs/linux-2.6/xfs_super.c @@ -566,7 +566,10 @@ xfs_set_inodeops( inode->i_mapping->a_ops = &xfs_address_space_operations; break; case S_IFDIR: - inode->i_op = &xfs_dir_inode_operations; + inode->i_op = + xfs_sb_version_hasoldci(&XFS_I(inode)->i_mount->m_sb) ? + &xfs_dir_ci_inode_operations : + &xfs_dir_inode_operations; inode->i_fop = &xfs_dir_file_operations; break; case S_IFLNK: Index: kern_ci/fs/xfs/linux-2.6/xfs_vnode.h =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_vnode.h +++ kern_ci/fs/xfs/linux-2.6/xfs_vnode.h @@ -26,6 +26,7 @@ struct attrlist_cursor_kern; typedef struct dentry bhv_vname_t; typedef __u64 bhv_vnumber_t; typedef struct inode bhv_vnode_t; +typedef struct qstr bhv_vstr_t; #define VN_ISLNK(vp) S_ISLNK((vp)->i_mode) #define VN_ISREG(vp) S_ISREG((vp)->i_mode) Index: kern_ci/fs/xfs/xfs_da_btree.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.c +++ kern_ci/fs/xfs/xfs_da_btree.c @@ -2176,6 +2176,22 @@ xfs_da_reada_buf( return rval; } + +kmem_zone_t *xfs_da_name_zone; + +uchar_t * +xfs_da_name_alloc(void) +{ + return kmem_zone_zalloc(xfs_da_name_zone, KM_SLEEP); +} + +void +xfs_da_name_free(const uchar_t *name) +{ + kmem_zone_free(xfs_da_name_zone, (void *)name); +} + + kmem_zone_t *xfs_da_state_zone; /* anchor for state struct zone */ kmem_zone_t *xfs_dabuf_zone; /* dabuf zone */ Index: kern_ci/fs/xfs/xfs_da_btree.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.h +++ kern_ci/fs/xfs/xfs_da_btree.h @@ -224,6 +224,14 @@ typedef struct xfs_nameops { xfs_compname_t compname; } xfs_nameops_t; +/* + * Counted string for names, *name should be allocated and freed with + * xfs_da_name_alloc and xfs_da_name_free. len must not exceed MAXNAMELEN. + */ +typedef struct xfs_name { + const uchar_t *name; + int len; +} xfs_name_t; #ifdef __KERNEL__ /*======================================================================== @@ -277,6 +285,11 @@ uint xfs_da_hashname(const uchar_t *name xfs_dacmp_t xfs_da_compname(const uchar_t *name1, int len1, const uchar_t *name2, int len2); +/* returns/frees a MAXNAMELEN buffer from a zone */ +extern struct kmem_zone *xfs_da_name_zone; +uchar_t *xfs_da_name_alloc(void); +void xfs_da_name_free(const uchar_t *name); + xfs_da_state_t *xfs_da_state_alloc(void); void xfs_da_state_free(xfs_da_state_t *state); Index: kern_ci/fs/xfs/xfs_dir2.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -242,15 +242,16 @@ xfs_dir_createname( } /* - * Lookup a name in a directory, give back the inode number. + * Lookup a name in a directory, give back the inode number and also + * the actual name if a case-insensitive match. */ int xfs_dir_lookup( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, - xfs_ino_t *inum) /* out: inode number */ + xfs_name_t *name, + xfs_ino_t *inum, /* out: inode number */ + xfs_name_t *ci_name) /* out: actual name if different */ { xfs_da_args_t args; int rval; @@ -259,9 +260,9 @@ xfs_dir_lookup( ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); XFS_STATS_INC(xs_dir_lookup); - args.name = name; - args.namelen = namelen; - args.hashval = xfs_dir_hashname(dp, name, namelen); + args.name = name->name; + args.namelen = name->len; + args.hashval = xfs_dir_hashname(dp, name->name, name->len); args.inumber = 0; args.dp = dp; args.firstblock = NULL; @@ -272,6 +273,8 @@ xfs_dir_lookup( args.justcheck = args.addname = 0; args.oknoent = 1; args.cmpresult = XFS_CMP_DIFFERENT; + args.value = NULL; + args.valuelen = 0; if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) rval = xfs_dir2_sf_lookup(&args); @@ -287,8 +290,17 @@ xfs_dir_lookup( rval = xfs_dir2_node_lookup(&args); if (rval == EEXIST) rval = 0; - if (rval == 0) + if (rval == 0) { *inum = args.inumber; + if (args.value) { + ASSERT(args->cmpresult == XFS_CMP_CASE); + if (ci_name) { + ci_name->name = args.value; + ci_name->len = args.valuelen; + } else + xfs_da_name_free(args.value); + } + } return rval; } Index: kern_ci/fs/xfs/xfs_dir2.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.h +++ kern_ci/fs/xfs/xfs_dir2.h @@ -26,6 +26,7 @@ struct xfs_bmap_free; struct xfs_inode; struct xfs_mount; struct xfs_trans; +struct xfs_name; /* * Directory version 2. @@ -72,7 +73,8 @@ extern int xfs_dir_createname(struct xfs xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_lookup(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t *inum); + struct xfs_name *name, xfs_ino_t *inum, + struct xfs_name *ci_name); extern int xfs_dir_removename(struct xfs_trans *tp, struct xfs_inode *dp, char *name, int namelen, xfs_ino_t ino, xfs_fsblock_t *first, Index: kern_ci/fs/xfs/xfs_dir2_block.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_block.c +++ kern_ci/fs/xfs/xfs_dir2_block.c @@ -616,6 +616,15 @@ xfs_dir2_block_lookup( * Fill in inode number, release the block. */ args->inumber = be64_to_cpu(dep->inumber); + /* + * If a case-insensitive match, allocate a buffer and copy the actual + * name into the buffer. Return it via args->value. + */ + if (args->cmpresult == XFS_CMP_CASE) { + args->value = xfs_da_name_alloc(); + memcpy(args->value, dep->name, dep->namelen); + args->valuelen = dep->namelen; + } xfs_da_brelse(args->trans, bp); return XFS_ERROR(EEXIST); } Index: kern_ci/fs/xfs/xfs_dir2_leaf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_leaf.c +++ kern_ci/fs/xfs/xfs_dir2_leaf.c @@ -1301,6 +1301,15 @@ xfs_dir2_leaf_lookup( * Return the found inode number. */ args->inumber = be64_to_cpu(dep->inumber); + /* + * If a case-insensitive match, allocate a buffer and copy the actual + * name into the buffer. Return it via args->value. + */ + if (args->cmpresult == XFS_CMP_CASE) { + args->value = xfs_da_name_alloc(); + memcpy(args->value, dep->name, dep->namelen); + args->valuelen = dep->namelen; + } xfs_da_brelse(tp, dbp); xfs_da_brelse(tp, lbp); return XFS_ERROR(EEXIST); Index: kern_ci/fs/xfs/xfs_dir2_node.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_node.c +++ kern_ci/fs/xfs/xfs_dir2_node.c @@ -643,6 +643,8 @@ xfs_dir2_leafn_lookup_for_entry( xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); /* * Compare the entry, return it if it matches. + * "oknoent" is set for lookup and clear for + * remove and replace. */ cmp = args->oknoent ? xfs_dir_compname(dp, dep->name, dep->namelen, @@ -1857,10 +1859,22 @@ xfs_dir2_node_lookup( if (error) rval = error; /* - * If case-insensitive match was found in a leaf, return EEXIST. - */ - else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) + * If case-insensitive match was found (xfs_dir2_leafn_lookup_int + * returns ENOENT for a case-insensitive match, but sets + * args->cmpresult to XFS_CMP_CASE): + * - Allocate a buffer and copy the actual name into the buffer and + * return it via args->value. + * - set rval to EEXIST + */ + else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) { + xfs_dir2_data_entry_t *dep = (xfs_dir2_data_entry_t *) + ((char *)state->extrablk.bp->data + + state->extrablk.index); + args->value = xfs_da_name_alloc(); + memcpy(args->value, dep->name, dep->namelen); + args->valuelen = dep->namelen; rval = EEXIST; + } /* * Release the btree blocks and leaf block. */ Index: kern_ci/fs/xfs/xfs_dir2_sf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_sf.c +++ kern_ci/fs/xfs/xfs_dir2_sf.c @@ -815,6 +815,7 @@ xfs_dir2_sf_lookup( xfs_dir2_sf_entry_t *sfep; /* shortform directory entry */ xfs_dir2_sf_t *sfp; /* shortform structure */ xfs_dacmp_t cmp; /* comparison result */ + xfs_dir2_sf_entry_t *ci_sfep; /* case-insens. entry */ xfs_dir2_trace_args("sf_lookup", args); xfs_dir2_sf_check(args); @@ -852,6 +853,7 @@ xfs_dir2_sf_lookup( /* * Loop over all the entries trying to match ours. */ + ci_sfep = NULL; for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); i < sfp->hdr.count; i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { @@ -864,10 +866,19 @@ xfs_dir2_sf_lookup( xfs_dir2_sf_inumberp(sfep)); if (cmp == XFS_CMP_EXACT) return XFS_ERROR(EEXIST); + ci_sfep = sfep; } } - if (args->cmpresult == XFS_CMP_CASE) + if (args->cmpresult == XFS_CMP_CASE) { + /* + * If a case-insensitive match, allocate a buffer and copy the + * actual name into the buffer and return it via args->value. + */ + args->value = xfs_da_name_alloc(); + memcpy(args->value, ci_sfep->name, ci_sfep->namelen); + args->valuelen = ci_sfep->namelen; return XFS_ERROR(EEXIST); + } /* * Didn't find it. */ Index: kern_ci/fs/xfs/xfs_rename.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_rename.c +++ kern_ci/fs/xfs/xfs_rename.c @@ -100,6 +100,7 @@ xfs_lock_for_rename( int i, j; uint lock_mode; int diff_dirs = (dp1 != dp2); + xfs_name_t name2; ip2 = NULL; @@ -125,7 +126,9 @@ xfs_lock_for_rename( lock_mode = xfs_ilock_map_shared(dp2); } - error = xfs_dir_lookup_int(dp2, lock_mode, vname2, &inum2, &ip2); + name2.name = VNAME(vname2); + name2.len = VNAMELEN(vname2); + error = xfs_dir_lookup_int(dp2, lock_mode, &name2, &inum2, &ip2, NULL); if (error == ENOENT) { /* target does not need to exist. */ inum2 = 0; } else if (error) { Index: kern_ci/fs/xfs/xfs_utils.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_utils.c +++ kern_ci/fs/xfs/xfs_utils.c @@ -24,6 +24,7 @@ #include "xfs_trans.h" #include "xfs_sb.h" #include "xfs_ag.h" +#include "xfs_da_btree.h" #include "xfs_dir2.h" #include "xfs_dmapi.h" #include "xfs_mount.h" @@ -45,15 +46,16 @@ int xfs_dir_lookup_int( xfs_inode_t *dp, uint lock_mode, - bhv_vname_t *dentry, + xfs_name_t *name, xfs_ino_t *inum, - xfs_inode_t **ipp) + xfs_inode_t **ipp, + xfs_name_t *ci_name) { int error; xfs_itrace_entry(dp); - error = xfs_dir_lookup(NULL, dp, VNAME(dentry), VNAMELEN(dentry), inum); + error = xfs_dir_lookup(NULL, dp, name, inum, ci_name); if (!error) { /* * Unlock the directory. We do this because we can't @@ -80,6 +82,10 @@ xfs_dir_lookup_int( xfs_ilock(dp, lock_mode); error = XFS_ERROR(ENOENT); } + if (error && ci_name && ci_name->name) { + xfs_da_name_free(ci_name->name); + ci_name->name = NULL; + } } return error; } Index: kern_ci/fs/xfs/xfs_utils.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_utils.h +++ kern_ci/fs/xfs/xfs_utils.h @@ -18,11 +18,13 @@ #ifndef __XFS_UTILS_H__ #define __XFS_UTILS_H__ +struct xfs_name; + #define IRELE(ip) VN_RELE(XFS_ITOV(ip)) #define IHOLD(ip) VN_HOLD(XFS_ITOV(ip)) -extern int xfs_dir_lookup_int (xfs_inode_t *, uint, bhv_vname_t *, xfs_ino_t *, - xfs_inode_t **); +extern int xfs_dir_lookup_int (xfs_inode_t *, uint, struct xfs_name *, + xfs_ino_t *, xfs_inode_t **, struct xfs_name *); extern int xfs_truncate_file (xfs_mount_t *, xfs_inode_t *); extern int xfs_dir_ialloc (xfs_trans_t **, xfs_inode_t *, mode_t, xfs_nlink_t, xfs_dev_t, cred_t *, prid_t, int, Index: kern_ci/fs/xfs/xfs_vfsops.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_vfsops.c +++ kern_ci/fs/xfs/xfs_vfsops.c @@ -74,6 +74,7 @@ xfs_init(void) xfs_btree_cur_zone = kmem_zone_init(sizeof(xfs_btree_cur_t), "xfs_btree_cur"); xfs_trans_zone = kmem_zone_init(sizeof(xfs_trans_t), "xfs_trans"); + xfs_da_name_zone = kmem_zone_init(MAXNAMELEN, "xfs_da_name"); xfs_da_state_zone = kmem_zone_init(sizeof(xfs_da_state_t), "xfs_da_state"); xfs_dabuf_zone = kmem_zone_init(sizeof(xfs_dabuf_t), "xfs_dabuf"); @@ -177,6 +178,7 @@ xfs_cleanup(void) kmem_zone_destroy(xfs_btree_cur_zone); kmem_zone_destroy(xfs_inode_zone); kmem_zone_destroy(xfs_trans_zone); + kmem_zone_destroy(xfs_da_name_zone); kmem_zone_destroy(xfs_da_state_zone); kmem_zone_destroy(xfs_dabuf_zone); kmem_zone_destroy(xfs_buf_item_zone); Index: kern_ci/fs/xfs/xfs_vnodeops.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_vnodeops.c +++ kern_ci/fs/xfs/xfs_vnodeops.c @@ -1762,24 +1762,33 @@ xfs_inactive( int xfs_lookup( xfs_inode_t *dp, - bhv_vname_t *dentry, - xfs_inode_t **ipp) + bhv_vstr_t *d_name, + xfs_inode_t **ipp, + bhv_vstr_t *ci_name) { xfs_inode_t *ip; xfs_ino_t e_inum; int error; uint lock_mode; + xfs_name_t name, rname; xfs_itrace_entry(dp); if (XFS_FORCED_SHUTDOWN(dp->i_mount)) return XFS_ERROR(EIO); + name.name = (uchar_t *)d_name->name; + name.len = d_name->len; + rname.name = NULL; lock_mode = xfs_ilock_map_shared(dp); - error = xfs_dir_lookup_int(dp, lock_mode, dentry, &e_inum, &ip); + error = xfs_dir_lookup_int(dp, lock_mode, &name, &e_inum, &ip, &rname); if (!error) { *ipp = ip; xfs_itrace_ref(ip); + if (rname.name) { + ci_name->name = rname.name; + ci_name->len = rname.len; + } } xfs_iunlock_map_shared(dp, lock_mode); return error; Index: kern_ci/fs/xfs/xfs_vnodeops.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_vnodeops.h +++ kern_ci/fs/xfs/xfs_vnodeops.h @@ -23,8 +23,8 @@ int xfs_fsync(struct xfs_inode *ip, int xfs_off_t stop); int xfs_release(struct xfs_inode *ip); int xfs_inactive(struct xfs_inode *ip); -int xfs_lookup(struct xfs_inode *dp, bhv_vname_t *dentry, - struct xfs_inode **ipp); +int xfs_lookup(struct xfs_inode *dp, bhv_vstr_t *d_name, + struct xfs_inode **ipp, bhv_vstr_t *ci_name); int xfs_create(struct xfs_inode *dp, bhv_vname_t *dentry, mode_t mode, xfs_dev_t rdev, struct xfs_inode **ipp, struct cred *credp); int xfs_remove(struct xfs_inode *dp, bhv_vname_t *dentry); -- From owner-xfs@oss.sgi.com Tue Apr 1 23:26:53 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 23:27:24 -0700 (PDT) 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.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42, J_CHICKENPOX_45,J_CHICKENPOX_47,J_CHICKENPOX_63 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 m326QYnT006085 for ; Tue, 1 Apr 2008 23:26:36 -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 QAA23143; Wed, 2 Apr 2008 16:27:08 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 0D41058C4C11; Wed, 2 Apr 2008 16:27:08 +1000 (EST) Message-Id: <20080402062707.797672682@chook.melbourne.sgi.com> References: <20080402062508.017738664@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Wed, 02 Apr 2008 16:25:09 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 1/7] XFS: Name operation vector for hash and compare Content-Disposition: inline; filename=nameops.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15157 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Adds two pieces of functionality for the basis of case-insensitive support in XFS: 1. A comparison result enumerated type: xfs_dacmp_t. It represents an exact match, case-insensitive match or no match at all. This patch only implements different and exact results. 2. xfs_nameops vector for specifying how to perform the hash generation of filenames and comparision methods. In this patch the hash vector points to the existing xfs_da_hashname function and the comparison method does a length compare, and if the same, does a memcmp and return the xfs_dacmp_t result. All filename functions that use the hash (create, lookup remove, rename, etc) now use the xfs_nameops.hashname function and all directory lookup functions also use the xfs_nameops.compname function. The lookup functions also handle case-insensitive results even though the default comparison function cannot return that. And important aspect of the lookup functions is that an exact match always has precedence over a case-insensitive. So while a case-insensitive match is found, we have to keep looking just in case there is an exact match. In the meantime, the info for the first case-insensitive match is retained if no exact match is found. Signed-off-by: Barry Naujok --- fs/xfs/xfs_da_btree.c | 12 ++++++++++++ fs/xfs/xfs_da_btree.h | 28 ++++++++++++++++++++++++++++ fs/xfs/xfs_dir2.c | 12 +++++++----- fs/xfs/xfs_dir2.h | 6 ++++++ fs/xfs/xfs_dir2_block.c | 29 ++++++++++++++++++++++------- fs/xfs/xfs_dir2_data.c | 3 ++- fs/xfs/xfs_dir2_leaf.c | 47 ++++++++++++++++++++++++++++++++++++++++------- fs/xfs/xfs_dir2_node.c | 45 +++++++++++++++++++++++++++++++-------------- fs/xfs/xfs_dir2_sf.c | 26 ++++++++++++++++---------- fs/xfs/xfs_mount.h | 2 ++ 10 files changed, 166 insertions(+), 44 deletions(-) Index: kern_ci/fs/xfs/xfs_da_btree.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.c +++ kern_ci/fs/xfs/xfs_da_btree.c @@ -1530,6 +1530,18 @@ xfs_da_hashname(const uchar_t *name, int } } +xfs_dacmp_t +xfs_da_compname(const uchar_t *name1, int len1, const uchar_t *name2, int len2) +{ + return (len1 == len2 && memcmp(name1, name2, len1) == 0) ? + XFS_CMP_EXACT : XFS_CMP_DIFFERENT; +} + +struct xfs_nameops xfs_default_nameops = { + .hashname = xfs_da_hashname, + .compname = xfs_da_compname +}; + /* * Add a block to the btree ahead of the file. * Return the new block number to the caller. Index: kern_ci/fs/xfs/xfs_da_btree.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.h +++ kern_ci/fs/xfs/xfs_da_btree.h @@ -99,6 +99,15 @@ typedef struct xfs_da_node_entry xfs_da_ *========================================================================*/ /* + * Search comparison results + */ +typedef enum { + XFS_CMP_DIFFERENT, /* names are completely different */ + XFS_CMP_EXACT, /* names are exactly the same */ + XFS_CMP_CASE /* names are same but differ in case */ +} xfs_dacmp_t; + +/* * Structure to ease passing around component names. */ typedef struct xfs_da_args { @@ -127,6 +136,7 @@ typedef struct xfs_da_args { unsigned char rename; /* T/F: this is an atomic rename op */ unsigned char addname; /* T/F: this is an add operation */ unsigned char oknoent; /* T/F: ok to return ENOENT, else die */ + xfs_dacmp_t cmpresult; /* name compare result for lookups */ } xfs_da_args_t; /* @@ -201,6 +211,19 @@ typedef struct xfs_da_state { (uint)(XFS_DA_LOGOFF(BASE, ADDR)), \ (uint)(XFS_DA_LOGOFF(BASE, ADDR)+(SIZE)-1) +/* + * Name ops for directory and/or attr name operations + */ + +typedef xfs_dahash_t (*xfs_hashname_t)(const uchar_t *, int); +typedef xfs_dacmp_t (*xfs_compname_t)(const uchar_t *, int, + const uchar_t *, int); + +typedef struct xfs_nameops { + xfs_hashname_t hashname; + xfs_compname_t compname; +} xfs_nameops_t; + #ifdef __KERNEL__ /*======================================================================== @@ -248,7 +271,12 @@ xfs_daddr_t xfs_da_reada_buf(struct xfs_ int xfs_da_shrink_inode(xfs_da_args_t *args, xfs_dablk_t dead_blkno, xfs_dabuf_t *dead_buf); +extern struct xfs_nameops xfs_default_nameops; + uint xfs_da_hashname(const uchar_t *name_string, int name_length); +xfs_dacmp_t xfs_da_compname(const uchar_t *name1, int len1, + const uchar_t *name2, int len2); + xfs_da_state_t *xfs_da_state_alloc(void); void xfs_da_state_free(xfs_da_state_t *state); Index: kern_ci/fs/xfs/xfs_dir2.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -64,6 +64,7 @@ xfs_dir_mount( (mp->m_dirblksize - (uint)sizeof(xfs_da_node_hdr_t)) / (uint)sizeof(xfs_da_node_entry_t); mp->m_dir_magicpct = (mp->m_dirblksize * 37) / 100; + mp->m_dirnameops = &xfs_default_nameops; } /* @@ -164,7 +165,7 @@ xfs_dir_createname( args.name = name; args.namelen = namelen; - args.hashval = xfs_da_hashname(name, namelen); + args.hashval = xfs_dir_hashname(dp, name, namelen); args.inumber = inum; args.dp = dp; args.firstblock = first; @@ -210,7 +211,7 @@ xfs_dir_lookup( args.name = name; args.namelen = namelen; - args.hashval = xfs_da_hashname(name, namelen); + args.hashval = xfs_dir_hashname(dp, name, namelen); args.inumber = 0; args.dp = dp; args.firstblock = NULL; @@ -220,6 +221,7 @@ xfs_dir_lookup( args.trans = tp; args.justcheck = args.addname = 0; args.oknoent = 1; + args.cmpresult = XFS_CMP_DIFFERENT; if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) rval = xfs_dir2_sf_lookup(&args); @@ -263,7 +265,7 @@ xfs_dir_removename( args.name = name; args.namelen = namelen; - args.hashval = xfs_da_hashname(name, namelen); + args.hashval = xfs_dir_hashname(dp, name, namelen); args.inumber = ino; args.dp = dp; args.firstblock = first; @@ -347,7 +349,7 @@ xfs_dir_replace( args.name = name; args.namelen = namelen; - args.hashval = xfs_da_hashname(name, namelen); + args.hashval = xfs_dir_hashname(dp, name, namelen); args.inumber = inum; args.dp = dp; args.firstblock = first; @@ -390,7 +392,7 @@ xfs_dir_canenter( args.name = name; args.namelen = namelen; - args.hashval = xfs_da_hashname(name, namelen); + args.hashval = xfs_dir_hashname(dp, name, namelen); args.inumber = 0; args.dp = dp; args.firstblock = NULL; Index: kern_ci/fs/xfs/xfs_dir2.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.h +++ kern_ci/fs/xfs/xfs_dir2.h @@ -85,6 +85,12 @@ extern int xfs_dir_canenter(struct xfs_t char *name, int namelen); extern int xfs_dir_ino_validate(struct xfs_mount *mp, xfs_ino_t ino); +#define xfs_dir_hashname(dp, n, l) \ + ((dp)->i_mount->m_dirnameops->hashname((n), (l))) + +#define xfs_dir_compname(dp, n1, l1, n2, l2) \ + ((dp)->i_mount->m_dirnameops->compname((n1), (l1), (n2), (l2))) + /* * Utility routines for v2 directories. */ Index: kern_ci/fs/xfs/xfs_dir2_block.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_block.c +++ kern_ci/fs/xfs/xfs_dir2_block.c @@ -643,6 +643,7 @@ xfs_dir2_block_lookup_int( int mid; /* binary search current idx */ xfs_mount_t *mp; /* filesystem mount point */ xfs_trans_t *tp; /* transaction pointer */ + xfs_dacmp_t cmp; /* comparison result */ dp = args->dp; tp = args->trans; @@ -698,19 +699,33 @@ xfs_dir2_block_lookup_int( ((char *)block + xfs_dir2_dataptr_to_off(mp, addr)); /* * Compare, if it's right give back buffer & entry number. + * + * lookup case - use nameops; + * + * replace/remove case - as lookup has been already been + * performed, look for an exact match using the fast method */ - if (dep->namelen == args->namelen && - dep->name[0] == args->name[0] && - memcmp(dep->name, args->name, args->namelen) == 0) { + cmp = args->oknoent ? + xfs_dir_compname(dp, dep->name, dep->namelen, + args->name, args->namelen) : + xfs_da_compname(dep->name, dep->namelen, + args->name, args->namelen); + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { + args->cmpresult = cmp; *bpp = bp; *entno = mid; - return 0; + if (cmp == XFS_CMP_EXACT) + return 0; } - } while (++mid < be32_to_cpu(btp->count) && be32_to_cpu(blp[mid].hashval) == hash); + } while (++mid < be32_to_cpu(btp->count) && + be32_to_cpu(blp[mid].hashval) == hash); + + ASSERT(args->oknoent); + if (args->cmpresult == XFS_CMP_CASE) + return 0; /* * No match, release the buffer and return ENOENT. */ - ASSERT(args->oknoent); xfs_da_brelse(tp, bp); return XFS_ERROR(ENOENT); } @@ -1187,7 +1202,7 @@ xfs_dir2_sf_to_block( tagp = xfs_dir2_data_entry_tag_p(dep); *tagp = cpu_to_be16((char *)dep - (char *)block); xfs_dir2_data_log_entry(tp, bp, dep); - blp[2 + i].hashval = cpu_to_be32(xfs_da_hashname( + blp[2 + i].hashval = cpu_to_be32(xfs_dir_hashname(dp, (char *)sfep->name, sfep->namelen)); blp[2 + i].address = cpu_to_be32(xfs_dir2_byte_to_dataptr(mp, (char *)dep - (char *)block)); Index: kern_ci/fs/xfs/xfs_dir2_data.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_data.c +++ kern_ci/fs/xfs/xfs_dir2_data.c @@ -140,7 +140,8 @@ xfs_dir2_data_check( addr = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk, (xfs_dir2_data_aoff_t) ((char *)dep - (char *)d)); - hash = xfs_da_hashname((char *)dep->name, dep->namelen); + hash = xfs_dir_hashname(dp, (char *)dep->name, + dep->namelen); for (i = 0; i < be32_to_cpu(btp->count); i++) { if (be32_to_cpu(lep[i].address) == addr && be32_to_cpu(lep[i].hashval) == hash) Index: kern_ci/fs/xfs/xfs_dir2_leaf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_leaf.c +++ kern_ci/fs/xfs/xfs_dir2_leaf.c @@ -1331,6 +1331,8 @@ xfs_dir2_leaf_lookup_int( xfs_mount_t *mp; /* filesystem mount point */ xfs_dir2_db_t newdb; /* new data block number */ xfs_trans_t *tp; /* transaction pointer */ + xfs_dabuf_t *cbp; /* case match data buffer */ + xfs_dacmp_t cmp; /* name compare result */ dp = args->dp; tp = args->trans; @@ -1354,6 +1356,7 @@ xfs_dir2_leaf_lookup_int( * Loop over all the entries with the right hash value * looking to match the name. */ + cbp = NULL; for (lep = &leaf->ents[index], dbp = NULL, curdb = -1; index < be16_to_cpu(leaf->hdr.count) && be32_to_cpu(lep->hashval) == args->hashval; lep++, index++) { @@ -1371,7 +1374,7 @@ xfs_dir2_leaf_lookup_int( * need to pitch the old one and read the new one. */ if (newdb != curdb) { - if (dbp) + if (dbp != cbp) xfs_da_brelse(tp, dbp); if ((error = xfs_da_read_buf(tp, dp, @@ -1391,19 +1394,49 @@ xfs_dir2_leaf_lookup_int( xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); /* * If it matches then return it. + * + * lookup case - use nameops; + * + * replace/remove case - as lookup has been already been + * performed, look for an exact match using the fast method */ - if (dep->namelen == args->namelen && - dep->name[0] == args->name[0] && - memcmp(dep->name, args->name, args->namelen) == 0) { - *dbpp = dbp; + cmp = args->oknoent ? + xfs_dir_compname(dp, dep->name, dep->namelen, + args->name, args->namelen) : + xfs_da_compname(dep->name, dep->namelen, + args->name, args->namelen); + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { + args->cmpresult = cmp; *indexp = index; - return 0; + if (cmp == XFS_CMP_EXACT) { + /* + * case exact match: release the case-insens. + * match buffer if it exists and return the + * current data buffer. + */ + if (cbp && cbp != dbp) + xfs_da_brelse(tp, cbp); + *dbpp = dbp; + return 0; + } + cbp = dbp; } } + ASSERT(args->oknoent); + if (args->cmpresult == XFS_CMP_CASE) { + /* + * case-insensitive match: release current buffer and + * return the buffer with the case-insensitive match. + */ + if (cbp != dbp) + xfs_da_brelse(tp, dbp); + *dbpp = cbp; + return 0; + } /* * No match found, return ENOENT. */ - ASSERT(args->oknoent); + ASSERT(cbp == NULL); if (dbp) xfs_da_brelse(tp, dbp); xfs_da_brelse(tp, lbp); Index: kern_ci/fs/xfs/xfs_dir2_node.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_node.c +++ kern_ci/fs/xfs/xfs_dir2_node.c @@ -414,6 +414,7 @@ xfs_dir2_leafn_lookup_int( xfs_dir2_db_t newdb; /* new data block number */ xfs_dir2_db_t newfdb; /* new free block number */ xfs_trans_t *tp; /* transaction pointer */ + xfs_dacmp_t cmp; /* comparison result */ dp = args->dp; tp = args->trans; @@ -578,19 +579,27 @@ xfs_dir2_leafn_lookup_int( /* * Compare the entry, return it if it matches. */ - if (dep->namelen == args->namelen && - dep->name[0] == args->name[0] && - memcmp(dep->name, args->name, args->namelen) == 0) { + cmp = args->oknoent ? + xfs_dir_compname(dp, dep->name, dep->namelen, + args->name, args->namelen): + xfs_da_compname(dep->name, dep->namelen, + args->name, args->namelen); + if (cmp != XFS_CMP_DIFFERENT && + cmp != args->cmpresult) { + args->cmpresult = cmp; args->inumber = be64_to_cpu(dep->inumber); *indexp = index; - state->extravalid = 1; - state->extrablk.bp = curbp; - state->extrablk.blkno = curdb; - state->extrablk.index = - (int)((char *)dep - - (char *)curbp->data); - state->extrablk.magic = XFS_DIR2_DATA_MAGIC; - return XFS_ERROR(EEXIST); + if (cmp == XFS_CMP_EXACT) { + state->extravalid = 1; + state->extrablk.blkno = curdb; + state->extrablk.index = + (int)((char *)dep - + (char *)curbp->data); + state->extrablk.magic = + XFS_DIR2_DATA_MAGIC; + state->extrablk.bp = curbp; + return XFS_ERROR(EEXIST); + } } } } @@ -618,6 +627,14 @@ xfs_dir2_leafn_lookup_int( } } /* + * For lookup (where args->oknoent is set, and args->addname is not + * set, the state->extrablk info is not used, just freed. + */ + if (args->cmpresult == XFS_CMP_CASE) { + ASSERT(!args->addname); + return XFS_ERROR(EEXIST); + } + /* * Return the final index, that will be the insertion point. */ *indexp = index; @@ -823,9 +840,9 @@ xfs_dir2_leafn_rebalance( */ if (!state->inleaf) blk2->index = blk1->index - be16_to_cpu(leaf1->hdr.count); - - /* - * Finally sanity check just to make sure we are not returning a negative index + + /* + * Finally sanity check just to make sure we are not returning a negative index */ if(blk2->index < 0) { state->inleaf = 1; Index: kern_ci/fs/xfs/xfs_dir2_sf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_sf.c +++ kern_ci/fs/xfs/xfs_dir2_sf.c @@ -814,6 +814,7 @@ xfs_dir2_sf_lookup( int i; /* entry index */ xfs_dir2_sf_entry_t *sfep; /* shortform directory entry */ xfs_dir2_sf_t *sfp; /* shortform structure */ + xfs_dacmp_t cmp; /* comparison result */ xfs_dir2_trace_args("sf_lookup", args); xfs_dir2_sf_check(args); @@ -836,6 +837,7 @@ xfs_dir2_sf_lookup( */ if (args->namelen == 1 && args->name[0] == '.') { args->inumber = dp->i_ino; + args->cmpresult = XFS_CMP_EXACT; return XFS_ERROR(EEXIST); } /* @@ -844,6 +846,7 @@ xfs_dir2_sf_lookup( if (args->namelen == 2 && args->name[0] == '.' && args->name[1] == '.') { args->inumber = xfs_dir2_sf_get_inumber(sfp, &sfp->hdr.parent); + args->cmpresult = XFS_CMP_EXACT; return XFS_ERROR(EEXIST); } /* @@ -852,15 +855,19 @@ xfs_dir2_sf_lookup( for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); i < sfp->hdr.count; i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { - if (sfep->namelen == args->namelen && - sfep->name[0] == args->name[0] && - memcmp(args->name, sfep->name, args->namelen) == 0) { + cmp = xfs_dir_compname(dp, sfep->name, sfep->namelen, + args->name, args->namelen); + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { + args->cmpresult = cmp; args->inumber = xfs_dir2_sf_get_inumber(sfp, xfs_dir2_sf_inumberp(sfep)); - return XFS_ERROR(EEXIST); + if (cmp == XFS_CMP_EXACT) + return XFS_ERROR(EEXIST); } } + if (args->cmpresult == XFS_CMP_CASE) + return XFS_ERROR(EEXIST); /* * Didn't find it. */ @@ -907,9 +914,8 @@ xfs_dir2_sf_removename( for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); i < sfp->hdr.count; i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { - if (sfep->namelen == args->namelen && - sfep->name[0] == args->name[0] && - memcmp(sfep->name, args->name, args->namelen) == 0) { + if (xfs_da_compname(sfep->name, sfep->namelen, + args->name, args->namelen) == XFS_CMP_EXACT) { ASSERT(xfs_dir2_sf_get_inumber(sfp, xfs_dir2_sf_inumberp(sfep)) == args->inumber); @@ -1044,9 +1050,9 @@ xfs_dir2_sf_replace( for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); i < sfp->hdr.count; i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { - if (sfep->namelen == args->namelen && - sfep->name[0] == args->name[0] && - memcmp(args->name, sfep->name, args->namelen) == 0) { + if (xfs_da_compname(sfep->name, sfep->namelen, + args->name, args->namelen) == + XFS_CMP_EXACT) { #if XFS_BIG_INUMS || defined(DEBUG) ino = xfs_dir2_sf_get_inumber(sfp, xfs_dir2_sf_inumberp(sfep)); Index: kern_ci/fs/xfs/xfs_mount.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_mount.h +++ kern_ci/fs/xfs/xfs_mount.h @@ -61,6 +61,7 @@ struct xfs_bmap_free; struct xfs_extdelta; struct xfs_swapext; struct xfs_mru_cache; +struct xfs_nameops; /* * Prototypes and functions for the Data Migration subsystem. @@ -312,6 +313,7 @@ typedef struct xfs_mount { __uint8_t m_inode_quiesce;/* call quiesce on new inodes. field governed by m_ilock */ __uint8_t m_sectbb_log; /* sectlog - BBSHIFT */ + struct xfs_nameops *m_dirnameops; /* vector of dir name ops */ int m_dirblksize; /* directory block sz--bytes */ int m_dirblkfsbs; /* directory block sz--fsbs */ xfs_dablk_t m_dirdatablk; /* blockno of dir data v2 */ -- From owner-xfs@oss.sgi.com Tue Apr 1 23:27:10 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 23:27:23 -0700 (PDT) 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.6 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42, J_CHICKENPOX_43,J_CHICKENPOX_51,J_CHICKENPOX_53,J_CHICKENPOX_61, J_CHICKENPOX_62,J_CHICKENPOX_65,J_CHICKENPOX_66 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 m326QYuC006086 for ; Tue, 1 Apr 2008 23:26:36 -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 QAA23152; Wed, 2 Apr 2008 16:27:09 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 4112E58C4C18; Wed, 2 Apr 2008 16:27:09 +1000 (EST) Message-Id: <20080402062709.011126702@chook.melbourne.sgi.com> References: <20080402062508.017738664@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Wed, 02 Apr 2008 16:25:13 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation Content-Disposition: inline; filename=unicode_ci.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15155 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs This is the core of the case-insensitive support - supporting and enforcing UTF-8 (Unicode) filenames. All filename and user-level extended attribute names are checked for UTF-8 compliance and the hashes generated are always case-insensitive by utilising the Unicode 5.0 standard case-folding table from: http://www.unicode.org/Public/UNIDATA/CaseFolding.txt As the hash is always case-insensitive, this allows the user to mkfs.xfs the filesystem once and enable or disable (default) case-insensitive support by a mount option "-o ci". The mount option specifies which xfs_nameops.compname function to use. Also, the Unicode support is a CONFIG option so users who do not required this functionality can CONFIG it to N. As the case-folding table is stored on disk, this allows backwards and forwards compatibility and languages like Turkic to support true case-insensitivity with I and i. To create a Unicode filesystem with case-insensitive mount support, run: # mkfs.xfs -n utf8[=default|turkic] The final patches implement NLS support for XFS Unicode. Signed-off-by: Barry Naujok --- fs/xfs/Kconfig | 17 + fs/xfs/Makefile | 4 fs/xfs/linux-2.6/xfs_linux.h | 1 fs/xfs/linux-2.6/xfs_super.c | 14 + fs/xfs/linux-2.6/xfs_super.h | 7 fs/xfs/xfs_attr.c | 24 ++ fs/xfs/xfs_clnt.h | 2 fs/xfs/xfs_da_btree.c | 18 + fs/xfs/xfs_da_btree.h | 16 - fs/xfs/xfs_dir2.c | 13 - fs/xfs/xfs_dir2.h | 5 fs/xfs/xfs_fs.h | 1 fs/xfs/xfs_fsops.c | 4 fs/xfs/xfs_itable.c | 2 fs/xfs/xfs_mount.c | 21 + fs/xfs/xfs_mount.h | 7 fs/xfs/xfs_rename.c | 9 fs/xfs/xfs_sb.h | 29 ++ fs/xfs/xfs_unicode.c | 499 +++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_unicode.h | 81 ++++++ fs/xfs/xfs_vfsops.c | 16 + fs/xfs/xfs_vnodeops.c | 52 ++++ 22 files changed, 808 insertions(+), 34 deletions(-) Index: kern_ci/fs/xfs/Kconfig =================================================================== --- kern_ci.orig/fs/xfs/Kconfig +++ kern_ci/fs/xfs/Kconfig @@ -72,6 +72,21 @@ config XFS_POSIX_ACL If you don't know what Access Control Lists are, say N. +config XFS_UNICODE + bool "XFS Unicode support" + depends on XFS_FS + help + Unicode support enforces UTF-8 filenames and user extended + attribute names. This option is required for filesystems + mkfs'ed with UTF-8 support. A Unicode filesystem guarantees + that filenames will be the same regardless of the user's + locale. For UTF-8 locales, no conversion is required. + + Unicode filesystems also allow the filesystem to be mounted with + case-insensitive lookup support with the "-o ci" mount option. + + If you don't require UTF-8 enforcement, say N. + config XFS_RT bool "XFS Realtime subvolume support" depends on XFS_FS @@ -107,7 +122,7 @@ config XFS_TRACE bool "XFS Tracing support (EXPERIMENTAL)" depends on XFS_FS && EXPERIMENTAL help - Say Y here to get an XFS build with activity tracing enabled. + Say Y here to get an XFS build with activity tracing enabled. Enabling this option will attach historical information to XFS inodes, buffers, certain locks, the log, the IO path, and a few other key areas within XFS. These traces can be examined Index: kern_ci/fs/xfs/Makefile =================================================================== --- kern_ci.orig/fs/xfs/Makefile +++ kern_ci/fs/xfs/Makefile @@ -30,11 +30,11 @@ obj-$(CONFIG_XFS_DMAPI) += dmapi/ xfs-$(CONFIG_XFS_RT) += xfs_rtalloc.o xfs-$(CONFIG_XFS_POSIX_ACL) += xfs_acl.o +xfs-$(CONFIG_XFS_UNICODE) += xfs_unicode.o xfs-$(CONFIG_PROC_FS) += $(XFS_LINUX)/xfs_stats.o xfs-$(CONFIG_SYSCTL) += $(XFS_LINUX)/xfs_sysctl.o xfs-$(CONFIG_COMPAT) += $(XFS_LINUX)/xfs_ioctl32.o - xfs-y += xfs_alloc.o \ xfs_alloc_btree.o \ xfs_attr.o \ @@ -97,7 +97,7 @@ xfs-y += $(addprefix $(XFS_LINUX)/, \ xfs_lrw.o \ xfs_super.o \ xfs_vnode.o \ - xfs_ksyms.o) + xfs_ksyms.o) # Objects in support/ xfs-y += $(addprefix support/, \ Index: kern_ci/fs/xfs/linux-2.6/xfs_linux.h =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_linux.h +++ kern_ci/fs/xfs/linux-2.6/xfs_linux.h @@ -76,6 +76,7 @@ #include #include #include +#include #include #include Index: kern_ci/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_super.c +++ kern_ci/fs/xfs/linux-2.6/xfs_super.c @@ -46,6 +46,7 @@ #include "xfs_acl.h" #include "xfs_attr.h" #include "xfs_buf_item.h" +#include "xfs_unicode.h" #include "xfs_utils.h" #include "xfs_vnodeops.h" #include "xfs_vfsops.h" @@ -124,6 +125,7 @@ xfs_args_allocate( #define MNTOPT_ATTR2 "attr2" /* do use attr2 attribute format */ #define MNTOPT_NOATTR2 "noattr2" /* do not use attr2 attribute format */ #define MNTOPT_FILESTREAM "filestreams" /* use filestreams allocator */ +#define MNTOPT_CILOOKUP "ci" /* case-insensitive dir lookup */ #define MNTOPT_QUOTA "quota" /* disk quotas (user) */ #define MNTOPT_NOQUOTA "noquota" /* no quotas */ #define MNTOPT_USRQUOTA "usrquota" /* user quota enabled */ @@ -318,6 +320,14 @@ xfs_parseargs( args->flags &= ~XFSMNT_ATTR2; } else if (!strcmp(this_char, MNTOPT_FILESTREAM)) { args->flags2 |= XFSMNT2_FILESTREAMS; + } else if (!strcmp(this_char, MNTOPT_CILOOKUP)) { + args->flags2 |= XFSMNT2_CILOOKUP; +#ifndef CONFIG_XFS_UNICODE + cmn_err(CE_WARN, + "XFS: %s option requires Unicode support", + this_char); + return EINVAL; +#endif } else if (!strcmp(this_char, MNTOPT_NOQUOTA)) { args->flags &= ~(XFSMNT_UQUOTAENF|XFSMNT_UQUOTA); args->flags &= ~(XFSMNT_GQUOTAENF|XFSMNT_GQUOTA); @@ -458,6 +468,7 @@ xfs_showargs( { XFS_MOUNT_OSYNCISOSYNC, "," MNTOPT_OSYNCISOSYNC }, { XFS_MOUNT_ATTR2, "," MNTOPT_ATTR2 }, { XFS_MOUNT_FILESTREAMS, "," MNTOPT_FILESTREAM }, + { XFS_MOUNT_CILOOKUP, "," MNTOPT_CILOOKUP }, { XFS_MOUNT_DMAPI, "," MNTOPT_DMAPI }, { XFS_MOUNT_GRPID, "," MNTOPT_GRPID }, { 0, NULL } @@ -567,7 +578,8 @@ xfs_set_inodeops( break; case S_IFDIR: inode->i_op = - xfs_sb_version_hasoldci(&XFS_I(inode)->i_mount->m_sb) ? + xfs_sb_version_hasoldci(&XFS_I(inode)->i_mount->m_sb) || + (XFS_I(inode)->i_mount->m_flags & XFS_MOUNT_CILOOKUP) ? &xfs_dir_ci_inode_operations : &xfs_dir_inode_operations; inode->i_fop = &xfs_dir_file_operations; Index: kern_ci/fs/xfs/linux-2.6/xfs_super.h =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_super.h +++ kern_ci/fs/xfs/linux-2.6/xfs_super.h @@ -36,6 +36,12 @@ # define ENOSECURITY EOPNOTSUPP #endif +#ifdef CONFIG_XFS_UNICODE +# define XFS_UNICODE_STRING "Unicode, " +#else +# define XFS_UNICODE_STRING +#endif + #ifdef CONFIG_XFS_RT # define XFS_REALTIME_STRING "realtime, " #else @@ -66,6 +72,7 @@ #define XFS_BUILD_OPTIONS XFS_ACL_STRING \ XFS_SECURITY_STRING \ + XFS_UNICODE_STRING \ XFS_REALTIME_STRING \ XFS_BIGFS_STRING \ XFS_TRACE_STRING \ Index: kern_ci/fs/xfs/xfs_attr.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_attr.c +++ kern_ci/fs/xfs/xfs_attr.c @@ -50,6 +50,7 @@ #include "xfs_acl.h" #include "xfs_rw.h" #include "xfs_vnodeops.h" +#include "xfs_unicode.h" /* * xfs_attr.c @@ -175,6 +176,13 @@ xfs_attr_get( if (namelen >= MAXNAMELEN) return(EFAULT); /* match IRIX behaviour */ + /* Enforce UTF-8 only for user attr names */ + if (xfs_sb_version_hasunicode(&ip->i_mount->m_sb) && + (flags & (ATTR_ROOT | ATTR_SECURE)) == 0) { + error = xfs_unicode_validate(name, namelen); + if (error) + return error; + } if (XFS_FORCED_SHUTDOWN(ip->i_mount)) return(EIO); @@ -435,6 +443,14 @@ xfs_attr_set( if (namelen >= MAXNAMELEN) return EFAULT; /* match IRIX behaviour */ + /* Enforce UTF-8 only for user attr names */ + if (xfs_sb_version_hasunicode(&dp->i_mount->m_sb) && + (flags & (ATTR_ROOT | ATTR_SECURE)) == 0) { + int error = xfs_unicode_validate(name, namelen); + if (error) + return error; + } + XFS_STATS_INC(xs_attr_set); if (XFS_FORCED_SHUTDOWN(dp->i_mount)) @@ -581,6 +597,14 @@ xfs_attr_remove( if (namelen >= MAXNAMELEN) return EFAULT; /* match IRIX behaviour */ + /* Enforce UTF-8 only for user attr names */ + if (xfs_sb_version_hasunicode(&dp->i_mount->m_sb) && + (flags & (ATTR_ROOT | ATTR_SECURE)) == 0) { + int error = xfs_unicode_validate(name, namelen); + if (error) + return error; + } + XFS_STATS_INC(xs_attr_remove); if (XFS_FORCED_SHUTDOWN(dp->i_mount)) Index: kern_ci/fs/xfs/xfs_clnt.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_clnt.h +++ kern_ci/fs/xfs/xfs_clnt.h @@ -100,5 +100,7 @@ struct xfs_mount_args { * I/O size in stat(2) */ #define XFSMNT2_FILESTREAMS 0x00000002 /* enable the filestreams * allocator */ +#define XFSMNT2_CILOOKUP 0x00000004 /* enable case-insensitive + * filename lookup */ #endif /* __XFS_CLNT_H__ */ Index: kern_ci/fs/xfs/xfs_da_btree.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.c +++ kern_ci/fs/xfs/xfs_da_btree.c @@ -1530,16 +1530,22 @@ xfs_da_hashname(const uchar_t *name, int } } -xfs_dacmp_t -xfs_da_compname(const uchar_t *name1, int len1, const uchar_t *name2, int len2) +static xfs_dahash_t +xfs_default_hashname(xfs_inode_t *inode, const uchar_t *name, int namelen) { - return (len1 == len2 && memcmp(name1, name2, len1) == 0) ? - XFS_CMP_EXACT : XFS_CMP_DIFFERENT; + return xfs_da_hashname(name, namelen); +} + +static xfs_dacmp_t +xfs_default_compname(xfs_inode_t *inode, const uchar_t *name1, int namelen1, + const uchar_t *name2, int namelen2) +{ + return xfs_da_compname(name1, namelen1, name2, namelen2); } struct xfs_nameops xfs_default_nameops = { - .hashname = xfs_da_hashname, - .compname = xfs_da_compname + .hashname = xfs_default_hashname, + .compname = xfs_default_compname }; /* Index: kern_ci/fs/xfs/xfs_da_btree.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.h +++ kern_ci/fs/xfs/xfs_da_btree.h @@ -215,9 +215,10 @@ typedef struct xfs_da_state { * Name ops for directory and/or attr name operations */ -typedef xfs_dahash_t (*xfs_hashname_t)(const uchar_t *, int); -typedef xfs_dacmp_t (*xfs_compname_t)(const uchar_t *, int, - const uchar_t *, int); +typedef xfs_dahash_t (*xfs_hashname_t)(struct xfs_inode *, const uchar_t *, + int); +typedef xfs_dacmp_t (*xfs_compname_t)(struct xfs_inode *, const uchar_t *, + int, const uchar_t *, int); typedef struct xfs_nameops { xfs_hashname_t hashname; @@ -282,8 +283,13 @@ int xfs_da_shrink_inode(xfs_da_args_t *a extern struct xfs_nameops xfs_default_nameops; uint xfs_da_hashname(const uchar_t *name_string, int name_length); -xfs_dacmp_t xfs_da_compname(const uchar_t *name1, int len1, - const uchar_t *name2, int len2); + +static inline xfs_dacmp_t +xfs_da_compname(const uchar_t *name1, int len1, const uchar_t *name2, int len2) +{ + return (len1 == len2 && memcmp(name1, name2, len1) == 0) ? + XFS_CMP_EXACT : XFS_CMP_DIFFERENT; +} /* returns/frees a MAXNAMELEN buffer from a zone */ extern struct kmem_zone *xfs_da_name_zone; Index: kern_ci/fs/xfs/xfs_dir2.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -43,7 +43,7 @@ #include "xfs_dir2_trace.h" #include "xfs_error.h" #include "xfs_vnodeops.h" - +#include "xfs_unicode.h" /* * V1/OLDCI case-insensitive support for directories @@ -52,6 +52,7 @@ */ static xfs_dahash_t xfs_ascii_ci_hashname( + xfs_inode_t *inode, const uchar_t *name, int namelen) { @@ -66,6 +67,7 @@ xfs_ascii_ci_hashname( static xfs_dacmp_t xfs_ascii_ci_compname( + xfs_inode_t *inode, const uchar_t *name1, int len1, const uchar_t *name2, @@ -113,8 +115,13 @@ xfs_dir_mount( (mp->m_dirblksize - (uint)sizeof(xfs_da_node_hdr_t)) / (uint)sizeof(xfs_da_node_entry_t); mp->m_dir_magicpct = (mp->m_dirblksize * 37) / 100; - mp->m_dirnameops = xfs_sb_version_hasoldci(&mp->m_sb) ? - &xfs_ascii_ci_nameops : &xfs_default_nameops; + + if (xfs_sb_version_hasunicode(&mp->m_sb)) { + mp->m_dirnameops = (mp->m_flags & XFS_MOUNT_CILOOKUP) ? + &xfs_unicode_ci_nameops : &xfs_unicode_nameops; + } else + mp->m_dirnameops = xfs_sb_version_hasoldci(&mp->m_sb) ? + &xfs_ascii_ci_nameops : &xfs_default_nameops; } /* Index: kern_ci/fs/xfs/xfs_dir2.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.h +++ kern_ci/fs/xfs/xfs_dir2.h @@ -88,10 +88,11 @@ extern int xfs_dir_canenter(struct xfs_t extern int xfs_dir_ino_validate(struct xfs_mount *mp, xfs_ino_t ino); #define xfs_dir_hashname(dp, n, l) \ - ((dp)->i_mount->m_dirnameops->hashname((n), (l))) + ((dp)->i_mount->m_dirnameops->hashname((dp), (n), (l))) #define xfs_dir_compname(dp, n1, l1, n2, l2) \ - ((dp)->i_mount->m_dirnameops->compname((n1), (l1), (n2), (l2))) + ((dp)->i_mount->m_dirnameops->compname((dp), (n1), (l1), \ + (n2), (l2))) /* * Utility routines for v2 directories. Index: kern_ci/fs/xfs/xfs_fs.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_fs.h +++ kern_ci/fs/xfs/xfs_fs.h @@ -241,6 +241,7 @@ typedef struct xfs_fsop_resblks { #define XFS_FSOP_GEOM_FLAGS_ATTR2 0x0400 /* inline attributes rework */ #define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x1000 /* ASCII only CI names */ #define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x4000 /* lazy superblock counters */ +#define XFS_FSOP_GEOM_FLAGS_UNICODE 0x10000 /* unicode filenames */ /* Index: kern_ci/fs/xfs/xfs_fsops.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_fsops.c +++ kern_ci/fs/xfs/xfs_fsops.c @@ -100,7 +100,9 @@ xfs_fs_geometry( (xfs_sb_version_haslazysbcount(&mp->m_sb) ? XFS_FSOP_GEOM_FLAGS_LAZYSB : 0) | (xfs_sb_version_hasattr2(&mp->m_sb) ? - XFS_FSOP_GEOM_FLAGS_ATTR2 : 0); + XFS_FSOP_GEOM_FLAGS_ATTR2 : 0) | + (xfs_sb_version_hasunicode(&mp->m_sb) ? + XFS_FSOP_GEOM_FLAGS_UNICODE : 0); geo->logsectsize = xfs_sb_version_hassector(&mp->m_sb) ? mp->m_sb.sb_logsectsize : BBSIZE; geo->rtsectsize = mp->m_sb.sb_blocksize; Index: kern_ci/fs/xfs/xfs_itable.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_itable.c +++ kern_ci/fs/xfs/xfs_itable.c @@ -45,6 +45,8 @@ xfs_internal_inum( xfs_ino_t ino) { return (ino == mp->m_sb.sb_rbmino || ino == mp->m_sb.sb_rsumino || + (xfs_sb_version_hasunicode(&mp->m_sb) && + ino == mp->m_sb.sb_cftino) || (xfs_sb_version_hasquota(&mp->m_sb) && (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino))); } Index: kern_ci/fs/xfs/xfs_mount.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_mount.c +++ kern_ci/fs/xfs/xfs_mount.c @@ -44,6 +44,7 @@ #include "xfs_quota.h" #include "xfs_fsops.h" #include "xfs_utils.h" +#include "xfs_unicode.h" STATIC void xfs_mount_log_sb(xfs_mount_t *, __int64_t); STATIC int xfs_uuid_mount(xfs_mount_t *); @@ -121,6 +122,7 @@ static const struct { { offsetof(xfs_sb_t, sb_logsunit), 0 }, { offsetof(xfs_sb_t, sb_features2), 0 }, { offsetof(xfs_sb_t, sb_bad_features2), 0 }, + { offsetof(xfs_sb_t, sb_cftino), 0 }, { sizeof(xfs_sb_t), 0 } }; @@ -167,6 +169,7 @@ xfs_mount_free( sizeof(xfs_perag_t) * mp->m_sb.sb_agcount); } + xfs_unicode_free_cft(mp->m_cft); spinlock_destroy(&mp->m_ail_lock); spinlock_destroy(&mp->m_sb_lock); mutex_destroy(&mp->m_ilock); @@ -452,6 +455,7 @@ xfs_sb_from_disk( to->sb_logsunit = be32_to_cpu(from->sb_logsunit); to->sb_features2 = be32_to_cpu(from->sb_features2); to->sb_bad_features2 = be32_to_cpu(from->sb_bad_features2); + to->sb_cftino = be64_to_cpu(from->sb_cftino); } /* @@ -1175,6 +1179,18 @@ xfs_mountfs( } /* + * Load in unicode case folding table from disk + */ + if (xfs_sb_version_hasunicode(&mp->m_sb)) { + error = xfs_unicode_read_cft(mp); + if (error) { + cmn_err(CE_WARN, + "XFS: failed to read case folding table"); + goto error4; + } + } + + /* * If fs is not mounted readonly, then update the superblock changes. */ if (update_flags && !(mp->m_flags & XFS_MOUNT_RDONLY)) @@ -1229,7 +1245,8 @@ xfs_mountfs( * Free up the root inode. */ IRELE(rip); - error3: + xfs_unicode_free_cft(mp->m_cft); +error3: xfs_log_unmount_dealloc(mp); error2: for (agno = 0; agno < sbp->sb_agcount; agno++) @@ -1956,7 +1973,7 @@ xfs_mount_log_sb( * 3. accurate counter sync requires m_sb_lock + per cpu locks * 4. modifying per-cpu counters requires holding per-cpu lock * 5. modifying global counters requires holding m_sb_lock - * 6. enabling or disabling a counter requires holding the m_sb_lock + * 6. enabling or disabling a counter requires holding the m_sb_lock * and _none_ of the per-cpu locks. * * Disabled counters are only ever re-enabled by a balance operation Index: kern_ci/fs/xfs/xfs_mount.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_mount.h +++ kern_ci/fs/xfs/xfs_mount.h @@ -62,6 +62,7 @@ struct xfs_extdelta; struct xfs_swapext; struct xfs_mru_cache; struct xfs_nameops; +struct xfs_cft; /* * Prototypes and functions for the Data Migration subsystem. @@ -314,6 +315,7 @@ typedef struct xfs_mount { field governed by m_ilock */ __uint8_t m_sectbb_log; /* sectlog - BBSHIFT */ struct xfs_nameops *m_dirnameops; /* vector of dir name ops */ + struct xfs_cft *m_cft; /* unicode case fold table */ int m_dirblksize; /* directory block sz--bytes */ int m_dirblkfsbs; /* directory block sz--fsbs */ xfs_dablk_t m_dirdatablk; /* blockno of dir data v2 */ @@ -379,7 +381,8 @@ typedef struct xfs_mount { counters */ #define XFS_MOUNT_FILESTREAMS (1ULL << 24) /* enable the filestreams allocator */ - +#define XFS_MOUNT_CILOOKUP (1ULL << 25) /* enable case-insensitive + file lookup */ /* * Default minimum read and write sizes. @@ -403,7 +406,7 @@ typedef struct xfs_mount { /* * Allow large block sizes to be reported to userspace programs if the - * "largeio" mount option is used. + * "largeio" mount option is used. * * If compatibility mode is specified, simply return the basic unit of caching * so that we don't get inefficient read/modify/write I/O from user apps. Index: kern_ci/fs/xfs/xfs_rename.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_rename.c +++ kern_ci/fs/xfs/xfs_rename.c @@ -39,6 +39,7 @@ #include "xfs_utils.h" #include "xfs_trans_space.h" #include "xfs_vnodeops.h" +#include "xfs_unicode.h" /* @@ -248,6 +249,14 @@ xfs_rename( xfs_itrace_entry(src_dp); xfs_itrace_entry(target_dp); + if (xfs_sb_version_hasunicode(&mp->m_sb)) { + error = xfs_unicode_validate(src_name, src_namelen); + if (error) + return error; + error = xfs_unicode_validate(target_name, target_namelen); + if (error) + return error; + } if (DM_EVENT_ENABLED(src_dp, DM_EVENT_RENAME) || DM_EVENT_ENABLED(target_dp, DM_EVENT_RENAME)) { error = XFS_SEND_NAMESP(mp, DM_EVENT_RENAME, Index: kern_ci/fs/xfs/xfs_sb.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_sb.h +++ kern_ci/fs/xfs/xfs_sb.h @@ -79,10 +79,18 @@ struct xfs_mount; #define XFS_SB_VERSION2_LAZYSBCOUNTBIT 0x00000002 /* Superblk counters */ #define XFS_SB_VERSION2_RESERVED4BIT 0x00000004 #define XFS_SB_VERSION2_ATTR2BIT 0x00000008 /* Inline attr rework */ +#define XFS_SB_VERSION2_UNICODEBIT 0x00000020 /* Unicode names */ -#define XFS_SB_VERSION2_OKREALFBITS \ +#ifdef CONFIG_XFS_UNICODE +# define XFS_SB_VERSION2_OKREALFBITS \ (XFS_SB_VERSION2_LAZYSBCOUNTBIT | \ + XFS_SB_VERSION2_UNICODEBIT | \ XFS_SB_VERSION2_ATTR2BIT) +#else +# define XFS_SB_VERSION2_OKREALFBITS \ + (XFS_SB_VERSION2_LAZYSBCOUNTBIT | \ + XFS_SB_VERSION2_ATTR2BIT) +#endif #define XFS_SB_VERSION2_OKSASHFBITS \ (0) #define XFS_SB_VERSION2_OKREALBITS \ @@ -156,6 +164,7 @@ typedef struct xfs_sb { * it for anything else. */ __uint32_t sb_bad_features2; + xfs_ino_t sb_cftino; /* unicode case folding table inode */ /* must be padded to 64 bit alignment */ } xfs_sb_t; @@ -225,7 +234,8 @@ typedef struct xfs_dsb { * for features2 bits. Easiest just to mark it bad and not use * it for anything else. */ - __be32 sb_bad_features2; + __be32 sb_bad_features2; + __be64 sb_cftino; /* unicode case folding table inode */ /* must be padded to 64 bit alignment */ } xfs_dsb_t; @@ -246,7 +256,7 @@ typedef enum { XFS_SBS_GQUOTINO, XFS_SBS_QFLAGS, XFS_SBS_FLAGS, XFS_SBS_SHARED_VN, XFS_SBS_INOALIGNMT, XFS_SBS_UNIT, XFS_SBS_WIDTH, XFS_SBS_DIRBLKLOG, XFS_SBS_LOGSECTLOG, XFS_SBS_LOGSECTSIZE, XFS_SBS_LOGSUNIT, - XFS_SBS_FEATURES2, XFS_SBS_BAD_FEATURES2, + XFS_SBS_FEATURES2, XFS_SBS_BAD_FEATURES2, XFS_SBS_CFTINO, XFS_SBS_FIELDCOUNT } xfs_sb_field_t; @@ -272,6 +282,7 @@ typedef enum { #define XFS_SB_FDBLOCKS XFS_SB_MVAL(FDBLOCKS) #define XFS_SB_FEATURES2 XFS_SB_MVAL(FEATURES2) #define XFS_SB_BAD_FEATURES2 XFS_SB_MVAL(BAD_FEATURES2) +#define XFS_SB_CFTINO XFS_SB_MVAL(CFTINO) #define XFS_SB_NUM_BITS ((int)XFS_SBS_FIELDCOUNT) #define XFS_SB_ALL_BITS ((1LL << XFS_SB_NUM_BITS) - 1) #define XFS_SB_MOD_BITS \ @@ -279,7 +290,7 @@ typedef enum { XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | XFS_SB_GQUOTINO | \ XFS_SB_QFLAGS | XFS_SB_SHARED_VN | XFS_SB_UNIT | XFS_SB_WIDTH | \ XFS_SB_ICOUNT | XFS_SB_IFREE | XFS_SB_FDBLOCKS | XFS_SB_FEATURES2 | \ - XFS_SB_BAD_FEATURES2) + XFS_SB_BAD_FEATURES2 | XFS_SB_CFTINO) /* @@ -480,6 +491,16 @@ static inline void xfs_sb_version_addatt ((sbp)->sb_features2 | XFS_SB_VERSION2_ATTR2BIT))); } +#ifdef CONFIG_XFS_UNICODE +static inline int xfs_sb_version_hasunicode(xfs_sb_t *sbp) +{ + return (xfs_sb_version_hasmorebits(sbp) && \ + ((sbp)->sb_features2 & XFS_SB_VERSION2_UNICODEBIT)); +} +#else +# define xfs_sb_version_hasunicode(sbp) (0) +#endif + /* * end of superblock version macros */ Index: kern_ci/fs/xfs/xfs_unicode.c =================================================================== --- /dev/null +++ kern_ci/fs/xfs/xfs_unicode.c @@ -0,0 +1,499 @@ +/* + * Copyright (c) 2007-2008 Silicon Graphics, Inc. + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "xfs.h" +#include "xfs_fs.h" +#include "xfs_bit.h" +#include "xfs_log.h" +#include "xfs_inum.h" +#include "xfs_clnt.h" +#include "xfs_trans.h" +#include "xfs_sb.h" +#include "xfs_ag.h" +#include "xfs_da_btree.h" +#include "xfs_dir2.h" +#include "xfs_alloc.h" +#include "xfs_dmapi.h" +#include "xfs_mount.h" +#include "xfs_bmap_btree.h" +#include "xfs_alloc_btree.h" +#include "xfs_ialloc_btree.h" +#include "xfs_dir2_sf.h" +#include "xfs_attr_sf.h" +#include "xfs_dinode.h" +#include "xfs_inode.h" +#include "xfs_btree.h" +#include "xfs_ialloc.h" +#include "xfs_itable.h" +#include "xfs_rtalloc.h" +#include "xfs_error.h" +#include "xfs_bmap.h" +#include "xfs_rw.h" +#include "xfs_unicode.h" + +#define MAX_FOLD_CHARS 4 + +static inline int +xfs_casefold( + const xfs_cft_t *cft, + __uint16_t c, + __uint16_t *fc) +{ + __uint16_t *table = XFS_CFT_PTR(cft, 0); + __uint16_t tmp = table[c >> 8]; + int i; + + if (!tmp) { + *fc = c; + return 1; + } + tmp = table[tmp + (c & 0xff)]; + if ((tmp & 0xf000) != 0xe000) { + *fc = tmp; + return 1; + } + i = ((tmp >> 10) & 0x3) + 2; + ASSERT(i < cft->num_tables); + table = XFS_CFT_PTR(cft, i - 1) + ((tmp & 0x3ff) * i); + + memcpy(fc, table, sizeof(__uint16_t) * i); + + return i; +} + +static inline int +xfs_utf8_casefold( + const xfs_cft_t *cft, + const uchar_t **name, + int *namelen, + __uint16_t *fc) +{ + wchar_t uc; + + if (*namelen == 0) + return 0; + + if (**name & 0x80) { + int n = utf8_mbtowc(&uc, *name, *namelen); + if (n < 0) { + (*namelen)--; + *fc = *(*name)++; + return 1; + } + *name += n; + *namelen -= n; + } else { + uc = *(*name)++; + (*namelen)--; + } + return xfs_casefold(cft, uc, fc); +} + +/* + * always generate a case-folded hash to allow mount-time selection of + * case-insensitive lookup (rather than mkfs time). + */ +xfs_dahash_t +xfs_unicode_hashname( + xfs_inode_t *inode, + const uchar_t *name, + int namelen) +{ + xfs_dahash_t hash = 0; + __uint16_t fc[MAX_FOLD_CHARS]; + int nfc; + int i; + + while (namelen > 0) { + nfc = xfs_utf8_casefold(inode->i_mount->m_cft, &name, &namelen, + fc); + for (i = 0; i < nfc; i++) + hash = fc[i] ^ rol32(hash, 7); + } + return hash; +} + +/* + * Perform a case-folding case-insensitive string comparison, + * returns either XFS_CMP_CASE or XFS_CMP_DIFFERENT. + */ +static xfs_dacmp_t +xfs_unicode_casecmp( + xfs_cft_t *cft, + const uchar_t *name1, + int len1, + const uchar_t *name2, + int len2) +{ + __uint16_t fc1[MAX_FOLD_CHARS], fc2[MAX_FOLD_CHARS]; + __uint16_t *pfc1, *pfc2; + int nfc1, nfc2; + + nfc1 = xfs_utf8_casefold(cft, &name1, &len1, fc1); + pfc1 = fc1; + nfc2 = xfs_utf8_casefold(cft, &name2, &len2, fc2); + pfc2 = fc2; + + while (nfc1 > 0 && nfc2 > 0) { + if (*pfc1 != *pfc2) + return XFS_CMP_DIFFERENT; + if (!--nfc1) { + nfc1 = xfs_utf8_casefold(cft, &name1, &len1, fc1); + pfc1 = fc1; + } else + pfc1++; + if (!--nfc2) { + nfc2 = xfs_utf8_casefold(cft, &name2, &len2, fc2); + pfc2 = fc2; + } else + pfc2++; + } + if (nfc1 != nfc2) + return XFS_CMP_DIFFERENT; + return XFS_CMP_CASE; + +} + +/* + * Compare two UTF-8 names to see if they are exactly the same or + * case-insensitive match. + */ +xfs_dacmp_t +xfs_unicode_compname( + xfs_inode_t *inode, + const uchar_t *name1, + int len1, + const uchar_t *name2, + int len2) +{ + wchar_t uc1, uc2; + int n; + + /* + * If the lengths are different, go straight to the case-insensitive + * comparison + */ + if (len1 != len2) + return xfs_unicode_casecmp(inode->i_mount->m_cft, + name1, len1, name2, len2); + + /* + * Start by comparing one-to-one UTF-8 chars. If we have a mismatch, + * downgrade to case-insensitive comparison on the rest of the names. + * At this stage, we only need to maintain one length variable. + */ + while (len1) { + /* + * first do a direct compare, if different, try the + * case-insensitive comparison on the remainder. + */ + if (*name1 != *name2) + return xfs_unicode_casecmp(inode->i_mount->m_cft, + name1, len1, name2, len1); + /* + * if we are working on a UTF-8 sequence, take in all + * appropriate chars and then compare. + */ + if (*name1 >= 0x80) { + n = utf8_mbtowc(&uc1, name1, len1); + if (n < 0) + return XFS_CMP_DIFFERENT; /* invalid */ + utf8_mbtowc(&uc2, name2, len1); + /* + * no need to check "n" here as the first char + * determines the length of a UTF-8 sequence. + */ + if (uc1 != uc2) + return xfs_unicode_casecmp( + inode->i_mount->m_cft, + name1, len1, name2, len1); + } else { + n = 1; + } + name1 += n; + name2 += n; + len1 -= n; + } + /* + * to get here, all chars must have matched + */ + return XFS_CMP_EXACT; +} + +static xfs_dacmp_t +xfs_default_compname( + xfs_inode_t *inode, + const uchar_t *name1, + int namelen1, + const uchar_t *name2, + int namelen2) +{ + return xfs_da_compname(name1, namelen1, name2, namelen2); +} + +struct xfs_nameops xfs_unicode_nameops = { + .hashname = xfs_unicode_hashname, + .compname = xfs_default_compname, +}; + +struct xfs_nameops xfs_unicode_ci_nameops = { + .hashname = xfs_unicode_hashname, + .compname = xfs_unicode_compname, +}; + +int +xfs_unicode_validate( + const uchar_t *name, + int namelen) +{ + wchar_t uc; + int i, nlen; + + for (i = 0; i < namelen; i += nlen) { + if (*name >= 0xf0) { + cmn_err(CE_WARN, "xfs_unicode_validate: " + "UTF-8 char beyond U+FFFF\n"); + return EINVAL; + } + /* utf8_mbtowc must fail on overlong sequences too */ + nlen = utf8_mbtowc(&uc, name + i, namelen - i); + if (nlen < 0) { + cmn_err(CE_WARN, "xfs_unicode_validate: " + "invalid UTF-8 sequence\n"); + return EILSEQ; + } + /* check for invalid/surrogate/private unicode chars */ + if (uc >= 0xfffe || (uc >= 0xd800 && uc <= 0xf8ff)) { + cmn_err(CE_WARN, "xfs_unicode_validate: " + "unsupported UTF-8 char\n"); + return EINVAL; + } + } + return 0; +} + +/* + * Unicode Case Fold Table management + */ + +struct cft_item { + xfs_cft_t *table; + int size; + int refcount; +}; + +static mutex_t cft_lock; +static int cft_size; +static struct cft_item *cft_list; + +static xfs_cft_t * +add_cft( + xfs_dcft_t *dcft, + int size) +{ + int found = 0; + int i, j; + xfs_cft_t *cft; + __be16 *duc; + __uint16_t *uc; + + mutex_lock(&cft_lock); + + for (i = 0; i < cft_size; i++) { + if (cft_list[i].size != size) + continue; + cft = cft_list[i].table; + if (cft->num_tables != be32_to_cpu(dcft->num_tables) || + cft->flags != be32_to_cpu(dcft->flags)) + continue; + found = 1; + for (j = 0; j < cft->num_tables; j++) { + if (cft->table_offset[j] != + be32_to_cpu(dcft->table_offset[j])) { + found = 0; + break; + } + } + if (found) { + cft_list[i].refcount++; + mutex_unlock(&cft_lock); + return cft; + } + } + + cft = vmalloc(size); + if (!cft) { + mutex_unlock(&cft_lock); + return NULL; + } + cft->magic = be32_to_cpu(dcft->magic); + cft->flags = be32_to_cpu(dcft->flags); + cft->num_tables = be32_to_cpu(dcft->num_tables); + ASSERT(cft->num_tables <= MAX_FOLD_CHARS); + for (i = 0; i < cft->num_tables; i++) + cft->table_offset[i] = be32_to_cpu(dcft->table_offset[i]); + j = (size - cft->table_offset[0]) / sizeof(__uint16_t); + uc = XFS_CFT_PTR(cft, 0); + duc = XFS_DCFT_PTR(dcft, 0); + for (i = 0; i < j; i++) + uc[i] = be16_to_cpu(duc[i]); + + cft_list = kmem_realloc(cft_list, + (cft_size + 1) * sizeof(struct cft_item), + cft_size * sizeof(struct cft_item), KM_SLEEP); + cft_list[cft_size].table = cft; + cft_list[cft_size].size = size; + cft_list[cft_size].refcount = 1; + cft_size++; + + mutex_unlock(&cft_lock); + + return cft; +} + +static void +remove_cft( + const xfs_cft_t *cft) +{ + int i; + + mutex_lock(&cft_lock); + + for (i = 0; i < cft_size; i++) { + if (cft_list[i].table == cft) { + ASSERT(cft_list[i].refcount > 0); + cft_list[i].refcount--; + break; + } + } + + mutex_unlock(&cft_lock); +} + + +int +xfs_unicode_read_cft( + xfs_mount_t *mp) +{ + int error; + xfs_inode_t *cftip; + int size; + int nfsb; + int nmap; + xfs_bmbt_irec_t *mapp; + int n; + int byte_cnt; + xfs_buf_t *bp; + char *table; + xfs_dcft_t *dcft; + + if (mp->m_sb.sb_cftino == NULLFSINO || mp->m_sb.sb_cftino == 0) + return EINVAL; + error = xfs_iget(mp, NULL, mp->m_sb.sb_cftino, 0, 0, &cftip, 0); + if (error) + return error; + ASSERT(cftip != NULL); + + size = cftip->i_d.di_size; + nfsb = cftip->i_d.di_nblocks; + + table = vmalloc(size); + if (!table) { + xfs_iput(cftip, 0); + return ENOMEM; + } + dcft = (xfs_dcft_t *)table; + + nmap = nfsb; + mapp = kmem_alloc(nfsb * sizeof(xfs_bmbt_irec_t), KM_SLEEP); + + error = xfs_bmapi(NULL, cftip, 0, nfsb, 0, NULL, 0, mapp, &nmap, + NULL, NULL); + if (error) + goto out; + + for (n = 0; n < nmap; n++) { + byte_cnt = XFS_FSB_TO_B(mp, mapp[n].br_blockcount); + + error = xfs_read_buf(mp, mp->m_ddev_targp, + XFS_FSB_TO_DADDR(mp, mapp[n].br_startblock), + BTOBB(byte_cnt), 0, &bp); + if (error) + goto out; + + if (size < byte_cnt) + byte_cnt = size; + size -= byte_cnt; + memcpy(table, XFS_BUF_PTR(bp), byte_cnt); + table += byte_cnt; + xfs_buf_relse(bp); + } + + /* verify case table read off disk */ + if (!uuid_equal(&dcft->uuid, &mp->m_sb.sb_uuid)) { + error = EINVAL; + goto out; + } + + /* clear UUID for in-memory copy/compare */ + memset(&dcft->uuid, 0, sizeof(dcft->uuid)); + + mp->m_cft = add_cft(dcft, cftip->i_d.di_size); + if (mp->m_cft == NULL) + error = ENOMEM; + +out: + xfs_iput(cftip, 0); + kmem_free(mapp, nfsb * sizeof(xfs_bmbt_irec_t)); + vfree(dcft); + + return error; +} + +void +xfs_unicode_free_cft( + const xfs_cft_t *cft) +{ + if (cft) + remove_cft(cft); +} + +void +xfs_unicode_init(void) +{ + mutex_init(&cft_lock); +} + +void +xfs_unicode_uninit(void) +{ + int i; + + mutex_lock(&cft_lock); + + for (i = 0; i < cft_size; i++) { + ASSERT(cft_list[i].refcount == 0); + vfree(cft_list[i].table); + } + kmem_free(cft_list, cft_size * sizeof(struct cft_item)); + cft_size = 0; + cft_list = NULL; + + mutex_unlock(&cft_lock); + mutex_destroy(&cft_lock); +} Index: kern_ci/fs/xfs/xfs_unicode.h =================================================================== --- /dev/null +++ kern_ci/fs/xfs/xfs_unicode.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2007-2008 Silicon Graphics, Inc. + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +#ifndef __XFS_UNICODE_H__ +#define __XFS_UNICODE_H__ + +#define XFS_CFT_MAGIC 0x58434654 /* 'XCFT' */ +#define XFS_CFT_FLAG_TURKIC 0x00000001 +#define XFS_CFT_FLAG_MAX 0x00000001 + +/* + * Case Fold Table - on disk version. Must match the incore version below. + */ +typedef struct xfs_dcft { + __be32 magic; /* validity check */ + __be32 flags; + uuid_t uuid; /* UUID of the filesystem */ + __be32 crc; /* for future support */ + __be32 num_tables; /* single, double, etc */ + __be32 table_offset[1]; +} xfs_dcft_t; + +/* + * Case Fold Table - in core version. Must match the ondisk version above. + */ +typedef struct xfs_cft { + __uint32_t magic; + __uint32_t flags; + uuid_t uuid; /* UUID of the filesystem */ + __uint32_t crc; + __uint32_t num_tables; /* single, double, etc */ + __uint32_t table_offset[1];/* num_tables sized */ + /* 16-bit array tables immediately follow */ +} xfs_cft_t; + +#define XFS_CFT_PTR(t,n) (__uint16_t *)(((char *)(t)) + \ + (t)->table_offset[n]) +#define XFS_DCFT_PTR(t,n) (__be16 *)(((char *)(t)) + \ + be32_to_cpu((t)->table_offset[n])) + +#ifdef CONFIG_XFS_UNICODE + +extern struct xfs_nameops xfs_unicode_nameops; +extern struct xfs_nameops xfs_unicode_ci_nameops; + +void xfs_unicode_init(void); +void xfs_unicode_uninit(void); + +int xfs_unicode_validate(const uchar_t *name, int namelen); + +int xfs_unicode_read_cft(struct xfs_mount *mp); +void xfs_unicode_free_cft(const xfs_cft_t *cft); + +#else + +#define xfs_unicode_nameops xfs_default_nameops +#define xfs_unicode_ci_nameops xfs_default_nameops + +#define xfs_unicode_init() +#define xfs_unicode_uninit() +#define xfs_unicode_validate(n,l) 0 +#define xfs_unicode_read_cft(mp) (EOPNOTSUPP) +#define xfs_unicode_free_cft(cft) + +#endif /* CONFIG_XFS_UNICODE */ + +#endif /* __XFS_UNICODE_H__ */ Index: kern_ci/fs/xfs/xfs_vfsops.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_vfsops.c +++ kern_ci/fs/xfs/xfs_vfsops.c @@ -56,6 +56,7 @@ #include "xfs_vnodeops.h" #include "xfs_vfsops.h" #include "xfs_utils.h" +#include "xfs_unicode.h" int __init @@ -82,6 +83,7 @@ xfs_init(void) xfs_acl_zone_init(xfs_acl_zone, "xfs_acl"); xfs_mru_cache_init(); xfs_filestream_init(); + xfs_unicode_init(); /* * The size of the zone allocated buf log item is the maximum @@ -157,6 +159,7 @@ xfs_cleanup(void) xfs_filestream_uninit(); xfs_mru_cache_uninit(); xfs_acl_zone_destroy(xfs_acl_zone); + xfs_unicode_uninit(); #ifdef XFS_DIR2_TRACE ktrace_free(xfs_dir2_trace_buf); @@ -399,6 +402,19 @@ xfs_finish_flags( mp->m_qflags |= XFS_OQUOTA_ENFD; } + if (xfs_sb_version_hasunicode(&mp->m_sb)) { + if (ap->flags2 & XFSMNT2_CILOOKUP) + mp->m_flags |= XFS_MOUNT_CILOOKUP; + } else { + /* + * Check for mount options which require a Unicode FS + */ + if (ap->flags2 & XFSMNT2_CILOOKUP) { + cmn_err(CE_WARN, + "XFS: can't do case-insensitive mount on non-utf8 filesystem"); + return XFS_ERROR(EINVAL); + } + } return 0; } Index: kern_ci/fs/xfs/xfs_vnodeops.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_vnodeops.c +++ kern_ci/fs/xfs/xfs_vnodeops.c @@ -52,6 +52,7 @@ #include "xfs_log_priv.h" #include "xfs_filestream.h" #include "xfs_vnodeops.h" +#include "xfs_unicode.h" int xfs_open( @@ -1777,6 +1778,12 @@ xfs_lookup( if (XFS_FORCED_SHUTDOWN(dp->i_mount)) return XFS_ERROR(EIO); + if (xfs_sb_version_hasunicode(&dp->i_mount->m_sb)) { + error = xfs_unicode_validate(d_name->name, d_name->len); + if (error) + return error; + } + name.name = (uchar_t *)d_name->name; name.len = d_name->len; rname.name = NULL; @@ -1822,8 +1829,17 @@ xfs_create( ASSERT(!*ipp); xfs_itrace_entry(dp); + if (XFS_FORCED_SHUTDOWN(mp)) + return XFS_ERROR(EIO); + namelen = VNAMELEN(dentry); + if (xfs_sb_version_hasunicode(&mp->m_sb)) { + error = xfs_unicode_validate(name, namelen); + if (error) + return error; + } + if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) { error = XFS_SEND_NAMESP(mp, DM_EVENT_CREATE, dp, DM_RIGHT_NULL, NULL, @@ -1835,9 +1851,6 @@ xfs_create( dm_event_sent = 1; } - if (XFS_FORCED_SHUTDOWN(mp)) - return XFS_ERROR(EIO); - /* Return through std_return after this point. */ udqp = gdqp = NULL; @@ -2282,7 +2295,7 @@ xfs_remove( xfs_inode_t *ip = VNAME_TO_INODE(dentry); int namelen = VNAMELEN(dentry); xfs_trans_t *tp = NULL; - int error = 0; + int error; xfs_bmap_free_t free_list; xfs_fsblock_t first_block; int cancel_flags; @@ -2295,6 +2308,12 @@ xfs_remove( if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); + if (xfs_sb_version_hasunicode(&mp->m_sb)) { + error = xfs_unicode_validate(name, namelen); + if (error) + return error; + } + if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { error = XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, @@ -2504,6 +2523,12 @@ xfs_link( if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); + if (xfs_sb_version_hasunicode(&mp->m_sb)) { + error = xfs_unicode_validate(target_name, target_namelen); + if (error) + return error; + } + if (DM_EVENT_ENABLED(tdp, DM_EVENT_LINK)) { error = XFS_SEND_NAMESP(mp, DM_EVENT_LINK, tdp, DM_RIGHT_NULL, @@ -2661,6 +2686,12 @@ xfs_mkdir( if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); + if (xfs_sb_version_hasunicode(&mp->m_sb)) { + error = xfs_unicode_validate(dir_name, dir_namelen); + if (error) + return error; + } + tp = NULL; if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) { @@ -2869,6 +2900,12 @@ xfs_rmdir( if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); + if (xfs_sb_version_hasunicode(&mp->m_sb)) { + error = xfs_unicode_validate(name, namelen); + if (error) + return error; + } + if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { error = XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, DM_RIGHT_NULL, @@ -3097,7 +3134,6 @@ xfs_symlink( int link_namelen; *ipp = NULL; - error = 0; ip = NULL; tp = NULL; @@ -3108,6 +3144,12 @@ xfs_symlink( link_namelen = VNAMELEN(dentry); + if (xfs_sb_version_hasunicode(&mp->m_sb)) { + error = xfs_unicode_validate(link_name, link_namelen); + if (error) + return error; + } + /* * Check component lengths of the target path name. */ -- From owner-xfs@oss.sgi.com Tue Apr 1 23:56:34 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 01 Apr 2008 23:57:08 -0700 (PDT) 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.0 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 m326uTxI012058 for ; Tue, 1 Apr 2008 23:56:33 -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 QAA24280; Wed, 2 Apr 2008 16:57:01 +1000 Date: Wed, 02 Apr 2008 16:58:46 +1000 To: "David Chinner" , xfs-dev Subject: Re: [Patch] xfsqa: 091 needs to support sector size != 512 bytes From: "Barry Naujok" Organization: SGI Cc: xfs-oss Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080402053451.GE103491721@sgi.com> Message-ID: In-Reply-To: <20080402053451.GE103491721@sgi.com> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m326uYxI012064 X-archive-position: 15158 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Not tested yet, but looks fine. On Wed, 02 Apr 2008 15:34:51 +1000, David Chinner wrote: > Test 091 assumes a direct I/O alignment of 512 bytes, > a hold over from 2.4 kernels. On 2.6. kernels, direct > I/O needs to be aligned to the sector size the filesystem > was mkfs'd with. > > Teach 091 about 2.6 kernels and grab the sector size from the > xfs_info output. > > Signed-off-by: Dave Chinner > --- > xfstests/091 | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > Index: xfs-cmds/xfstests/091 > =================================================================== > --- xfs-cmds.orig/xfstests/091 2007-03-19 08:49:37.000000000 +1100 > +++ xfs-cmds/xfstests/091 2008-04-02 15:27:39.266824430 +1000 > @@ -43,10 +43,20 @@ run_fsx() > psize=`$here/src/feature -s` > bsize=512 > -# 2.4 Linux kernels support bsize aligned direct I/O only > kernel=`uname -r | sed -e 's/\(2\..\).*/\1/'` > + > +# 2.4 Linux kernels support bsize aligned direct I/O only > [ "$HOSTOS" = "Linux" -a "$kernel" = "2.4" ] && bsize=$psize > +# 2.6 Linux kernels support sector aligned direct I/O only > +if [ "$HOSTOS" = "Linux" -a "$kernel" = "2.6" ]; then > + xfs_info $TEST_DIR | _filter_mkfs 2> $tmp.info > + if [ $? -eq 0 ]; then > + source $tmp.info > + bsize=$sectsz > + fi > +fi > + > # fsx usage: > # > # -N numops: total # operations to do > > From owner-xfs@oss.sgi.com Wed Apr 2 01:28:05 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 01:28:13 -0700 (PDT) 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 (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 m328S4cb002118 for ; Wed, 2 Apr 2008 01:28:05 -0700 X-ASG-Debug-ID: 1207124920-419202f40000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp-out03.alice-dsl.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 203748EB221 for ; Wed, 2 Apr 2008 01:28:40 -0700 (PDT) Received: from smtp-out03.alice-dsl.net (smtp-out03.alice-dsl.net [88.44.63.5]) by cuda.sgi.com with ESMTP id au9jcMNyrAm4sE0g for ; Wed, 02 Apr 2008 01:28:40 -0700 (PDT) Received: from out.alice-dsl.de ([192.168.125.62]) by smtp-out03.alice-dsl.net with Microsoft SMTPSVC(6.0.3790.1830); Wed, 2 Apr 2008 10:21:26 +0200 Received: from basil.firstfloor.org ([78.53.156.28]) by out.alice-dsl.de with Microsoft SMTPSVC(6.0.3790.1830); Wed, 2 Apr 2008 10:21:26 +0200 Received: by basil.firstfloor.org (Postfix, from userid 1000) id 3F9FE1B4211; Wed, 2 Apr 2008 10:28:07 +0200 (CEST) To: David Chinner Cc: Lachlan McIlroy , xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [Patch] Cacheline align xlog_t Subject: Re: [Patch] Cacheline align xlog_t References: <20080401231552.GV103491721@sgi.com> <47F3293C.6090708@sgi.com> <20080402054403.GF103491721@sgi.com> From: Andi Kleen Date: 02 Apr 2008 10:28:07 +0200 In-Reply-To: <20080402054403.GF103491721@sgi.com> Message-ID: <87myocek4o.fsf@basil.nowhere.org> Lines: 21 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-OriginalArrivalTime: 02 Apr 2008 08:21:26.0660 (UTC) FILETIME=[8B83BC40:01C8949A] X-Barracuda-Connect: smtp-out03.alice-dsl.net[88.44.63.5] X-Barracuda-Start-Time: 1207124921 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.1, rules version 3.1.46605 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15159 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: andi@firstfloor.org Precedence: bulk X-list: xfs David Chinner writes: > > This just means that the start of the structure is cacheline > aligned. I don't think the internal alignment commands force the > entire structure to be cacheline aligned, merely pad the struture > internally. In that case, even though the specific internal parts of > the structure are on separate cache lines, there's no guarantee that > all the related members are on the same cacheline. Hence I'm > explicitly stating the exact alignment I want for the structure.... Isn't the structure dynamically allocated anyways? The full type alignment really only matters for statics/globals where the linker can handle it. For the dynamic allocation you would rather need to make sure it starts at a cache line boundary explicitely because the allocator doesn't know the alignment of the target type, otherwise your careful padding might be useless. -Andi From owner-xfs@oss.sgi.com Wed Apr 2 04:33:36 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 04:34:04 -0700 (PDT) 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.4 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 m32BXZNs000916 for ; Wed, 2 Apr 2008 04:33:36 -0700 X-ASG-Debug-ID: 1207136050-371c00c10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 56684729D05 for ; Wed, 2 Apr 2008 04:34:11 -0700 (PDT) Received: from smtp7-g19.free.fr (smtp7-g19.free.fr [212.27.42.64]) by cuda.sgi.com with ESMTP id JvviJI7HL8OTV0Cs for ; Wed, 02 Apr 2008 04:34:11 -0700 (PDT) Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by smtp7-g19.free.fr (Postfix) with ESMTP id B989F322823; Wed, 2 Apr 2008 13:33:39 +0200 (CEST) Received: from galadriel.home (pla78-1-82-235-234-79.fbx.proxad.net [82.235.234.79]) by smtp7-g19.free.fr (Postfix) with ESMTP id 58169322837; Wed, 2 Apr 2008 13:33:39 +0200 (CEST) Date: Wed, 2 Apr 2008 13:30:03 +0200 From: Emmanuel Florac To: David Chinner Cc: David Chinner , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Serious XFS crash Subject: Re: Serious XFS crash Message-ID: <20080402133003.4bb043e4@galadriel.home> In-Reply-To: <20080402055831.GG103491721@sgi.com> References: <20080325185453.3a1957dd@galadriel.home> <20080325233611.GW103491721@sgi.com> <20080401140035.46470306@galadriel.home> <20080402055831.GG103491721@sgi.com> Organization: Intellique X-Mailer: Claws Mail 2.9.1 (GTK+ 2.8.20; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_N0nVzd=sq85jQ=VAox5cYeJ" X-Barracuda-Connect: smtp7-g19.free.fr[212.27.42.64] X-Barracuda-Start-Time: 1207136052 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.1, rules version 3.1.46617 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15160 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs --MP_N0nVzd=sq85jQ=VAox5cYeJ Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Le Wed, 2 Apr 2008 15:58:31 +1000 vous =E9criviez: > The log is rather garbled - can you repost? Also, XFS usually outputs > an error message before the stack trace; can you make sure you > paste that as well (if it exists)? Well I attached the relevant part of kern.log; the message just before the crash is not very clear... You can see the other messages relevant to the disk error too. --=20 -------------------------------------------------- Emmanuel Florac www.intellique.com=20=20=20 -------------------------------------------------- --MP_N0nVzd=sq85jQ=VAox5cYeJ Content-Type: text/plain; name=log Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=log TWFyICA2IDA2OjI1OjA0IHN5c3RlbTMga2VybmVsOiAzdy05eHh4OiBzY3Np MDogQUVOOiBXQVJOSU5HICgweDA0OjB4MDAyMyk6IFNlY3RvciByZXBhaXIg Y29tcGxldGVkOnBvcnQ9NiwgTEJBPTB4RTZFMkEuDQpNYXIgIDYgMDY6MjU6 MDQgc3lzdGVtMyBrZXJuZWw6IFJlaXNlckZTOiB3YXJuaW5nOiBpc190cmVl X25vZGU6IG5vZGUgbGV2ZWwgMjg3ODQgZG9lcyBub3QgbWF0Y2ggdG8gdGhl IGV4cGVjdGVkIG9uZSAxDQpNYXIgIDYgMDY6MjU6MDQgc3lzdGVtMyBrZXJu ZWw6IFJlaXNlckZTOiBzZGExOiB3YXJuaW5nOiB2cy01MTUwOiBzZWFyY2hf Ynlfa2V5OiBpbnZhbGlkIGZvcm1hdCBmb3VuZCBpbiBibG9jayA3NTM2NzEu IEZzY2s/DQpNYXIgIDYgMDY6MjU6MDQgc3lzdGVtMyBrZXJuZWw6IFJlaXNl ckZTOiBzZGExOiB3YXJuaW5nOiB2cy0xMzA3MDogcmVpc2VyZnNfcmVhZF9s b2NrZWRfaW5vZGU6IGkvbyBmYWlsdXJlIG9jY3VycmVkIHRyeWluZyB0byBm aW5kIHN0YXQgZGF0YSBvZiBbMTg0MDQgMTg0NjMgMHgwIFNEXQ0KTWFyICA2 IDEwOjQyOjQ2IHN5c3RlbTMga2VybmVsOiAweDA6IDAwIDAwIDAwIDAwIDAw IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIA0KTWFyICA2IDEw OjQyOjQ2IHN5c3RlbTMga2VybmVsOiBGaWxlc3lzdGVtICJtZDAiOiBYRlMg aW50ZXJuYWwgZXJyb3IgeGZzX2FsbG9jX3JlYWRfYWdmIGF0IGxpbmUgMjE5 MCBvZiBmaWxlIGZzL3hmcy94ZnNfYWxsb2MuYy4gIENhbGxlciAweGMwMWY0 Yjg4DQpNYXIgIDYgMTA6NDI6NDYgc3lzdGVtMyBrZXJuZWw6ICBbeGZzX2Fs bG9jX3JlYWRfYWdmKzI0NC80MzJdIHhmc19hbGxvY19yZWFkX2FnZisweGY0 LzB4MWIwDQpNYXIgIDYgMTA6NDI6NDYgc3lzdGVtMyBrZXJuZWw6ICBbeGZz X2FsbG9jX2ZpeF9mcmVlbGlzdCsxMDAwLzExMjBdIHhmc19hbGxvY19maXhf ZnJlZWxpc3QrMHgzZTgvMHg0NjANCk1hciAgNiAxMDo0Mjo0NiBzeXN0ZW0z IGxhc3QgbWVzc2FnZSByZXBlYXRlZCAyIHRpbWVzDQpNYXIgIDYgMTA6NDI6 NDYgc3lzdGVtMyBrZXJuZWw6ICBbX3hmc190cmFuc19jb21taXQrNDg5Lzky OF0gX3hmc190cmFuc19jb21taXQrMHgxZTkvMHgzYTANCk1hciAgNiAxMDo0 Mjo0NiBzeXN0ZW0zIGtlcm5lbDogIFt4ZnNfZnJlZV9leHRlbnQrMTUyLzIy NF0geGZzX2ZyZWVfZXh0ZW50KzB4OTgvMHhlMA0KTWFyICA2IDEwOjQyOjQ2 IHN5c3RlbTMga2VybmVsOiAgW3hmc19ibWFwX2ZpbmlzaCsyNjMvNDAwXSB4 ZnNfYm1hcF9maW5pc2grMHgxMDcvMHgxOTANCk1hciAgNiAxMDo0Mjo0NiBz eXN0ZW0zIGtlcm5lbDogIFt4ZnNfaXRydW5jYXRlX2ZpbmlzaCs1NDQvOTc2 XSB4ZnNfaXRydW5jYXRlX2ZpbmlzaCsweDIyMC8weDNkMA0KTWFyICA2IDEw OjQyOjQ2IHN5c3RlbTMga2VybmVsOiAgW3hmc190cmFuc19pam9pbis0My8x MjhdIHhmc190cmFuc19pam9pbisweDJiLzB4ODANCk1hciAgNiAxMDo0Mjo0 NiBzeXN0ZW0zIGtlcm5lbDogIFt4ZnNfaW5hY3RpdmUrMTE5NS8xMjk2XSB4 ZnNfaW5hY3RpdmUrMHg0YWIvMHg1MTANCk1hciAgNiAxMDo0Mjo0NiBzeXN0 ZW0zIGtlcm5lbDogIFt4ZnNfZnNfY2xlYXJfaW5vZGUrMTU2LzE5Ml0geGZz X2ZzX2NsZWFyX2lub2RlKzB4OWMvMHhjMA0KTWFyICA2IDEwOjQyOjQ2IHN5 c3RlbTMga2VybmVsOiAgW2ludmFsaWRhdGVfaW5vZGVfYnVmZmVycysyMS8x MTJdIGludmFsaWRhdGVfaW5vZGVfYnVmZmVycysweDE1LzB4NzANCk1hciAg NiAxMDo0Mjo0NiBzeXN0ZW0zIGtlcm5lbDogIFtjbGVhcl9pbm9kZSsyMTIv MzIwXSBjbGVhcl9pbm9kZSsweGQ0LzB4MTQwDQpNYXIgIDYgMTA6NDI6NDYg c3lzdGVtMyBrZXJuZWw6ICBbdHJ1bmNhdGVfaW5vZGVfcGFnZXMrMjMvMzJd IHRydW5jYXRlX2lub2RlX3BhZ2VzKzB4MTcvMHgyMA0KTWFyICA2IDEwOjQy OjQ2IHN5c3RlbTMga2VybmVsOiAgW2dlbmVyaWNfZGVsZXRlX2lub2RlKzI2 NC8yNzJdIGdlbmVyaWNfZGVsZXRlX2lub2RlKzB4MTA4LzB4MTEwDQpNYXIg IDYgMTA6NDI6NDYgc3lzdGVtMyBrZXJuZWw6ICBbaXB1dCs4My8xMTJdIGlw dXQrMHg1My8weDcwDQpNYXIgIDYgMTA6NDI6NDYgc3lzdGVtMyBrZXJuZWw6 ICBbZG9fdW5saW5rYXQrMTg2LzI3Ml0gZG9fdW5saW5rYXQrMHhiYS8weDEx MA0KTWFyICA2IDEwOjQyOjQ2IHN5c3RlbTMga2VybmVsOiAgW3N5c19mY250 bDY0Kzg5LzE0NF0gc3lzX2ZjbnRsNjQrMHg1OS8weDkwDQpNYXIgIDYgMTA6 NDI6NDYgc3lzdGVtMyBrZXJuZWw6ICBbc3lzY2FsbF9jYWxsKzcvMTFdIHN5 c2NhbGxfY2FsbCsweDcvMHhiDQpNYXIgIDYgMTA6NDI6NDYgc3lzdGVtMyBr ZXJuZWw6IHhmc19mb3JjZV9zaHV0ZG93bihtZDAsMHg4KSBjYWxsZWQgZnJv bSBsaW5lIDQyNjcgb2YgZmlsZSBmcy94ZnMveGZzX2JtYXAuYy4gIFJldHVy biBhZGRyZXNzID0gMHhjMDI1NmIyOQ0KTWFyICA2IDEwOjQyOjQ2IHN5c3Rl bTMga2VybmVsOiBGaWxlc3lzdGVtICJtZDAiOiBDb3JydXB0aW9uIG9mIGlu LW1lbW9yeSBkYXRhIGRldGVjdGVkLiAgU2h1dHRpbmcgZG93biBmaWxlc3lz dGVtOiBtZDANCk1hciAgNiAxMDo0Mjo0NiBzeXN0ZW0zIGtlcm5lbDogUGxl YXNlIHVtb3VudCB0aGUgZmlsZXN5c3RlbSwgYW5kIHJlY3RpZnkgdGhlIHBy b2JsZW0ocykNCk1hciAgNiAxMDo1MToxOSBzeXN0ZW0zIGtlcm5lbDogM3ct OXh4eDogc2NzaTA6IEFFTjogV0FSTklORyAoMHgwNDoweDAwMjMpOiBTZWN0 b3IgcmVwYWlyIGNvbXBsZXRlZDpwb3J0PTYsIExCQT0weEU2RTAwLg0KTWFy ICA2IDEwOjUxOjIwIHN5c3RlbTMga2VybmVsOiAzdy05eHh4OiBzY3NpMDog QUVOOiBXQVJOSU5HICgweDA0OjB4MDAyMyk6IFNlY3RvciByZXBhaXIgY29t cGxldGVkOnBvcnQ9NiwgTEJBPTB4RTZEQ0EuDQo= --MP_N0nVzd=sq85jQ=VAox5cYeJ-- From owner-xfs@oss.sgi.com Wed Apr 2 05:16:28 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 05:16:36 -0700 (PDT) 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,STOX_REPLY_TYPE 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 m32CGRm6007138 for ; Wed, 2 Apr 2008 05:16:28 -0700 X-ASG-Debug-ID: 1207138622-3678018e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo201.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7CA301069942 for ; Wed, 2 Apr 2008 05:17:02 -0700 (PDT) Received: from tyo201.gate.nec.co.jp (TYO201.gate.nec.co.jp [202.32.8.193]) by cuda.sgi.com with ESMTP id 0QHbnAYc1hOOM8JM for ; Wed, 02 Apr 2008 05:17:02 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate54B.nec.co.jp [10.7.69.195]) by tyo201.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m32CH0LP029798; Wed, 2 Apr 2008 21:17:00 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m32CH0w05545; Wed, 2 Apr 2008 21:17:00 +0900 (JST) Received: from togyo.jp.nec.com (togyo.jp.nec.com [10.26.220.4]) by mailsv3.nec.co.jp (8.13.8/8.13.4) with ESMTP id m32CH0wa022192; Wed, 2 Apr 2008 21:17:00 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Wed, 2 Apr 2008 21:16:59 +0900 Message-Id: <3AF481B79787436E8E20D6C597D5DD1C@nsl.ad.nec.co.jp> From: "Takashi Sato" To: "David Chinner" Cc: , , , , References: <20080328180736t-sato@mail.jp.nec.com> <20080331000057.GI108924158@sgi.com> <2530BB4B166747659C8F65C9C3DE7CFB@nsl.ad.nec.co.jp> <20080402062147.GH103491721@sgi.com> In-Reply-To: <20080402062147.GH103491721@sgi.com> X-ASG-Orig-Subj: Re: [RFC PATCH 2/2] Add timeout feature Subject: Re: [RFC PATCH 2/2] Add timeout feature Date: Wed, 2 Apr 2008 21:16:59 +0900 MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Windows Mail 6.0.6000.16480 X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6000.16545 X-Barracuda-Connect: TYO201.gate.nec.co.jp[202.32.8.193] X-Barracuda-Start-Time: 1207138623 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.1, rules version 3.1.46621 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15161 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs Hi, David Chinner wrote: >> Exactly my timeout feature is only for an application, not for >> freeze_bdev(). >> I think it is needed for the situation we can't unfreeze from userspace. >> (e.g. Freezing the root filesystem) > > Ummm - why can't you unfreeze the root fs from userspace? freezing > only prevents modification to the filesystem. A frozen filesystem is > effectively a read-only filesystem... > > On XFS: > > # xfs_freeze -f / > # echo $? > 0 > # xfs_freeze -u / > # echo $? > 0 Yes. If we have already logged in, we can unfreeze as above. But if not, we cannot log in and unfreeze because the modification of /var/log/wtmp is blocked in the log-in procedure. The timeout feature will work in such case. Cheers, Takashi From owner-xfs@oss.sgi.com Wed Apr 2 15:07:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 15:07:40 -0700 (PDT) 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.0 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 m32M7PR1003507 for ; Wed, 2 Apr 2008 15:07:29 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id IAA22127; Thu, 3 Apr 2008 08:07:54 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m32M7qsT119833493; Thu, 3 Apr 2008 08:07:53 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m32M7oWn119843479; Thu, 3 Apr 2008 08:07:50 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 3 Apr 2008 08:07:50 +1000 From: David Chinner To: Emmanuel Florac Cc: David Chinner , xfs@oss.sgi.com Subject: Re: Serious XFS crash Message-ID: <20080402220750.GJ103491721@sgi.com> References: <20080325185453.3a1957dd@galadriel.home> <20080325233611.GW103491721@sgi.com> <20080401140035.46470306@galadriel.home> <20080402055831.GG103491721@sgi.com> <20080402133003.4bb043e4@galadriel.home> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20080402133003.4bb043e4@galadriel.home> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15162 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 01:30:03PM +0200, Emmanuel Florac wrote: > Le Wed, 2 Apr 2008 15:58:31 +1000 vous écriviez: > > > The log is rather garbled - can you repost? Also, XFS usually outputs > > an error message before the stack trace; can you make sure you > > paste that as well (if it exists)? > > Well I attached the relevant part of kern.log; the message just before > the crash is not very clear... You can see the other messages relevant > to the disk error too. Like the fact reiser is also complaining about corrupted blocks? > Mar 6 06:25:04 system3 kernel: 3w-9xxx: scsi0: AEN: WARNING (0x04:0x0023): Sector repair completed:port=6, LBA=0xE6E2A. > Mar 6 06:25:04 system3 kernel: ReiserFS: warning: is_tree_node: node level 28784 does not match to the expected one 1 > Mar 6 06:25:04 system3 kernel: ReiserFS: sda1: warning: vs-5150: search_by_key: invalid format found in block 753671. Fsck? > Mar 6 06:25:04 system3 kernel: ReiserFS: sda1: warning: vs-13070: reiserfs_read_locked_inode: i/o failure occurred trying to find stat data of [18404 18463 0x0 SD] and: > Mar 6 10:42:46 system3 kernel: 0x0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > Mar 6 10:42:46 system3 kernel: Filesystem "md0": XFS internal error xfs_alloc_read_agf at line 2190 of file fs/xfs/xfs_alloc.c. Caller 0xc01f4b88 That's an AGF made up of zeros instead of real metadata. Something has trashed it - perhaps a "sector repair"? > Mar 6 10:42:46 system3 kernel: Please umount the filesystem, and rectify the problem(s) > Mar 6 10:51:19 system3 kernel: 3w-9xxx: scsi0: AEN: WARNING (0x04:0x0023): Sector repair completed:port=6, LBA=0xE6E00. > Mar 6 10:51:20 system3 kernel: 3w-9xxx: scsi0: AEN: WARNING (0x04:0x0023): Sector repair completed:port=6, LBA=0xE6DCA. I'd go and find whatever disk is located at LBA 0xE6DCA-0xE6E2A and replace it - if there are that many repairs needed on it, it's likely to be failing.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 2 15:23:21 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 15:23:29 -0700 (PDT) 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.0 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 m32MNH2a006373 for ; Wed, 2 Apr 2008 15:23:19 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id IAA22663; Thu, 3 Apr 2008 08:23:52 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m32MNosT119784846; Thu, 3 Apr 2008 08:23:52 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m32MNl6X119772053; Thu, 3 Apr 2008 08:23:47 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 3 Apr 2008 08:23:47 +1000 From: David Chinner To: Andi Kleen Cc: David Chinner , Lachlan McIlroy , xfs-dev , xfs-oss Subject: Re: [Patch] Cacheline align xlog_t Message-ID: <20080402222347.GK103491721@sgi.com> References: <20080401231552.GV103491721@sgi.com> <47F3293C.6090708@sgi.com> <20080402054403.GF103491721@sgi.com> <87myocek4o.fsf@basil.nowhere.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87myocek4o.fsf@basil.nowhere.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15163 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 10:28:07AM +0200, Andi Kleen wrote: > David Chinner writes: > > > > This just means that the start of the structure is cacheline > > aligned. I don't think the internal alignment commands force the > > entire structure to be cacheline aligned, merely pad the struture > > internally. In that case, even though the specific internal parts of > > the structure are on separate cache lines, there's no guarantee that > > all the related members are on the same cacheline. Hence I'm > > explicitly stating the exact alignment I want for the structure.... > > Isn't the structure dynamically allocated anyways? > The full type alignment really only matters for statics/globals > where the linker can handle it. Ah, right you are. My bad. > For the dynamic allocation you would rather need to make sure it > starts at a cache line boundary explicitely because the allocator doesn't > know the alignment of the target type, otherwise your careful > padding might be useless. Yup. Is there an allocator function gives us cacheline aligned allocation (apart from a slab initialised with SLAB_HWCACHE_ALIGN)? There isn't one, right? Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 2 15:23:52 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 15:24:02 -0700 (PDT) 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.4 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 m32MNodH006515 for ; Wed, 2 Apr 2008 15:23:52 -0700 X-ASG-Debug-ID: 1207175065-1c15018f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9B0B0730A6B for ; Wed, 2 Apr 2008 15:24:25 -0700 (PDT) Received: from smtp7-g19.free.fr (smtp7-g19.free.fr [212.27.42.64]) by cuda.sgi.com with ESMTP id hnBAH6MHZKYTIufW for ; Wed, 02 Apr 2008 15:24:25 -0700 (PDT) Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by smtp7-g19.free.fr (Postfix) with ESMTP id ACAC73227FB; Thu, 3 Apr 2008 00:24:24 +0200 (CEST) Received: from galadriel.home (pla78-1-82-235-234-79.fbx.proxad.net [82.235.234.79]) by smtp7-g19.free.fr (Postfix) with ESMTP id 648033227E9; Thu, 3 Apr 2008 00:24:24 +0200 (CEST) Date: Thu, 3 Apr 2008 00:22:48 +0200 From: Emmanuel Florac To: David Chinner Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Serious XFS crash Subject: Re: Serious XFS crash Message-ID: <20080403002248.4bd263e6@galadriel.home> In-Reply-To: <20080402220750.GJ103491721@sgi.com> References: <20080325185453.3a1957dd@galadriel.home> <20080325233611.GW103491721@sgi.com> <20080401140035.46470306@galadriel.home> <20080402055831.GG103491721@sgi.com> <20080402133003.4bb043e4@galadriel.home> <20080402220750.GJ103491721@sgi.com> Organization: Intellique X-Mailer: Claws Mail 2.9.1 (GTK+ 2.8.20; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp7-g19.free.fr[212.27.42.64] X-Barracuda-Start-Time: 1207175066 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.1, rules version 3.1.46662 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m32MNrdH006521 X-archive-position: 15164 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Thu, 3 Apr 2008 08:07:50 +1000 vous écriviez: > I'd go and find whatever disk is located at LBA 0xE6DCA-0xE6E2A and > replace it - if there are that many repairs needed on it, it's likely > to be failing.... > Oh, it failed and I changed it. However it's a RAID-5 and though it appeared corrected, as you've seen the XFS fs crashed for no apparent reason (there was little or no activity at the time of the march 23rd crash) later. I was wondering if it could be related, for instance if some garbage may have remained hidden somewhere and break it later, like a standing nail waiting for someone to step on it... -- -------------------------------------------------- Emmanuel Florac www.intellique.com -------------------------------------------------- From owner-xfs@oss.sgi.com Wed Apr 2 17:22:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 17:22:23 -0700 (PDT) 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 (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 m330MC5j027016 for ; Wed, 2 Apr 2008 17:22:14 -0700 X-ASG-Debug-ID: 1207182167-2f2802790000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from filer.fsl.cs.sunysb.edu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9B0E68EE190; Wed, 2 Apr 2008 17:22:47 -0700 (PDT) Received: from filer.fsl.cs.sunysb.edu (filer.fsl.cs.sunysb.edu [130.245.126.2]) by cuda.sgi.com with ESMTP id WjA1HFUXL6BH05FS; Wed, 02 Apr 2008 17:22:47 -0700 (PDT) Received: from josefsipek.net (baal.fsl.cs.sunysb.edu [130.245.126.78]) by filer.fsl.cs.sunysb.edu (8.12.11.20060308/8.13.1) with ESMTP id m330MiPl025856; Wed, 2 Apr 2008 20:22:44 -0400 Received: by josefsipek.net (Postfix, from userid 1000) id 933C41C00E74; Wed, 2 Apr 2008 20:22:46 -0400 (EDT) Date: Wed, 2 Apr 2008 20:22:46 -0400 From: "Josef 'Jeff' Sipek" To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 1/7] XFS: Name operation vector for hash and compare Subject: Re: [PATCH 1/7] XFS: Name operation vector for hash and compare Message-ID: <20080403002246.GB5211@josefsipek.net> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062707.797672682@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080402062707.797672682@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.16 (2007-06-11) X-Barracuda-Connect: filer.fsl.cs.sunysb.edu[130.245.126.2] X-Barracuda-Start-Time: 1207182168 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.1, rules version 3.1.46669 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15165 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jeffpc@josefsipek.net Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 04:25:09PM +1000, Barry Naujok wrote: ... > Index: kern_ci/fs/xfs/xfs_da_btree.h > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_da_btree.h > +++ kern_ci/fs/xfs/xfs_da_btree.h > @@ -99,6 +99,15 @@ typedef struct xfs_da_node_entry xfs_da_ > *========================================================================*/ > > /* > + * Search comparison results > + */ > +typedef enum { > + XFS_CMP_DIFFERENT, /* names are completely different */ > + XFS_CMP_EXACT, /* names are exactly the same */ > + XFS_CMP_CASE /* names are same but differ in case */ > +} xfs_dacmp_t; It is somewhat unfortunate that the "matches" case has multiple values. memcmp, strcmp, etc. return 0 if the two match, and you make >0 a match, and 0 if they don't. This is really a nitpick, and I don't think there is a way around...if everyone uses the enum all should be fine. ... > +/* > + * Name ops for directory and/or attr name operations > + */ > + > +typedef xfs_dahash_t (*xfs_hashname_t)(const uchar_t *, int); > +typedef xfs_dacmp_t (*xfs_compname_t)(const uchar_t *, int, > + const uchar_t *, int); Why have typedefs for function pointers? Sometimes, they even cause problems (I remember Eric finding a nasty 64-bit bug related to a function pointer typedef). Since IRIX isn't on the supported OS list anymore, what's the policy with coding style within XFS? ... > Index: kern_ci/fs/xfs/xfs_dir2.h > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_dir2.h > +++ kern_ci/fs/xfs/xfs_dir2.h > @@ -85,6 +85,12 @@ extern int xfs_dir_canenter(struct xfs_t > char *name, int namelen); > extern int xfs_dir_ino_validate(struct xfs_mount *mp, xfs_ino_t ino); > > +#define xfs_dir_hashname(dp, n, l) \ > + ((dp)->i_mount->m_dirnameops->hashname((n), (l))) > + > +#define xfs_dir_compname(dp, n1, l1, n2, l2) \ > + ((dp)->i_mount->m_dirnameops->compname((n1), (l1), (n2), (l2))) #define vs. static inline... I guess this comes back to my question before...what is the coding style direction you want XFS to go in? More Linux-like (static inline)? or keep it more IRIX-like (#define)? ... > --- kern_ci.orig/fs/xfs/xfs_dir2_block.c > +++ kern_ci/fs/xfs/xfs_dir2_block.c ... > @@ -698,19 +699,33 @@ xfs_dir2_block_lookup_int( > ((char *)block + xfs_dir2_dataptr_to_off(mp, addr)); > /* > * Compare, if it's right give back buffer & entry number. > + * > + * lookup case - use nameops; > + * > + * replace/remove case - as lookup has been already been > + * performed, look for an exact match using the fast method > */ > - if (dep->namelen == args->namelen && > - dep->name[0] == args->name[0] && > - memcmp(dep->name, args->name, args->namelen) == 0) { > + cmp = args->oknoent ? > + xfs_dir_compname(dp, dep->name, dep->namelen, > + args->name, args->namelen) : > + xfs_da_compname(dep->name, dep->namelen, > + args->name, args->namelen); Initial reaction: What's going on here? if oknoent: use the mount-determined cmp function else: use case-sensitive That combined with the comment above makes it understandable...but what does "oknoent" have to do with the whole thing? Wouldn't "exact_match" be a better name? Aside from the oknoent rename, I might even turn the ?: into a if-else. > + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { > + args->cmpresult = cmp; > *bpp = bp; > *entno = mid; > - return 0; > + if (cmp == XFS_CMP_EXACT) > + return 0; > } I'd put a comment above the above block...reminding whoever that if you get XFS_CMP_CASE, you keep scanning to make sure you don't get XFS_CMP_EXACT. ... > @@ -1391,19 +1394,49 @@ xfs_dir2_leaf_lookup_int( > xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); > /* > * If it matches then return it. > + * > + * lookup case - use nameops; > + * > + * replace/remove case - as lookup has been already been > + * performed, look for an exact match using the fast method > */ > - if (dep->namelen == args->namelen && > - dep->name[0] == args->name[0] && > - memcmp(dep->name, args->name, args->namelen) == 0) { > - *dbpp = dbp; > + cmp = args->oknoent ? > + xfs_dir_compname(dp, dep->name, dep->namelen, > + args->name, args->namelen) : > + xfs_da_compname(dep->name, dep->namelen, > + args->name, args->namelen); Same as above. This code is very similar to the above...maybe they should be factored out in some cleanup patch series. ... > @@ -578,19 +579,27 @@ xfs_dir2_leafn_lookup_int( > /* > * Compare the entry, return it if it matches. > */ > - if (dep->namelen == args->namelen && > - dep->name[0] == args->name[0] && > - memcmp(dep->name, args->name, args->namelen) == 0) { > + cmp = args->oknoent ? > + xfs_dir_compname(dp, dep->name, dep->namelen, > + args->name, args->namelen): > + xfs_da_compname(dep->name, dep->namelen, > + args->name, args->namelen); And again, the same applies. :) ... > + } > } > } > } Side note: That's a lot of nesting...yuck :) Josef 'Jeff' Sipek. -- UNIX is user-friendly ... it's just selective about who it's friends are From owner-xfs@oss.sgi.com Wed Apr 2 17:39:53 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 17:40:00 -0700 (PDT) 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.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, J_CHICKENPOX_72 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 m330dpHt029476 for ; Wed, 2 Apr 2008 17:39:53 -0700 X-ASG-Debug-ID: 1207183227-353502bf0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from filer.fsl.cs.sunysb.edu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 444658EDFE8; Wed, 2 Apr 2008 17:40:27 -0700 (PDT) Received: from filer.fsl.cs.sunysb.edu (filer.fsl.cs.sunysb.edu [130.245.126.2]) by cuda.sgi.com with ESMTP id doLVljxsRXvXV5Rx; Wed, 02 Apr 2008 17:40:27 -0700 (PDT) Received: from josefsipek.net (baal.fsl.cs.sunysb.edu [130.245.126.78]) by filer.fsl.cs.sunysb.edu (8.12.11.20060308/8.13.1) with ESMTP id m330ZcZW027519; Wed, 2 Apr 2008 20:35:38 -0400 Received: by josefsipek.net (Postfix, from userid 1000) id 4EC8D1C00E74; Wed, 2 Apr 2008 20:35:39 -0400 (EDT) Date: Wed, 2 Apr 2008 20:35:39 -0400 From: "Josef 'Jeff' Sipek" To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 2/7] XFS: ASCII case-insensitive support Subject: Re: [PATCH 2/7] XFS: ASCII case-insensitive support Message-ID: <20080403003539.GC5211@josefsipek.net> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062708.071715758@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080402062708.071715758@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.16 (2007-06-11) X-Barracuda-Connect: filer.fsl.cs.sunysb.edu[130.245.126.2] X-Barracuda-Start-Time: 1207183228 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.1, rules version 3.1.46671 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15166 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jeffpc@josefsipek.net Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 04:25:10PM +1000, Barry Naujok wrote: > Implement ASCII case-insensitive support. It's primary purpose > is for supporting existing filesystems that already use this > case-insensitive mode migrated from IRIX. But, if you only need > ASCII-only case-insensitive support (ie. English only) and will > never use another language, then this mode is perfectly adequate. > > ASCII-CI is implemented by generating hashes based on lower-case > letters and doing lower-case compares. It implements a new > xfs_nameops vector for doing the hashes and comparisons for > all filename operations. > > It also overrides the Linux dentry cache operations with its > own hash and compare functions (the same as used in the xfs_nameops > vector). > > To create a filesystem with this CI mode, use: > # mkfs.xfs -n version=ci Since you have to mkfs anyway, why not just use the unicode mkfs option, and the ci mount option. Then, you can just drop this patch :) Josef 'Jeff' Sipek. -- Ready; T=0.01/0.01 20:32:39 From owner-xfs@oss.sgi.com Wed Apr 2 17:49:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 17:49:23 -0700 (PDT) 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.0 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 m330nBpS031090 for ; Wed, 2 Apr 2008 17:49:15 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA27180; Thu, 3 Apr 2008 10:49:39 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m330nbsT119762026; Thu, 3 Apr 2008 10:49:38 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m330nYeY119750342; Thu, 3 Apr 2008 10:49:34 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 3 Apr 2008 10:49:34 +1000 From: David Chinner To: Emmanuel Florac Cc: David Chinner , xfs@oss.sgi.com Subject: Re: Serious XFS crash Message-ID: <20080403004934.GM103491721@sgi.com> References: <20080325185453.3a1957dd@galadriel.home> <20080325233611.GW103491721@sgi.com> <20080401140035.46470306@galadriel.home> <20080402055831.GG103491721@sgi.com> <20080402133003.4bb043e4@galadriel.home> <20080402220750.GJ103491721@sgi.com> <20080403002248.4bd263e6@galadriel.home> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20080403002248.4bd263e6@galadriel.home> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15167 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, Apr 03, 2008 at 12:22:48AM +0200, Emmanuel Florac wrote: > Le Thu, 3 Apr 2008 08:07:50 +1000 vous écriviez: > > > I'd go and find whatever disk is located at LBA 0xE6DCA-0xE6E2A and > > replace it - if there are that many repairs needed on it, it's likely > > to be failing.... > > > > Oh, it failed and I changed it. However it's a RAID-5 and though it > appeared corrected, as you've seen the XFS fs crashed for no apparent > reason (there was little or no activity at the time of the march 23rd > crash) later. I was wondering if it could be related, for instance if > some garbage may have remained hidden somewhere and break it later, > like a standing nail waiting for someone to step on it... Yes, entirely possible. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 2 18:05:50 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 18:05:58 -0700 (PDT) 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 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 m3315oWx001067 for ; Wed, 2 Apr 2008 18:05:50 -0700 X-ASG-Debug-ID: 1207184783-1d1e032e0000-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 95BB0731FE1 for ; Wed, 2 Apr 2008 18:06:23 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id IVcFAq3MqrmmpOkK for ; Wed, 02 Apr 2008 18:06:23 -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 2DD1E18003EEC; Wed, 2 Apr 2008 20:06:22 -0500 (CDT) Message-ID: <47F42D8D.3030406@sandeen.net> Date: Wed, 02 Apr 2008 20:06:21 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: David Chinner CC: xfs-oss X-ASG-Orig-Subj: [PATCH V2] combined features2 fixup patches (updating/rewriting what was sent in other threads) Subject: [PATCH V2] combined features2 fixup patches (updating/rewriting what was sent in other threads) References: <47F0546C.9070709@sandeen.net> <20080402002940.GZ103491721@sgi.com> In-Reply-To: <20080402002940.GZ103491721@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1207184786 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.1, rules version 3.1.46672 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15168 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs (Addressing Dave's review point) Ensure "both" features2 slots are consistent, and set mp attr2 flag. Since older kernels may look in the sb_bad_features2 slot for flags, rather than zeroing it out on fixup, we should make it equal to the sb_features2 value. Also, if the ATTR2 flag was not found prior to features2 fixup, it was not set in the mount flags, so re-check after the fixup so that the current session will use the feature. Also fix up the comments to reflect these changes. Signed-off-by: Eric Sandeen --- Index: linux-2.6-xfs/fs/xfs/xfs_mount.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.c +++ linux-2.6-xfs/fs/xfs/xfs_mount.c @@ -967,23 +967,32 @@ xfs_mountfs( xfs_mount_common(mp, sbp); /* - * Check for a bad features2 field alignment. This happened on - * some platforms due to xfs_sb_t not being 64bit size aligned - * when sb_features was added and hence the compiler put it in - * the wrong place. + * Check for a mismatched features2 values. Older kernels + * read & wrote into the wrong sb offset for sb_features2 + * on some platforms due to xfs_sb_t not being 64bit size aligned + * when sb_features2 was added, which made older superblock + * reading/writing routines swap it as a 64-bit value. * - * If we detect a bad field, we or the set bits into the existing - * features2 field in case it has already been modified and we - * don't want to lose any features. Zero the bad one and mark - * the two fields as needing updates once the transaction subsystem - * is online. + * For backwards compatibility, we make both slots equal. + * + * If we detect a mismatched field, we OR the set bits into the + * existing features2 field in case it has already been modified; we + * don't want to lose any features. We then update the bad location + * with the ORed value so that older kernels will see any features2 + * flags, and mark the two fields as needing updates once the + * transaction subsystem is online. */ - if (xfs_sb_has_bad_features2(sbp)) { + if (xfs_sb_has_mismatched_features2(sbp)) { cmn_err(CE_WARN, "XFS: correcting sb_features alignment problem"); sbp->sb_features2 |= sbp->sb_bad_features2; - sbp->sb_bad_features2 = 0; + sbp->sb_bad_features2 = sbp->sb_features2; update_flags |= XFS_SB_FEATURES2 | XFS_SB_BAD_FEATURES2; + /* + * Re-check for ATTR2 from the bad_features2 slot. + */ + if (xfs_sb_version_hasattr2(&mp->m_sb)) + mp->m_flags |= XFS_MOUNT_ATTR2; } /* @@ -1890,7 +1899,8 @@ xfs_uuid_unmount( /* * Used to log changes to the superblock unit and width fields which could - * be altered by the mount options. Only the first superblock is updated. + * be altered by the mount options, as well as any potential sb_features2 + * fixup. Only the first superblock is updated. */ STATIC void xfs_mount_log_sb( Index: linux-2.6-xfs/fs/xfs/xfs_sb.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_sb.h +++ linux-2.6-xfs/fs/xfs/xfs_sb.h @@ -320,11 +320,12 @@ static inline int xfs_sb_good_version(xf #endif /* __KERNEL__ */ /* - * Detect a bad features2 field + * Detect a mismatched features2 field. Older kernels read/wrote + * this into the wrong slot, so to be safe we keep them in sync. */ -static inline int xfs_sb_has_bad_features2(xfs_sb_t *sbp) +static inline int xfs_sb_has_mismatched_features2(xfs_sb_t *sbp) { - return (sbp->sb_bad_features2 != 0); + return (sbp->sb_bad_features2 != sbp->sb_features2); } static inline unsigned xfs_sb_version_tonew(unsigned v) From owner-xfs@oss.sgi.com Wed Apr 2 18:28:47 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 18:28:58 -0700 (PDT) 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.0 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 m331Shv4004533 for ; Wed, 2 Apr 2008 18:28:45 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA28254; Thu, 3 Apr 2008 11:29:15 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m331TDsT118615431; Thu, 3 Apr 2008 11:29:14 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m331TC8L119826180; Thu, 3 Apr 2008 11:29:12 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 3 Apr 2008 11:29:12 +1000 From: David Chinner To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH 1/7] XFS: Name operation vector for hash and compare Message-ID: <20080403012912.GO103491721@sgi.com> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062707.797672682@chook.melbourne.sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080402062707.797672682@chook.melbourne.sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15169 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 04:25:09PM +1000, Barry Naujok wrote: > Adds two pieces of functionality for the basis of case-insensitive > support in XFS: > > 1. A comparison result enumerated type: xfs_dacmp_t. It represents an > exact match, case-insensitive match or no match at all. This patch > only implements different and exact results. > > 2. xfs_nameops vector for specifying how to perform the hash generation > of filenames and comparision methods. In this patch the hash vector > points to the existing xfs_da_hashname function and the comparison > method does a length compare, and if the same, does a memcmp and > return the xfs_dacmp_t result. > > All filename functions that use the hash (create, lookup remove, rename, > etc) now use the xfs_nameops.hashname function and all directory lookup > functions also use the xfs_nameops.compname function. Ok, so internally I see this is not the case. I'll comment on that inline. > The lookup functions also handle case-insensitive results even though > the default comparison function cannot return that. And important > aspect of the lookup functions is that an exact match always has > precedence over a case-insensitive. So while a case-insensitive match > is found, we have to keep looking just in case there is an exact > match. In the meantime, the info for the first case-insensitive match > is retained if no exact match is found. > > Signed-off-by: Barry Naujok ...... > } > > +xfs_dacmp_t > +xfs_da_compname(const uchar_t *name1, int len1, const uchar_t *name2, int len2) > +{ > + return (len1 == len2 && memcmp(name1, name2, len1) == 0) ? > + XFS_CMP_EXACT : XFS_CMP_DIFFERENT; > +} > + > +struct xfs_nameops xfs_default_nameops = { const. > #ifdef __KERNEL__ > /*======================================================================== > @@ -248,7 +271,12 @@ xfs_daddr_t xfs_da_reada_buf(struct xfs_ > int xfs_da_shrink_inode(xfs_da_args_t *args, xfs_dablk_t dead_blkno, > xfs_dabuf_t *dead_buf); > > +extern struct xfs_nameops xfs_default_nameops; Does this need global visibility? It's only needed in xfs_dir_mount(), right? > Index: kern_ci/fs/xfs/xfs_dir2.h > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_dir2.h > +++ kern_ci/fs/xfs/xfs_dir2.h > @@ -85,6 +85,12 @@ extern int xfs_dir_canenter(struct xfs_t > char *name, int namelen); > extern int xfs_dir_ino_validate(struct xfs_mount *mp, xfs_ino_t ino); > > +#define xfs_dir_hashname(dp, n, l) \ > + ((dp)->i_mount->m_dirnameops->hashname((n), (l))) > + > +#define xfs_dir_compname(dp, n1, l1, n2, l2) \ > + ((dp)->i_mount->m_dirnameops->compname((n1), (l1), (n2), (l2))) > + Static inline functions, please. > /* > * Utility routines for v2 directories. > */ > Index: kern_ci/fs/xfs/xfs_dir2_block.c > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_dir2_block.c > +++ kern_ci/fs/xfs/xfs_dir2_block.c > @@ -643,6 +643,7 @@ xfs_dir2_block_lookup_int( > int mid; /* binary search current idx */ > xfs_mount_t *mp; /* filesystem mount point */ > xfs_trans_t *tp; /* transaction pointer */ > + xfs_dacmp_t cmp; /* comparison result */ > > dp = args->dp; > tp = args->trans; > @@ -698,19 +699,33 @@ xfs_dir2_block_lookup_int( > ((char *)block + xfs_dir2_dataptr_to_off(mp, addr)); > /* > * Compare, if it's right give back buffer & entry number. > + * > + * lookup case - use nameops; > + * > + * replace/remove case - as lookup has been already been > + * performed, look for an exact match using the fast method > */ > - if (dep->namelen == args->namelen && > - dep->name[0] == args->name[0] && > - memcmp(dep->name, args->name, args->namelen) == 0) { > + cmp = args->oknoent ? > + xfs_dir_compname(dp, dep->name, dep->namelen, > + args->name, args->namelen) : > + xfs_da_compname(dep->name, dep->namelen, > + args->name, args->namelen); Why add this "fast path"? All you're saving here is a few instructions but making the code much harder to follow. cmp = xfs_dir_compname(dp, dep->name, dep->namelen, args->name, args->namelen); Will do exactly the same thing and I'd much prefer readable code over prematurely optimised code any day of the week.... > + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { > + args->cmpresult = cmp; > *bpp = bp; > *entno = mid; > - return 0; > + if (cmp == XFS_CMP_EXACT) > + return 0; > } > - } while (++mid < be32_to_cpu(btp->count) && be32_to_cpu(blp[mid].hashval) == hash); > + } while (++mid < be32_to_cpu(btp->count) && > + be32_to_cpu(blp[mid].hashval) == hash); > + > + ASSERT(args->oknoent); > + if (args->cmpresult == XFS_CMP_CASE) > + return 0; So if we find multiple case matches, we'll take the last we find? > /* > * No match, release the buffer and return ENOENT. > */ > - ASSERT(args->oknoent); > xfs_da_brelse(tp, bp); > return XFS_ERROR(ENOENT); Should we really be promoting that assert to before we return a successful case match? > @@ -1391,19 +1394,49 @@ xfs_dir2_leaf_lookup_int( > xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); > /* > * If it matches then return it. > + * > + * lookup case - use nameops; > + * > + * replace/remove case - as lookup has been already been > + * performed, look for an exact match using the fast method > */ > - if (dep->namelen == args->namelen && > - dep->name[0] == args->name[0] && > - memcmp(dep->name, args->name, args->namelen) == 0) { > - *dbpp = dbp; > + cmp = args->oknoent ? > + xfs_dir_compname(dp, dep->name, dep->namelen, > + args->name, args->namelen) : > + xfs_da_compname(dep->name, dep->namelen, > + args->name, args->namelen); Same again. > + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { > + args->cmpresult = cmp; > *indexp = index; > - return 0; > + if (cmp == XFS_CMP_EXACT) { > + /* > + * case exact match: release the case-insens. > + * match buffer if it exists and return the > + * current data buffer. > + */ > + if (cbp && cbp != dbp) > + xfs_da_brelse(tp, cbp); > + *dbpp = dbp; > + return 0; > + } > + cbp = dbp; > } > } > + ASSERT(args->oknoent); > + if (args->cmpresult == XFS_CMP_CASE) { > + /* > + * case-insensitive match: release current buffer and > + * return the buffer with the case-insensitive match. > + */ > + if (cbp != dbp) > + xfs_da_brelse(tp, dbp); > + *dbpp = cbp; > + return 0; > + } > /* > * No match found, return ENOENT. > */ > - ASSERT(args->oknoent); Same question about promoting the assert.... > @@ -578,19 +579,27 @@ xfs_dir2_leafn_lookup_int( > /* > * Compare the entry, return it if it matches. > */ > - if (dep->namelen == args->namelen && > - dep->name[0] == args->name[0] && > - memcmp(dep->name, args->name, args->namelen) == 0) { > + cmp = args->oknoent ? > + xfs_dir_compname(dp, dep->name, dep->namelen, > + args->name, args->namelen): > + xfs_da_compname(dep->name, dep->namelen, > + args->name, args->namelen); Same again. > @@ -907,9 +914,8 @@ xfs_dir2_sf_removename( > for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); > i < sfp->hdr.count; > i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { > - if (sfep->namelen == args->namelen && > - sfep->name[0] == args->name[0] && > - memcmp(sfep->name, args->name, args->namelen) == 0) { > + if (xfs_da_compname(sfep->name, sfep->namelen, > + args->name, args->namelen) == XFS_CMP_EXACT) { > ASSERT(xfs_dir2_sf_get_inumber(sfp, > xfs_dir2_sf_inumberp(sfep)) == > args->inumber); This only checks for an exact match - what is supposed to happen with a XFS_CMP_CASE return? > @@ -1044,9 +1050,9 @@ xfs_dir2_sf_replace( > for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); > i < sfp->hdr.count; > i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { > - if (sfep->namelen == args->namelen && > - sfep->name[0] == args->name[0] && > - memcmp(args->name, sfep->name, args->namelen) == 0) { > + if (xfs_da_compname(sfep->name, sfep->namelen, > + args->name, args->namelen) == > + XFS_CMP_EXACT) { ditto. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 2 18:32:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 18:32:25 -0700 (PDT) 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.0 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 m331W4RU005120 for ; Wed, 2 Apr 2008 18:32:06 -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 LAA28516; Thu, 3 Apr 2008 11:32:35 +1000 To: "Josef 'Jeff' Sipek" Subject: Re: [PATCH 7/7] XFS: NLS config option From: "Barry Naujok" Organization: SGI Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062709.577869936@chook.melbourne.sgi.com> <20080403012610.GD5211@josefsipek.net> Date: Thu, 03 Apr 2008 11:38:11 +1000 Message-ID: In-Reply-To: <20080403012610.GD5211@josefsipek.net> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m331W8RU005134 X-archive-position: 15170 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Thu, 03 Apr 2008 11:26:10 +1000, Josef 'Jeff' Sipek wrote: > On Wed, Apr 02, 2008 at 04:25:15PM +1000, Barry Naujok wrote: >> This optional patch implements the NLS support as a CONFIG option. > > Any reason this is a separate patch, and not part of the previous > patches? > > ... >> --- kern_ci.orig/fs/xfs/Kconfig >> +++ kern_ci/fs/xfs/Kconfig >> @@ -87,6 +87,16 @@ config XFS_UNICODE >> >> If you don't require UTF-8 enforcement, say N. >> >> +config XFS_UNICODE_NLS >> + bool "XFS NLS Unicode support >> + depends on XFS_UNICODE >> + help >> + NLS (Native Language Support) allows non-UTF8 locales to >> + interact with XFS Unicode support. To specify the character >> + set being used, use the "-n nls=" mount option. > > "mount option"? Or was that supposed to say mkfs? Hmm... typo: "-o nls=" in mount :) > from mount(8) manpage: > > -n Mount without writing in /etc/mtab. This is necessary for > example when /etc is on a read-only file system. > > ... >> Index: kern_ci/fs/xfs/xfs_unicode.h >> =================================================================== >> --- kern_ci.orig/fs/xfs/xfs_unicode.h >> +++ kern_ci/fs/xfs/xfs_unicode.h >> @@ -65,6 +65,8 @@ int xfs_unicode_validate(const uchar_t * >> int xfs_unicode_read_cft(struct xfs_mount *mp); >> void xfs_unicode_free_cft(const xfs_cft_t *cft); >> >> +#ifdef CONFIG_XFS_UNICODE_NLS >> + >> #define xfs_is_using_nls(mp) ((mp)->m_nls != NULL) >> >> int xfs_unicode_to_nls(struct xfs_mount *mp, const uchar_t *uni_name, >> @@ -73,7 +75,20 @@ int xfs_nls_to_unicode(struct xfs_mount >> int nls_namelen, const uchar_t **uni_name, int *uni_namelen); >> void xfs_unicode_nls_free(const uchar_t *src_name, const uchar_t >> *conv_name); >> >> -#else >> +#else /* CONFIG_XFS_UNICODE_NLS */ >> + >> +#define xfs_is_using_nls(mp) 0 >> + >> +#define xfs_unicode_to_nls(mp, uname, ulen, pnname, pnlen) \ >> + ((*(pnname)) = (uname), (*(pnlen)) = (ulen), 0) >> +#define xfs_nls_to_unicode(mp, nname, nlen, puname, pulen) \ >> + ((*(puname)) = (nname), (*(pulen)) = (nlen), \ >> + xfs_unicode_validate(nname, nlen)) > > While I commend your use of the comma operator, I really think those > should > be static inlines :) > > Josef 'Jeff' Sipek. > From owner-xfs@oss.sgi.com Wed Apr 2 18:39:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 18:39:43 -0700 (PDT) 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.0 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 m331dNOs006463 for ; Wed, 2 Apr 2008 18:39:28 -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 LAA28728; Thu, 3 Apr 2008 11:39:54 +1000 Date: Thu, 03 Apr 2008 11:45:33 +1000 To: "David Chinner" Subject: Re: [PATCH 1/7] XFS: Name operation vector for hash and compare From: "Barry Naujok" Organization: SGI Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062707.797672682@chook.melbourne.sgi.com> <20080403012912.GO103491721@sgi.com> Message-ID: In-Reply-To: <20080403012912.GO103491721@sgi.com> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m331dUOs006498 X-archive-position: 15171 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Thu, 03 Apr 2008 11:29:12 +1000, David Chinner wrote: > On Wed, Apr 02, 2008 at 04:25:09PM +1000, Barry Naujok wrote: >> Adds two pieces of functionality for the basis of case-insensitive >> support in XFS: >> >> 1. A comparison result enumerated type: xfs_dacmp_t. It represents an >> exact match, case-insensitive match or no match at all. This patch >> only implements different and exact results. >> >> 2. xfs_nameops vector for specifying how to perform the hash generation >> of filenames and comparision methods. In this patch the hash vector >> points to the existing xfs_da_hashname function and the comparison >> method does a length compare, and if the same, does a memcmp and >> return the xfs_dacmp_t result. >> >> All filename functions that use the hash (create, lookup remove, rename, >> etc) now use the xfs_nameops.hashname function and all directory lookup >> functions also use the xfs_nameops.compname function. > > Ok, so internally I see this is not the case. I'll comment on that > inline. Ah yes. Remove and rename rely on an exact match. Forgot about that when documenting this patch. >> The lookup functions also handle case-insensitive results even though >> the default comparison function cannot return that. And important >> aspect of the lookup functions is that an exact match always has >> precedence over a case-insensitive. So while a case-insensitive match >> is found, we have to keep looking just in case there is an exact >> match. In the meantime, the info for the first case-insensitive match >> is retained if no exact match is found. >> >> Signed-off-by: Barry Naujok > ...... >> } >> >> +xfs_dacmp_t >> +xfs_da_compname(const uchar_t *name1, int len1, const uchar_t *name2, >> int len2) >> +{ >> + return (len1 == len2 && memcmp(name1, name2, len1) == 0) ? >> + XFS_CMP_EXACT : XFS_CMP_DIFFERENT; >> +} >> + >> +struct xfs_nameops xfs_default_nameops = { > > const. > >> #ifdef __KERNEL__ >> /*======================================================================== >> @@ -248,7 +271,12 @@ xfs_daddr_t xfs_da_reada_buf(struct xfs_ >> int xfs_da_shrink_inode(xfs_da_args_t *args, xfs_dablk_t dead_blkno, >> xfs_dabuf_t *dead_buf); >> >> +extern struct xfs_nameops xfs_default_nameops; > > Does this need global visibility? It's only needed in xfs_dir_mount(), > right? Good point, I'll fix this. >> Index: kern_ci/fs/xfs/xfs_dir2.h >> =================================================================== >> --- kern_ci.orig/fs/xfs/xfs_dir2.h >> +++ kern_ci/fs/xfs/xfs_dir2.h >> @@ -85,6 +85,12 @@ extern int xfs_dir_canenter(struct xfs_t >> char *name, int namelen); >> extern int xfs_dir_ino_validate(struct xfs_mount *mp, xfs_ino_t ino); >> >> +#define xfs_dir_hashname(dp, n, l) \ >> + ((dp)->i_mount->m_dirnameops->hashname((n), (l))) >> + >> +#define xfs_dir_compname(dp, n1, l1, n2, l2) \ >> + ((dp)->i_mount->m_dirnameops->compname((n1), (l1), (n2), (l2))) >> + > > Static inline functions, please. Ok. >> /* >> * Utility routines for v2 directories. >> */ >> Index: kern_ci/fs/xfs/xfs_dir2_block.c >> =================================================================== >> --- kern_ci.orig/fs/xfs/xfs_dir2_block.c >> +++ kern_ci/fs/xfs/xfs_dir2_block.c >> @@ -643,6 +643,7 @@ xfs_dir2_block_lookup_int( >> int mid; /* binary search current idx */ >> xfs_mount_t *mp; /* filesystem mount point */ >> xfs_trans_t *tp; /* transaction pointer */ >> + xfs_dacmp_t cmp; /* comparison result */ >> >> dp = args->dp; >> tp = args->trans; >> @@ -698,19 +699,33 @@ xfs_dir2_block_lookup_int( >> ((char *)block + xfs_dir2_dataptr_to_off(mp, addr)); >> /* >> * Compare, if it's right give back buffer & entry number. >> + * >> + * lookup case - use nameops; >> + * >> + * replace/remove case - as lookup has been already been >> + * performed, look for an exact match using the fast method >> */ >> - if (dep->namelen == args->namelen && >> - dep->name[0] == args->name[0] && >> - memcmp(dep->name, args->name, args->namelen) == 0) { >> + cmp = args->oknoent ? >> + xfs_dir_compname(dp, dep->name, dep->namelen, >> + args->name, args->namelen) : >> + xfs_da_compname(dep->name, dep->namelen, >> + args->name, args->namelen); > > Why add this "fast path"? All you're saving here is a few > instructions but making the code much harder to follow. > > cmp = xfs_dir_compname(dp, dep->name, dep->namelen, > args->name, args->namelen); > > Will do exactly the same thing and I'd much prefer readable code > over prematurely optimised code any day of the week.... Ok, I'll change that code (might make it more CONFIG_XFS_CI capable ;) ) >> + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { >> + args->cmpresult = cmp; >> *bpp = bp; >> *entno = mid; >> - return 0; >> + if (cmp == XFS_CMP_EXACT) >> + return 0; >> } >> - } while (++mid < be32_to_cpu(btp->count) && >> be32_to_cpu(blp[mid].hashval) == hash); >> + } while (++mid < be32_to_cpu(btp->count) && >> + be32_to_cpu(blp[mid].hashval) == hash); >> + >> + ASSERT(args->oknoent); >> + if (args->cmpresult == XFS_CMP_CASE) >> + return 0; > > So if we find multiple case matches, we'll take the last we find? No, the first as *bpp and *entno is only set for the first case-insensitive match or overriden for an exact match. >> /* >> * No match, release the buffer and return ENOENT. >> */ >> - ASSERT(args->oknoent); >> xfs_da_brelse(tp, bp); >> return XFS_ERROR(ENOENT); > > Should we really be promoting that assert to before we return a > successful > case match? Yes as a !args->oknoent has to find an exact match. It's a big failure otherwise (ie. remove/rename case). >> @@ -907,9 +914,8 @@ xfs_dir2_sf_removename( >> for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); >> i < sfp->hdr.count; >> i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { >> - if (sfep->namelen == args->namelen && >> - sfep->name[0] == args->name[0] && >> - memcmp(sfep->name, args->name, args->namelen) == 0) { >> + if (xfs_da_compname(sfep->name, sfep->namelen, >> + args->name, args->namelen) == XFS_CMP_EXACT) { >> ASSERT(xfs_dir2_sf_get_inumber(sfp, >> xfs_dir2_sf_inumberp(sfep)) == >> args->inumber); > > This only checks for an exact match - what is supposed to happen > with a XFS_CMP_CASE return? > >> @@ -1044,9 +1050,9 @@ xfs_dir2_sf_replace( >> for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); >> i < sfp->hdr.count; >> i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { >> - if (sfep->namelen == args->namelen && >> - sfep->name[0] == args->name[0] && >> - memcmp(args->name, sfep->name, args->namelen) == 0) { >> + if (xfs_da_compname(sfep->name, sfep->namelen, >> + args->name, args->namelen) == >> + XFS_CMP_EXACT) { > > ditto. Like I stated above, remove/rename (replace) require an exact match. From owner-xfs@oss.sgi.com Wed Apr 2 18:43:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 18:43:19 -0700 (PDT) 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 (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 m331h8kb007358 for ; Wed, 2 Apr 2008 18:43:09 -0700 X-ASG-Debug-ID: 1207187022-419400b30000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from filer.fsl.cs.sunysb.edu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 558B88EE8ED; Wed, 2 Apr 2008 18:43:42 -0700 (PDT) Received: from filer.fsl.cs.sunysb.edu (filer.fsl.cs.sunysb.edu [130.245.126.2]) by cuda.sgi.com with ESMTP id sD50uAQTrVQ5wOLt; Wed, 02 Apr 2008 18:43:42 -0700 (PDT) Received: from josefsipek.net (baal.fsl.cs.sunysb.edu [130.245.126.78]) by filer.fsl.cs.sunysb.edu (8.12.11.20060308/8.13.1) with ESMTP id m331Q8CI002431; Wed, 2 Apr 2008 21:26:08 -0400 Received: by josefsipek.net (Postfix, from userid 1000) id 3E09D1C00E74; Wed, 2 Apr 2008 21:26:10 -0400 (EDT) Date: Wed, 2 Apr 2008 21:26:10 -0400 From: "Josef 'Jeff' Sipek" To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 7/7] XFS: NLS config option Subject: Re: [PATCH 7/7] XFS: NLS config option Message-ID: <20080403012610.GD5211@josefsipek.net> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062709.577869936@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080402062709.577869936@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.16 (2007-06-11) X-Barracuda-Connect: filer.fsl.cs.sunysb.edu[130.245.126.2] X-Barracuda-Start-Time: 1207187025 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.1, rules version 3.1.46675 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15172 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jeffpc@josefsipek.net Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 04:25:15PM +1000, Barry Naujok wrote: > This optional patch implements the NLS support as a CONFIG option. Any reason this is a separate patch, and not part of the previous patches? ... > --- kern_ci.orig/fs/xfs/Kconfig > +++ kern_ci/fs/xfs/Kconfig > @@ -87,6 +87,16 @@ config XFS_UNICODE > > If you don't require UTF-8 enforcement, say N. > > +config XFS_UNICODE_NLS > + bool "XFS NLS Unicode support > + depends on XFS_UNICODE > + help > + NLS (Native Language Support) allows non-UTF8 locales to > + interact with XFS Unicode support. To specify the character > + set being used, use the "-n nls=" mount option. "mount option"? Or was that supposed to say mkfs? from mount(8) manpage: -n Mount without writing in /etc/mtab. This is necessary for example when /etc is on a read-only file system. ... > Index: kern_ci/fs/xfs/xfs_unicode.h > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_unicode.h > +++ kern_ci/fs/xfs/xfs_unicode.h > @@ -65,6 +65,8 @@ int xfs_unicode_validate(const uchar_t * > int xfs_unicode_read_cft(struct xfs_mount *mp); > void xfs_unicode_free_cft(const xfs_cft_t *cft); > > +#ifdef CONFIG_XFS_UNICODE_NLS > + > #define xfs_is_using_nls(mp) ((mp)->m_nls != NULL) > > int xfs_unicode_to_nls(struct xfs_mount *mp, const uchar_t *uni_name, > @@ -73,7 +75,20 @@ int xfs_nls_to_unicode(struct xfs_mount > int nls_namelen, const uchar_t **uni_name, int *uni_namelen); > void xfs_unicode_nls_free(const uchar_t *src_name, const uchar_t *conv_name); > > -#else > +#else /* CONFIG_XFS_UNICODE_NLS */ > + > +#define xfs_is_using_nls(mp) 0 > + > +#define xfs_unicode_to_nls(mp, uname, ulen, pnname, pnlen) \ > + ((*(pnname)) = (uname), (*(pnlen)) = (ulen), 0) > +#define xfs_nls_to_unicode(mp, nname, nlen, puname, pulen) \ > + ((*(puname)) = (nname), (*(pulen)) = (nlen), \ > + xfs_unicode_validate(nname, nlen)) While I commend your use of the comma operator, I really think those should be static inlines :) Josef 'Jeff' Sipek. -- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. - Albert Einstein From owner-xfs@oss.sgi.com Wed Apr 2 18:53:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 18:53:15 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, J_CHICKENPOX_72 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 m331r3Cv009081 for ; Wed, 2 Apr 2008 18:53:06 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA29194; Thu, 3 Apr 2008 11:53:34 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m331rXsT119906104; Thu, 3 Apr 2008 11:53:34 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m331rVY5115191785; Thu, 3 Apr 2008 11:53:31 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 3 Apr 2008 11:53:31 +1000 From: David Chinner To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH 2/7] XFS: ASCII case-insensitive support Message-ID: <20080403015331.GP103491721@sgi.com> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062708.071715758@chook.melbourne.sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080402062708.071715758@chook.melbourne.sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15173 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 04:25:10PM +1000, Barry Naujok wrote: > Implement ASCII case-insensitive support. It's primary purpose > is for supporting existing filesystems that already use this > case-insensitive mode migrated from IRIX. But, if you only need > ASCII-only case-insensitive support (ie. English only) and will > never use another language, then this mode is perfectly adequate. > > ASCII-CI is implemented by generating hashes based on lower-case > letters and doing lower-case compares. It implements a new > xfs_nameops vector for doing the hashes and comparisons for > all filename operations. > > It also overrides the Linux dentry cache operations with its > own hash and compare functions (the same as used in the xfs_nameops > vector). > > To create a filesystem with this CI mode, use: > # mkfs.xfs -n version=ci > > Signed-off-by: Barry Naujok > > --- > fs/xfs/linux-2.6/xfs_iops.c | 46 +++++++++++++++++++++++++++++++++++++- > fs/xfs/linux-2.6/xfs_linux.h | 1 > fs/xfs/linux-2.6/xfs_super.c | 4 +++ > fs/xfs/xfs_dir2.c | 52 ++++++++++++++++++++++++++++++++++++++++++- > fs/xfs/xfs_fs.h | 1 > fs/xfs/linux-2.6/xfs_iops.c | 46 +++++++++++++++++++++++++++++++++++++- > fs/xfs/linux-2.6/xfs_linux.h | 1 > fs/xfs/linux-2.6/xfs_super.c | 4 +++ > fs/xfs/xfs_dir2.c | 52 ++++++++++++++++++++++++++++++++++++++++++- > fs/xfs/xfs_fs.h | 1 > fs/xfs/xfs_fsops.c | 4 ++- > fs/xfs/xfs_sb.h | 10 +++++++- > 7 files changed, 114 insertions(+), 4 deletions(-) > > Index: kern_ci/fs/xfs/linux-2.6/xfs_iops.c > =================================================================== > --- kern_ci.orig/fs/xfs/linux-2.6/xfs_iops.c > +++ kern_ci/fs/xfs/linux-2.6/xfs_iops.c > @@ -47,6 +47,7 @@ > #include "xfs_buf_item.h" > #include "xfs_utils.h" > #include "xfs_vnodeops.h" > +#include "xfs_da_btree.h" > > #include > #include > @@ -54,6 +55,8 @@ > #include > #include > > +struct dentry_operations xfs_ci_dentry_operations; static? > + > +STATIC int > +xfs_ci_dentry_hash( > + struct dentry *dir, > + struct qstr *this) > +{ > + this->hash = xfs_dir_hashname(XFS_I(dir->d_inode), > + this->name, this->len); > + return 0; > +} > + > +STATIC int > +xfs_ci_dentry_compare( > + struct dentry *dir, > + struct qstr *a, > + struct qstr *b) > +{ > + int result = xfs_dir_compname(XFS_I(dir->d_inode), a->name, a->len, > + b->name, b->len) == XFS_CMP_DIFFERENT; > + /* > + * result == 0 if a match is found, and if so, copy the name in "b" > + * to "a" to cope with negative dentries getting the correct name. > + */ > + if (result == 0) > + memcpy((unsigned char *)a->name, b->name, a->len); > + return result; > +} large comment in the middle of a 5 line function? Move it above the function. Also should not need a cast in memcpy().... /* * xfs_dir_compname will return 0 if a match is found. If so, we * need to copy the name in "b" to "a" to cope with negative dentries * getting the correct name. */ STATIC int xfs_ci_dentry_compare( struct dentry *dir, struct qstr *a, struct qstr *b) { int result; result = xfs_dir_compname(XFS_I(dir->d_inode), a->name, a->len, b->name, b->len) == XFS_CMP_DIFFERENT; if (!result) memcpy(a->name, b->name, a->len); return result; } > + > +struct dentry_operations xfs_ci_dentry_operations = > +{ > + .d_hash = xfs_ci_dentry_hash, > + .d_compare = xfs_ci_dentry_compare, > +}; static. You should probably move these functions and declarations to before xfs_ci_dentry_operations is used so you can avoid the forward declaration.... > =================================================================== > --- kern_ci.orig/fs/xfs/linux-2.6/xfs_super.c > +++ kern_ci/fs/xfs/linux-2.6/xfs_super.c > @@ -67,6 +67,8 @@ static kmem_zone_t *xfs_vnode_zone; > static kmem_zone_t *xfs_ioend_zone; > mempool_t *xfs_ioend_pool; > > +extern struct dentry_operations xfs_ci_dentry_operations; > + > STATIC struct xfs_mount_args * > xfs_args_allocate( > struct super_block *sb, > @@ -1359,6 +1361,8 @@ xfs_fs_fill_super( > error = ENOMEM; > goto fail_vnrele; > } > + if (xfs_sb_version_hasoldci(&mp->m_sb)) > + sb->s_root->d_op = &xfs_ci_dentry_operations; Write a helper function for this: xfs_set_ci_dentry_ops(mp, dentry) rather than exporting the xfs_ci_dentry_operations structure. > > +/* > + * V1/OLDCI case-insensitive support for directories > + * > + * This is ASCII only case support, ie. A-Z. > + */ I'd mention that this is legacy code for supporting the Irix format CI. > @@ -629,7 +631,7 @@ xfs_fs_goingdown( > xfs_force_shutdown(mp, SHUTDOWN_FORCE_UMOUNT); > thaw_bdev(sb->s_bdev, sb); > } > - > + > break; random whitespace change? > Index: kern_ci/fs/xfs/xfs_sb.h > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_sb.h > +++ kern_ci/fs/xfs/xfs_sb.h > @@ -46,10 +46,12 @@ struct xfs_mount; > #define XFS_SB_VERSION_SECTORBIT 0x0800 > #define XFS_SB_VERSION_EXTFLGBIT 0x1000 > #define XFS_SB_VERSION_DIRV2BIT 0x2000 > +#define XFS_SB_VERSION_OLDCIBIT 0x4000 /* ASCII only case-insens. */ > #define XFS_SB_VERSION_MOREBITSBIT 0x8000 > #define XFS_SB_VERSION_OKSASHFBITS \ Whitespace. But it's a shame you're being sensible about this - I kinda liked the Irix name for this feature (XFS_SB_VERSION_BORGBIT). :) Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 2 18:55:01 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 18:55:18 -0700 (PDT) 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 (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 m331sxkj009624 for ; Wed, 2 Apr 2008 18:55:01 -0700 X-ASG-Debug-ID: 1207187734-418201080000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from filer.fsl.cs.sunysb.edu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id DE4DF8EEF36; Wed, 2 Apr 2008 18:55:34 -0700 (PDT) Received: from filer.fsl.cs.sunysb.edu (filer.fsl.cs.sunysb.edu [130.245.126.2]) by cuda.sgi.com with ESMTP id p6HSj12X9o3KBTNo; Wed, 02 Apr 2008 18:55:34 -0700 (PDT) Received: from josefsipek.net (baal.fsl.cs.sunysb.edu [130.245.126.78]) by filer.fsl.cs.sunysb.edu (8.12.11.20060308/8.13.1) with ESMTP id m331pKJv005900; Wed, 2 Apr 2008 21:51:20 -0400 Received: by josefsipek.net (Postfix, from userid 1000) id 7A59D1C00E74; Wed, 2 Apr 2008 21:51:22 -0400 (EDT) Date: Wed, 2 Apr 2008 21:51:22 -0400 From: "Josef 'Jeff' Sipek" To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 3/7] XFS: Refactor node format directory lookup/addname Subject: Re: [PATCH 3/7] XFS: Refactor node format directory lookup/addname Message-ID: <20080403015122.GE5211@josefsipek.net> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062708.380299192@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080402062708.380299192@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.16 (2007-06-11) X-Barracuda-Connect: filer.fsl.cs.sunysb.edu[130.245.126.2] X-Barracuda-Start-Time: 1207187734 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.1, rules version 3.1.46675 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15174 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jeffpc@josefsipek.net Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 04:25:11PM +1000, Barry Naujok wrote: ... > --- kern_ci.orig/fs/xfs/xfs_dir2_node.c > +++ kern_ci/fs/xfs/xfs_dir2_node.c ... > @@ -432,27 +429,15 @@ xfs_dir2_leafn_lookup_int( > /* > * Do we have a buffer coming in? > */ > - if (state->extravalid) > - curbp = state->extrablk.bp; > - else > - curbp = NULL; > + curbp = state->extravalid ? state->extrablk.bp : NULL; > /* > * For addname, it's a free block buffer, get the block number. > */ > - if (args->addname) { > - curfdb = curbp ? state->extrablk.blkno : -1; > - curdb = -1; > - length = xfs_dir2_data_entsize(args->namelen); > - if ((free = (curbp ? curbp->data : NULL))) > - ASSERT(be32_to_cpu(free->hdr.magic) == XFS_DIR2_FREE_MAGIC); > - } > - /* > - * For others, it's a data block buffer, get the block number. > - */ > - else { > - curfdb = -1; > - curdb = curbp ? state->extrablk.blkno : -1; > - } > + curfdb = curbp ? state->extrablk.blkno : -1; > + free = curbp ? curbp->data : NULL; The previous 3 lines can be cleaned up as: if (state->extravalid) curbp = state->extrablk.bp; else curbp = NULL; if (curbp) { curfdb = state->extrablk.blkno; free = curbp->data; } else { curfdb = -1; free = NULL; } or, if (state->extravalid && state->extrablk.bp == NULL) is _ALWAYS_ false (which seems to be the case), you can do: if (state->extravalid) { curbp = state->extrablk.bp; curfdb = state->extrablk.blkno; free = curbp->data; } else { curbp = NULL; curfdb = -1; free = NULL; } ... > +static int > +xfs_dir2_leafn_lookup_for_entry( > + xfs_dabuf_t *bp, /* leaf buffer */ > + xfs_da_args_t *args, /* operation arguments */ > + int *indexp, /* out: leaf entry index */ > + xfs_da_state_t *state) /* state to fill in */ > +{ > + xfs_dabuf_t *curbp; /* current data/free buffer */ > + xfs_dir2_db_t curdb; /* current data block number */ > + xfs_dir2_data_entry_t *dep; /* data block entry */ > + xfs_inode_t *dp; /* incore directory inode */ > + int error; /* error return value */ > + int index; /* leaf entry index */ > + xfs_dir2_leaf_t *leaf; /* leaf structure */ > + xfs_dir2_leaf_entry_t *lep; /* leaf entry */ > + xfs_mount_t *mp; /* filesystem mount point */ > + xfs_dir2_db_t newdb; /* new data block number */ > + xfs_trans_t *tp; /* transaction pointer */ > + xfs_dacmp_t cmp; /* comparison result */ > + xfs_dabuf_t *ci_bp = NULL; /* buffer with CI match */ Did you try to check the stack usage (scripts/checkstack.pl)? > + dp = args->dp; > + tp = args->trans; > + mp = dp->i_mount; > + leaf = bp->data; > + ASSERT(be16_to_cpu(leaf->hdr.info.magic) == XFS_DIR2_LEAFN_MAGIC); > +#ifdef __KERNEL__ > + ASSERT(be16_to_cpu(leaf->hdr.count) > 0); > +#endif What's this #ifdef for? > + dep = (xfs_dir2_data_entry_t *)((char *)curbp->data + > + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); Perhaps a static inline to do this calculation more cleanly (assuming it's done elsewhere as well). ... > + /* > + * Compare the entry, return it if it matches. > + */ > + cmp = args->oknoent ? > + xfs_dir_compname(dp, dep->name, dep->namelen, > + args->name, args->namelen): > + xfs_da_compname(dep->name, dep->namelen, > + args->name, args->namelen); same as comment for 1/7. Josef 'Jeff' Sipek. -- My public GPG key can be found at http://www.josefsipek.net/gpg/public-0xC7958FFE.txt From owner-xfs@oss.sgi.com Wed Apr 2 19:50:17 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 19:50:26 -0700 (PDT) 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 (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 m332oDTX017472 for ; Wed, 2 Apr 2008 19:50:17 -0700 X-ASG-Debug-ID: 1207191049-3d3902c40000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from filer.fsl.cs.sunysb.edu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7A8028F531D; Wed, 2 Apr 2008 19:50:49 -0700 (PDT) Received: from filer.fsl.cs.sunysb.edu (filer.fsl.cs.sunysb.edu [130.245.126.2]) by cuda.sgi.com with ESMTP id ro5Uvm3cpJTNlxn4; Wed, 02 Apr 2008 19:50:49 -0700 (PDT) Received: from josefsipek.net (baal.fsl.cs.sunysb.edu [130.245.126.78]) by filer.fsl.cs.sunysb.edu (8.12.11.20060308/8.13.1) with ESMTP id m332YWXC011125; Wed, 2 Apr 2008 22:34:33 -0400 Received: by josefsipek.net (Postfix, from userid 1000) id BBBC31C00E74; Wed, 2 Apr 2008 22:34:34 -0400 (EDT) Date: Wed, 2 Apr 2008 22:34:34 -0400 From: "Josef 'Jeff' Sipek" To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 4/7] XFS: Return case-insensitive match for dentry cache Subject: Re: [PATCH 4/7] XFS: Return case-insensitive match for dentry cache Message-ID: <20080403023434.GF5211@josefsipek.net> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062708.654277049@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080402062708.654277049@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.16 (2007-06-11) X-Barracuda-Connect: filer.fsl.cs.sunysb.edu[130.245.126.2] X-Barracuda-Start-Time: 1207191050 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.1, rules version 3.1.46677 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15175 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jeffpc@josefsipek.net Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 04:25:12PM +1000, Barry Naujok wrote: ... > + /* > + * Directory with a 'disconnected' dentry; get a reference to the > + * 'disconnected' dentry. > + */ > + dentry = list_entry(inode->i_dentry.next, struct dentry, d_alias); list_first_entry does the .next for you. ... > --- kern_ci.orig/fs/xfs/xfs_da_btree.c > +++ kern_ci/fs/xfs/xfs_da_btree.c > @@ -2176,6 +2176,22 @@ xfs_da_reada_buf( > return rval; > } > > + > +kmem_zone_t *xfs_da_name_zone; > + > +uchar_t * > +xfs_da_name_alloc(void) > +{ > + return kmem_zone_zalloc(xfs_da_name_zone, KM_SLEEP); > +} > + > +void > +xfs_da_name_free(const uchar_t *name) Since you don't care about the type anyway, you might want to make it void*, and remove the cast from the lookup_ci code. > +{ > + kmem_zone_free(xfs_da_name_zone, (void *)name); No need for the cast. > --- kern_ci.orig/fs/xfs/xfs_dir2_leaf.c > +++ kern_ci/fs/xfs/xfs_dir2_leaf.c > @@ -1301,6 +1301,15 @@ xfs_dir2_leaf_lookup( > * Return the found inode number. > */ > args->inumber = be64_to_cpu(dep->inumber); > + /* > + * If a case-insensitive match, allocate a buffer and copy the actual > + * name into the buffer. Return it via args->value. > + */ > + if (args->cmpresult == XFS_CMP_CASE) { > + args->value = xfs_da_name_alloc(); > + memcpy(args->value, dep->name, dep->namelen); > + args->valuelen = dep->namelen; Perhaps having a static inline xfs_da_name_dup(...) would be useful... ... > --- kern_ci.orig/fs/xfs/xfs_vnodeops.c > +++ kern_ci/fs/xfs/xfs_vnodeops.c > @@ -1762,24 +1762,33 @@ xfs_inactive( > int > xfs_lookup( > xfs_inode_t *dp, > - bhv_vname_t *dentry, > - xfs_inode_t **ipp) > + bhv_vstr_t *d_name, > + xfs_inode_t **ipp, > + bhv_vstr_t *ci_name) > { > xfs_inode_t *ip; > xfs_ino_t e_inum; > int error; > uint lock_mode; > + xfs_name_t name, rname; > > xfs_itrace_entry(dp); > > if (XFS_FORCED_SHUTDOWN(dp->i_mount)) > return XFS_ERROR(EIO); > > + name.name = (uchar_t *)d_name->name; d_name->name is: const unsigned char* name.name is: const uchar_t* Is there any reason why you use uchar_t - beyond the other parts of XFS use it? (I guess this is the same question that I asked before - coding style.) xfs_types.h defines uchar_t as unsigned char... Josef 'Jeff' Sipek. -- Defenestration n. (formal or joc.): The act of removing Windows from your computer in disgust, usually followed by the installation of Linux or some other Unix-like operating system. From owner-xfs@oss.sgi.com Wed Apr 2 21:03:17 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 21:03:37 -0700 (PDT) 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.0 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 m3343DjF031328 for ; Wed, 2 Apr 2008 21:03:15 -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 OAA02358; Thu, 3 Apr 2008 14:03:43 +1000 Date: Thu, 03 Apr 2008 14:04:05 +1000 To: "Josef 'Jeff' Sipek" Subject: Re: [PATCH 3/7] XFS: Refactor node format directory lookup/addname From: "Barry Naujok" Organization: SGI Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062708.380299192@chook.melbourne.sgi.com> <20080403015122.GE5211@josefsipek.net> Message-ID: In-Reply-To: <20080403015122.GE5211@josefsipek.net> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m3343HjF031342 X-archive-position: 15176 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Thu, 03 Apr 2008 11:51:22 +1000, Josef 'Jeff' Sipek wrote: >> +static int >> +xfs_dir2_leafn_lookup_for_entry( >> + xfs_dabuf_t *bp, /* leaf buffer */ >> + xfs_da_args_t *args, /* operation arguments */ >> + int *indexp, /* out: leaf entry index */ >> + xfs_da_state_t *state) /* state to fill in */ >> +{ >> + xfs_dabuf_t *curbp; /* current data/free buffer */ >> + xfs_dir2_db_t curdb; /* current data block number */ >> + xfs_dir2_data_entry_t *dep; /* data block entry */ >> + xfs_inode_t *dp; /* incore directory inode */ >> + int error; /* error return value */ >> + int index; /* leaf entry index */ >> + xfs_dir2_leaf_t *leaf; /* leaf structure */ >> + xfs_dir2_leaf_entry_t *lep; /* leaf entry */ >> + xfs_mount_t *mp; /* filesystem mount point */ >> + xfs_dir2_db_t newdb; /* new data block number */ >> + xfs_trans_t *tp; /* transaction pointer */ >> + xfs_dacmp_t cmp; /* comparison result */ >> + xfs_dabuf_t *ci_bp = NULL; /* buffer with CI match */ > > Did you try to check the stack usage (scripts/checkstack.pl)? on x86_64: nameops.patch -> no difference ascii_ci.patch -> no difference refactor_leafn_lookup.patch (this one) -> no difference return_name.patch -> xfs_dir_lookup from 152 down to 144 :) unicode_ci.patch -> xfs_mkdir from 152 down to 136 :) -> new xfs_unicode_read_cft @ 120 nls_support.patch -> xfs_dir2_leaf_getdents from 136 up to 200 (ouch!) -> xfs_mkdir from 136 back to 152! -> xfs_create from 152 up to 168 -> xfs_rmdir from 104 down to < 100? This seems to be better than the stack usage Eric posted back in response to my last patch set. From owner-xfs@oss.sgi.com Wed Apr 2 21:09:49 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 21:10:03 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_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 m3349jjQ032442 for ; Wed, 2 Apr 2008 21:09:47 -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 OAA02526; Thu, 3 Apr 2008 14:10:13 +1000 To: "Barry Naujok" , "Josef 'Jeff' Sipek" Subject: Re: [PATCH 3/7] XFS: Refactor node format directory lookup/addname From: "Barry Naujok" Organization: SGI Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062708.380299192@chook.melbourne.sgi.com> <20080403015122.GE5211@josefsipek.net> Date: Thu, 03 Apr 2008 14:10:38 +1000 Message-ID: In-Reply-To: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m3349njQ032450 X-archive-position: 15177 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Thu, 03 Apr 2008 14:04:05 +1000, Barry Naujok wrote: > On Thu, 03 Apr 2008 11:51:22 +1000, Josef 'Jeff' Sipek > wrote: > >>> +static int >>> +xfs_dir2_leafn_lookup_for_entry( >>> + xfs_dabuf_t *bp, /* leaf buffer */ >>> + xfs_da_args_t *args, /* operation arguments */ >>> + int *indexp, /* out: leaf entry index */ >>> + xfs_da_state_t *state) /* state to fill in */ >>> +{ >>> + xfs_dabuf_t *curbp; /* current data/free buffer */ >>> + xfs_dir2_db_t curdb; /* current data block number */ >>> + xfs_dir2_data_entry_t *dep; /* data block entry */ >>> + xfs_inode_t *dp; /* incore directory inode */ >>> + int error; /* error return value */ >>> + int index; /* leaf entry index */ >>> + xfs_dir2_leaf_t *leaf; /* leaf structure */ >>> + xfs_dir2_leaf_entry_t *lep; /* leaf entry */ >>> + xfs_mount_t *mp; /* filesystem mount point */ >>> + xfs_dir2_db_t newdb; /* new data block number */ >>> + xfs_trans_t *tp; /* transaction pointer */ >>> + xfs_dacmp_t cmp; /* comparison result */ >>> + xfs_dabuf_t *ci_bp = NULL; /* buffer with CI match */ >> >> Did you try to check the stack usage (scripts/checkstack.pl)? > > on x86_64: > > nameops.patch > -> no difference > > ascii_ci.patch > -> no difference > > refactor_leafn_lookup.patch (this one) > -> no difference > > return_name.patch > -> xfs_dir_lookup from 152 down to 144 :) > > unicode_ci.patch > -> xfs_mkdir from 152 down to 136 :) > -> new xfs_unicode_read_cft @ 120 > > nls_support.patch > -> xfs_dir2_leaf_getdents from 136 up to 200 (ouch!) BTW. The CONFIG_XFS_UNICODE_NLS patch, setting that to "N" brings this back to 136 and no other changes. > -> xfs_mkdir from 136 back to 152! > -> xfs_create from 152 up to 168 > -> xfs_rmdir from 104 down to < 100? > > This seems to be better than the stack usage Eric posted back in > response to my last patch set. > > > > From owner-xfs@oss.sgi.com Wed Apr 2 21:33:05 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 21:33:18 -0700 (PDT) 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.0 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 m334X0Zt003411 for ; Wed, 2 Apr 2008 21:33:03 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA03200; Thu, 3 Apr 2008 14:33:32 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m334XUsT119895338; Thu, 3 Apr 2008 14:33:31 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m334XTsW119875760; Thu, 3 Apr 2008 14:33:29 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 3 Apr 2008 14:33:29 +1000 From: David Chinner To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH 3/7] XFS: Refactor node format directory lookup/addname Message-ID: <20080403043329.GQ103491721@sgi.com> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062708.380299192@chook.melbourne.sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080402062708.380299192@chook.melbourne.sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15178 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 04:25:11PM +1000, Barry Naujok wrote: > The next step for case-insensitive support is to avoid polution of > the dentry cache with entries pointing to the same inode, but with > names that only differ in case. > > To perform this, we will need to pass the actual filename that > matched backup to the XFS/VFS interface and make sure the dentry > cache only contains entries with the actual case-sensitive name. > > But, before we can do this, it was found that the directory lookup > code with multiple leaves was shared with code adding a name to > that directory. Most of xfs_dir2_leafn_lookup_int() could be broken > into two functions determined by if (args->addname) { } else { }. > > For the following patch, only the lookup case needs to handle the > various xfs_nameops, with case-insensitive match handling in > addition to returning the actual name. > > So, this patch separates xfs_dir2_leafn_lookup_int() into > xfs_dir2_leafn_lookup_for_addname() and xfs_dir2_leafn_lookup_for_entry(). > > xfs_dir2_leafn_lookup_for_addname() iterates through the data blocks looking > for a suitable empty space to insert the name while > xfs_dir2_leafn_lookup_for_entry() uses the xfs_nameops to find the entry. > > xfs_dir2_leafn_lookup_for_entry() path also retains the data block where > the first case-insensitive match occured as in the next patch which will > return the name, the name is obtained from that block. > > Signed-off-by: Barry Naujok > > --- > fs/xfs/xfs_dir2_node.c | 373 +++++++++++++++++++++++++++++-------------------- > 1 file changed, 225 insertions(+), 148 deletions(-) > > Index: kern_ci/fs/xfs/xfs_dir2_node.c > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_dir2_node.c > +++ kern_ci/fs/xfs/xfs_dir2_node.c > @@ -387,12 +387,11 @@ xfs_dir2_leafn_lasthash( > } > > /* > - * Look up a leaf entry in a node-format leaf block. > - * If this is an addname then the extrablk in state is a freespace block, > - * otherwise it's a data block. > + * Look up a leaf entry for space to add a name in a node-format leaf block. > + * The extrablk in state is a freespace block. > */ > -int > -xfs_dir2_leafn_lookup_int( > +static int STATIC (and for the other new function) > +xfs_dir2_leafn_lookup_for_addname( > xfs_dabuf_t *bp, /* leaf buffer */ > xfs_da_args_t *args, /* operation arguments */ > int *indexp, /* out: leaf entry index */ .... > @@ -1785,6 +1857,11 @@ xfs_dir2_node_lookup( > if (error) > rval = error; > /* > + * If case-insensitive match was found in a leaf, return EEXIST. > + */ > + else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) > + rval = EEXIST; Can you put the comment inside the if branch? if (error) { rval = error; } else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) { /* found a case-insensitive match in a leaf */ rval = EEXIST; } I think Josef got the others... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 2 21:49:47 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 21:49:59 -0700 (PDT) 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.0 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 m334naBs005547 for ; Wed, 2 Apr 2008 21:49:46 -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 OAA03569; Thu, 3 Apr 2008 14:50:04 +1000 Date: Thu, 03 Apr 2008 14:50:39 +1000 To: "Josef 'Jeff' Sipek" Subject: Re: [PATCH 1/7] XFS: Name operation vector for hash and compare From: "Barry Naujok" Organization: SGI Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062707.797672682@chook.melbourne.sgi.com> <20080403002246.GB5211@josefsipek.net> Message-ID: In-Reply-To: <20080403002246.GB5211@josefsipek.net> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m334nlBs005570 X-archive-position: 15179 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Thu, 03 Apr 2008 10:22:46 +1000, Josef 'Jeff' Sipek wrote: > On Wed, Apr 02, 2008 at 04:25:09PM +1000, Barry Naujok wrote: > ... >> +/* >> + * Name ops for directory and/or attr name operations >> + */ >> + >> +typedef xfs_dahash_t (*xfs_hashname_t)(const uchar_t *, int); >> +typedef xfs_dacmp_t (*xfs_compname_t)(const uchar_t *, int, >> + const uchar_t *, int); > > Why have typedefs for function pointers? Sometimes, they even cause > problems > (I remember Eric finding a nasty 64-bit bug related to a function pointer > typedef). > > Since IRIX isn't on the supported OS list anymore, what's the policy with > coding style within XFS? Ok, I have fixed it: +/* + * Name ops for directory and/or attr name operations + */ +struct xfs_nameops { + xfs_dahash_t (*hashname)(const uchar_t *, int); + xfs_dacmp_t (*compname)(const uchar_t *, int, const uchar_t *, int); +}; > ... >> Index: kern_ci/fs/xfs/xfs_dir2.h >> =================================================================== >> --- kern_ci.orig/fs/xfs/xfs_dir2.h >> +++ kern_ci/fs/xfs/xfs_dir2.h >> @@ -85,6 +85,12 @@ extern int xfs_dir_canenter(struct xfs_t >> char *name, int namelen); >> extern int xfs_dir_ino_validate(struct xfs_mount *mp, xfs_ino_t ino); >> >> +#define xfs_dir_hashname(dp, n, l) \ >> + ((dp)->i_mount->m_dirnameops->hashname((n), (l))) >> + >> +#define xfs_dir_compname(dp, n1, l1, n2, l2) \ >> + ((dp)->i_mount->m_dirnameops->compname((n1), (l1), (n2), (l2))) > > #define vs. static inline... > > I guess this comes back to my question before...what is the coding style > direction you want XFS to go in? More Linux-like (static inline)? or > keep it > more IRIX-like (#define)? Nasty gotcha in this scenario, I have added a comment before them: +/* + * Macros are used calling for the xfs_inode's xfs_mount's name operations as + * in most cases, xfs_dir2.h is included before xfs_inode.h and xfs_mount.h. + */ +#define xfs_dir_hashname(dp, n, l) \ + ((dp)->i_mount->m_dirnameops->hashname((n), (l))) + +#define xfs_dir_compname(dp, n1, l1, n2, l2) \ + ((dp)->i_mount->m_dirnameops->compname((n1), (l1), (n2), (l2))) The alternative is reorganising the #includes in most of the .c files! From owner-xfs@oss.sgi.com Wed Apr 2 22:21:55 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 22:22:05 -0700 (PDT) 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.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42, J_CHICKENPOX_45,J_CHICKENPOX_47,J_CHICKENPOX_48 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 m335LmG7010509 for ; Wed, 2 Apr 2008 22:21:52 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA04298; Thu, 3 Apr 2008 15:22:13 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m335MBsT119798854; Thu, 3 Apr 2008 15:22:13 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m335M9L6119781372; Thu, 3 Apr 2008 15:22:09 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 3 Apr 2008 15:22:09 +1000 From: David Chinner To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH 4/7] XFS: Return case-insensitive match for dentry cache Message-ID: <20080403052209.GR103491721@sgi.com> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062708.654277049@chook.melbourne.sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080402062708.654277049@chook.melbourne.sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15180 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 04:25:12PM +1000, Barry Naujok wrote: > This implements the code to store the actual filename found > during a lookup in the dentry cache and to avoid multiple entries > in the dcache pointing to the same inode. > > It also introduces a new type, xfs_name, which is similar to the > dentry cache's qstr type. It contains a pointer to a zone allocated > string (MAXNAMELEN sized) and the length of the actual name. This > string does not need to be NULL terminated (a counted string). > > xfs_name_t is only used in the lookup path for this patch, but may > be used in other locations too if desired. It maybe desirable not > to use xfs_name_t at all in the lookup functions but stick to > separate parameters (which will mean 7 instead of 5 arguments). > > To avoid polluting the dcache, we implement a new directory inode > operations for lookup. xfs_vn_ci_lookup() interacts directly with > the dcache and the code was derived from ntfs_lookup() in > fs/ntfs/namei.c. The dentry hash and compare overrides introduced > in the ASCII-CI patch has been removed. > > The "actual name" is only allocated and returned for a case- > insensitive match and not an actual match. > +STATIC struct dentry * > +xfs_vn_ci_lookup( > + struct inode *dir, > + struct dentry *dentry, > + struct nameidata *nd) > +{ > + struct xfs_inode *cip; > + int error; > struct dentry *result; > + struct qstr ci_name = {0, 0, NULL}; > + struct inode *inode; > > if (dentry->d_name.len >= MAXNAMELEN) > return ERR_PTR(-ENAMETOOLONG); > > - if (xfs_sb_version_hasoldci(&mp->m_sb)) > - dentry->d_op = &xfs_ci_dentry_operations; > + error = xfs_lookup(XFS_I(dir), &dentry->d_name, &cip, &ci_name); Bit confusing with cip = "child inode" and ci_name = "case insensitive". i.e. same prefix, different meanings... > > - error = xfs_lookup(XFS_I(dir), dentry, &cip); > if (unlikely(error)) { > if (unlikely(error != ENOENT)) > return ERR_PTR(-error); > d_add(dentry, NULL); > return NULL; > } > + inode = cip->i_vnode; > + > + /* if exact match, just splice and exit */ > + if (!ci_name.name) { > + result = d_splice_alias(inode, dentry); > + return result; > + } if (!ci_name.name) return d_splice_alias(inode, dentry); > > - result = d_splice_alias(cip->i_vnode, dentry); > - if (result) > - result->d_op = dentry->d_op; > - return result; > + /* > + * case-insensitive match, create a dentry to return and fill it > + * in with the correctly cased name. Parameter "dentry" is not > + * used anymore and the caller will free it. > + * Derived from fs/ntfs/namei.c > + */ > + > + ci_name.hash = full_name_hash(ci_name.name, ci_name.len); > + > + /* Does an existing dentry match? */ > + result = d_lookup(dentry->d_parent, &ci_name); > + if (!result) { > + /* if not, create one */ > + result = d_alloc(dentry->d_parent, &ci_name); > + xfs_da_name_free((char *)ci_name.name); > + if (!result) > + return ERR_PTR(-ENOMEM); > + dentry = d_splice_alias(inode, result); > + if (dentry) { > + dput(result); > + return dentry; > + } > + return result; > + } This looks like it came from the ntfs code - i find that much easier to follow with "real_dent" and "new_dent" instead of "result" and "dentry" respectively. > + xfs_da_name_free((char *)ci_name.name); > + > + /* an existing dentry matches, use it */ Ah, I see the rest of this is basically a copy and paste of the ntfs code (without some of the useful comments). I think a generic helper function is in order here that contains all the coments from the ntfs code.... > + > + if (result->d_inode) { > + /* > + * already an inode attached, deref the inode that was > + * refcounted with xfs_lookup and return the dentry. > + */ > + if (unlikely(result->d_inode != inode)) { > + /* This can happen because bad inodes are unhashed. */ > + BUG_ON(!is_bad_inode(inode)); > + BUG_ON(!is_bad_inode(result->d_inode)); Bit drastic - how about failing the lookup and returning EIO in this case? > + } > + iput(inode); > + return result; > + } ..... > Index: kern_ci/fs/xfs/linux-2.6/xfs_super.c > =================================================================== > --- kern_ci.orig/fs/xfs/linux-2.6/xfs_super.c > +++ kern_ci/fs/xfs/linux-2.6/xfs_super.c > @@ -566,7 +566,10 @@ xfs_set_inodeops( > inode->i_mapping->a_ops = &xfs_address_space_operations; > break; > case S_IFDIR: > - inode->i_op = &xfs_dir_inode_operations; > + inode->i_op = > + xfs_sb_version_hasoldci(&XFS_I(inode)->i_mount->m_sb) ? + xfs_sb_version_hasoldci(&XFS_M(inode->i_sb)->m_sb) ? > + xfs_ino_t *inum, /* out: inode number */ > + xfs_name_t *ci_name) /* out: actual name if different */ > { > xfs_da_args_t args; > int rval; > @@ -259,9 +260,9 @@ xfs_dir_lookup( > ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); > XFS_STATS_INC(xs_dir_lookup); > > - args.name = name; > - args.namelen = namelen; > - args.hashval = xfs_dir_hashname(dp, name, namelen); > + args.name = name->name; > + args.namelen = name->len; > + args.hashval = xfs_dir_hashname(dp, name->name, name->len); > args.inumber = 0; > args.dp = dp; > args.firstblock = NULL; > @@ -272,6 +273,8 @@ xfs_dir_lookup( > args.justcheck = args.addname = 0; > args.oknoent = 1; > args.cmpresult = XFS_CMP_DIFFERENT; > + args.value = NULL; > + args.valuelen = 0; Rather than initialising more of the args to zero (already 7 members explicitly initialised to zero or NULL), change it to: memset(&args, 0, sizeof(xfs_da_args_t)); args.name = name->name; args.namelen = name->len; args.hashval = xfs_dir_hashname(dp, name->name, name->len); args.dp = dp; args.whichfork = XFS_DATA_FORK; args.trans = tp; args.oknoent = 1; args.cmpresult = XFS_CMP_DIFFERENT; > > if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) > rval = xfs_dir2_sf_lookup(&args); > @@ -287,8 +290,17 @@ xfs_dir_lookup( > rval = xfs_dir2_node_lookup(&args); > if (rval == EEXIST) > rval = 0; > - if (rval == 0) > + if (rval == 0) { if (!rval) { > Index: kern_ci/fs/xfs/xfs_dir2_block.c > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_dir2_block.c > +++ kern_ci/fs/xfs/xfs_dir2_block.c > @@ -616,6 +616,15 @@ xfs_dir2_block_lookup( > * Fill in inode number, release the block. > */ > args->inumber = be64_to_cpu(dep->inumber); > + /* > + * If a case-insensitive match, allocate a buffer and copy the actual > + * name into the buffer. Return it via args->value. > + */ > + if (args->cmpresult == XFS_CMP_CASE) { > + args->value = xfs_da_name_alloc(); > + memcpy(args->value, dep->name, dep->namelen); > + args->valuelen = dep->namelen; xfs_da_ci_name_dup(); > + } > xfs_da_brelse(args->trans, bp); > return XFS_ERROR(EEXIST); > } > Index: kern_ci/fs/xfs/xfs_dir2_leaf.c > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_dir2_leaf.c > +++ kern_ci/fs/xfs/xfs_dir2_leaf.c > @@ -1301,6 +1301,15 @@ xfs_dir2_leaf_lookup( > * Return the found inode number. > */ > args->inumber = be64_to_cpu(dep->inumber); > + /* > + * If a case-insensitive match, allocate a buffer and copy the actual > + * name into the buffer. Return it via args->value. > + */ > + if (args->cmpresult == XFS_CMP_CASE) { > + args->value = xfs_da_name_alloc(); > + memcpy(args->value, dep->name, dep->namelen); > + args->valuelen = dep->namelen; xfs_da_ci_name_dup(); > + } > xfs_da_brelse(tp, dbp); > xfs_da_brelse(tp, lbp); > return XFS_ERROR(EEXIST); > Index: kern_ci/fs/xfs/xfs_dir2_node.c > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_dir2_node.c > +++ kern_ci/fs/xfs/xfs_dir2_node.c > @@ -643,6 +643,8 @@ xfs_dir2_leafn_lookup_for_entry( > xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); > /* > * Compare the entry, return it if it matches. > + * "oknoent" is set for lookup and clear for > + * remove and replace. > */ That should have been in an earlier patch.... > cmp = args->oknoent ? > xfs_dir_compname(dp, dep->name, dep->namelen, > @@ -1857,10 +1859,22 @@ xfs_dir2_node_lookup( > if (error) > rval = error; > /* > - * If case-insensitive match was found in a leaf, return EEXIST. > - */ > - else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) > + * If case-insensitive match was found (xfs_dir2_leafn_lookup_int > + * returns ENOENT for a case-insensitive match, but sets > + * args->cmpresult to XFS_CMP_CASE): > + * - Allocate a buffer and copy the actual name into the buffer and > + * return it via args->value. > + * - set rval to EEXIST > + */ > + else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) { > + xfs_dir2_data_entry_t *dep = (xfs_dir2_data_entry_t *) > + ((char *)state->extrablk.bp->data + > + state->extrablk.index); > + args->value = xfs_da_name_alloc(); > + memcpy(args->value, dep->name, dep->namelen); > + args->valuelen = dep->namelen; > rval = EEXIST; > + } Yeah, more reason to move the comment inside the if block.... oh, and xfs_da_ci_name_dup().... > - if (args->cmpresult == XFS_CMP_CASE) > + if (args->cmpresult == XFS_CMP_CASE) { > + /* > + * If a case-insensitive match, allocate a buffer and copy the > + * actual name into the buffer and return it via args->value. > + */ > + args->value = xfs_da_name_alloc(); > + memcpy(args->value, ci_sfep->name, ci_sfep->namelen); > + args->valuelen = ci_sfep->namelen; xfs_da_ci_name_dup() > --- kern_ci.orig/fs/xfs/xfs_utils.c > +++ kern_ci/fs/xfs/xfs_utils.c > @@ -24,6 +24,7 @@ > #include "xfs_trans.h" > #include "xfs_sb.h" > #include "xfs_ag.h" > +#include "xfs_da_btree.h" What's that needed for? What ever it is, i think you've put it in the wrong header file.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 2 22:41:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 22:41:36 -0700 (PDT) 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.0 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 m335fPl1013122 for ; Wed, 2 Apr 2008 22:41:26 -0700 X-ASG-Debug-ID: 1207201319-5b1a017b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtps.tip.net.au (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 612B67336D5 for ; Wed, 2 Apr 2008 22:42:00 -0700 (PDT) Received: from smtps.tip.net.au (chilli.pcug.org.au [203.10.76.44]) by cuda.sgi.com with ESMTP id GpkLCf7mUexoKBfv for ; Wed, 02 Apr 2008 22:42:00 -0700 (PDT) Received: from ash.ozlabs.ibm.com (bh02i525f01.au.ibm.com [202.81.18.30]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by smtps.tip.net.au (Postfix) with ESMTP id A1307368002; Thu, 3 Apr 2008 16:41:26 +1100 (EST) Date: Thu, 3 Apr 2008 16:41:20 +1100 From: Stephen Rothwell To: David Chinner Cc: Barry Naujok , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 4/7] XFS: Return case-insensitive match for dentry cache Subject: Re: [PATCH 4/7] XFS: Return case-insensitive match for dentry cache Message-Id: <20080403164120.87e2e44b.sfr@canb.auug.org.au> In-Reply-To: <20080403052209.GR103491721@sgi.com> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062708.654277049@chook.melbourne.sgi.com> <20080403052209.GR103491721@sgi.com> X-Mailer: Sylpheed 2.5.0beta1 (GTK+ 2.12.9; i486-pc-linux-gnu) Mime-Version: 1.0 Content-Type: multipart/signed; protocol="application/pgp-signature"; micalg="PGP-SHA1"; boundary="Signature=_Thu__3_Apr_2008_16_41_20_+1100_c+Qi.M.Lqw5pZLpj" X-Barracuda-Connect: chilli.pcug.org.au[203.10.76.44] X-Barracuda-Start-Time: 1207201322 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.1, rules version 3.1.46690 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15181 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sfr@canb.auug.org.au Precedence: bulk X-list: xfs --Signature=_Thu__3_Apr_2008_16_41_20_+1100_c+Qi.M.Lqw5pZLpj Content-Type: text/plain; charset=US-ASCII Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi all, On Thu, 3 Apr 2008 15:22:09 +1000 David Chinner wrote: > > On Wed, Apr 02, 2008 at 04:25:12PM +1000, Barry Naujok wrote: > > This implements the code to store the actual filename found > > during a lookup in the dentry cache and to avoid multiple entries > > in the dcache pointing to the same inode. I haven't really been following this, but I was wondering if this could be made generic and used in the CIFS code as well. They currently (I think) have an awefull hack where they update the name in the dentry (which throws a warning about dropping a const attribute in the memcpy). --=20 Cheers, Stephen Rothwell sfr@canb.auug.org.au http://www.canb.auug.org.au/~sfr/ --Signature=_Thu__3_Apr_2008_16_41_20_+1100_c+Qi.M.Lqw5pZLpj Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQFH9G4FTgG2atn1QN8RAlVEAJ93zSowne9T1LxgC2zOGYJNVJZ/qwCeMO1U Xe9szYD4r2MkJMjvBeF6nBA= =ECoH -----END PGP SIGNATURE----- --Signature=_Thu__3_Apr_2008_16_41_20_+1100_c+Qi.M.Lqw5pZLpj-- From owner-xfs@oss.sgi.com Wed Apr 2 23:42:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 02 Apr 2008 23:42:20 -0700 (PDT) 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 m336gAd3021249 for ; Wed, 2 Apr 2008 23:42:10 -0700 X-ASG-Debug-ID: 1207204966-4b1501120000-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 0DDF28FADE9 for ; Wed, 2 Apr 2008 23:42:46 -0700 (PDT) Received: from one.firstfloor.org (one.firstfloor.org [213.235.205.2]) by cuda.sgi.com with ESMTP id ECsE6LeqMFolmMKb for ; Wed, 02 Apr 2008 23:42:46 -0700 (PDT) Received: by one.firstfloor.org (Postfix, from userid 503) id EC9F018902B0; Thu, 3 Apr 2008 08:46:08 +0200 (CEST) Date: Thu, 3 Apr 2008 08:46:08 +0200 From: Andi Kleen To: David Chinner Cc: Andi Kleen , Lachlan McIlroy , xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [Patch] Cacheline align xlog_t Subject: Re: [Patch] Cacheline align xlog_t Message-ID: <20080403064608.GS29105@one.firstfloor.org> References: <20080401231552.GV103491721@sgi.com> <47F3293C.6090708@sgi.com> <20080402054403.GF103491721@sgi.com> <87myocek4o.fsf@basil.nowhere.org> <20080402222347.GK103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080402222347.GK103491721@sgi.com> User-Agent: Mutt/1.4.2.1i X-Barracuda-Connect: one.firstfloor.org[213.235.205.2] X-Barracuda-Start-Time: 1207204967 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.1, rules version 3.1.46695 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15182 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: andi@firstfloor.org Precedence: bulk X-list: xfs On Thu, Apr 03, 2008 at 08:23:47AM +1000, David Chinner wrote: > > For the dynamic allocation you would rather need to make sure it > > starts at a cache line boundary explicitely because the allocator doesn't > > know the alignment of the target type, otherwise your careful > > padding might be useless. > > Yup. Is there an allocator function gives us cacheline aligned > allocation __get_free_pages() @) [ok not serious] > (apart from a slab initialised with SLAB_HWCACHE_ALIGN)? That too yes. > There isn't one, right? You can always align yourself with kmalloc (or any other arbitary size allocator) with the standard technique: get L1_CACHE_BYTES-1 or possibly better cache_line_size() - 1 bytes more and then align the pointer manually with ALIGN. Only tricky part is that you have to undo the alignment before freeing. -Andi From owner-xfs@oss.sgi.com Thu Apr 3 10:09:53 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 10:10:04 -0700 (PDT) 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 m33H9qZh021739 for ; Thu, 3 Apr 2008 10:09:53 -0700 X-ASG-Debug-ID: 1207242616-766f00000000-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 13114902F3A for ; Thu, 3 Apr 2008 10:10:16 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id jtIPeQXFmZWrjFKc for ; Thu, 03 Apr 2008 10:10:16 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JhSwb-0001hS-4i; Thu, 03 Apr 2008 17:09:45 +0000 Date: Thu, 3 Apr 2008 13:09:45 -0400 From: Christoph Hellwig To: David Chinner Cc: Barry Naujok , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 2/7] XFS: ASCII case-insensitive support Subject: Re: [PATCH 2/7] XFS: ASCII case-insensitive support Message-ID: <20080403170945.GA22385@infradead.org> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062708.071715758@chook.melbourne.sgi.com> <20080403015331.GP103491721@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080403015331.GP103491721@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207242617 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.1, rules version 3.1.46736 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15184 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, Apr 03, 2008 at 11:53:31AM +1000, David Chinner wrote: > > + if (xfs_sb_version_hasoldci(&mp->m_sb)) > > + sb->s_root->d_op = &xfs_ci_dentry_operations; > > Write a helper function for this: xfs_set_ci_dentry_ops(mp, dentry) > rather than exporting the xfs_ci_dentry_operations structure. yes, please. also the export ops calling d_alloc_anon need to update the dentry ops aswel and should be using this one. > > +#define XFS_SB_VERSION_OLDCIBIT 0x4000 /* ASCII only case-insens. */ > > #define XFS_SB_VERSION_MOREBITSBIT 0x8000 > > #define XFS_SB_VERSION_OKSASHFBITS \ > > Whitespace. > > But it's a shame you're being sensible about this - I kinda liked > the Irix name for this feature (XFS_SB_VERSION_BORGBIT). :) So what exactly prevents us from using it in Linux? please use the old name. From owner-xfs@oss.sgi.com Thu Apr 3 10:36:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 10:36:22 -0700 (PDT) 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 m33HaAPQ030015 for ; Thu, 3 Apr 2008 10:36:13 -0700 X-ASG-Debug-ID: 1207243283-7673005d0000-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 B97BB903C0B for ; Thu, 3 Apr 2008 10:21:23 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id ZMEbgoFbpoefCx1l for ; Thu, 03 Apr 2008 10:21:23 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JhQrm-0007Yd-9U; Thu, 03 Apr 2008 14:56:38 +0000 Date: Thu, 3 Apr 2008 10:56:38 -0400 From: Christoph Hellwig To: Stephen Rothwell Cc: David Chinner , Barry Naujok , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 4/7] XFS: Return case-insensitive match for dentry cache Subject: Re: [PATCH 4/7] XFS: Return case-insensitive match for dentry cache Message-ID: <20080403145638.GA3373@infradead.org> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062708.654277049@chook.melbourne.sgi.com> <20080403052209.GR103491721@sgi.com> <20080403164120.87e2e44b.sfr@canb.auug.org.au> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080403164120.87e2e44b.sfr@canb.auug.org.au> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207243283 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.1, rules version 3.1.46736 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15187 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, Apr 03, 2008 at 04:41:20PM +1100, Stephen Rothwell wrote: > I haven't really been following this, but I was wondering if this could > be made generic and used in the CIFS code as well. They currently (I > think) have an awefull hack where they update the name in the dentry > (which throws a warning about dropping a const attribute in the memcpy). yes, it should. the new lookup higher level code added here should probably be a helper in dcache.c although that'll need a new abstraction for the unicode table handling. From owner-xfs@oss.sgi.com Thu Apr 3 12:06:12 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 12:06:19 -0700 (PDT) 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=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 m33J6BVN023216 for ; Thu, 3 Apr 2008 12:06:12 -0700 X-ASG-Debug-ID: 1207248461-22be01530000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from lists.samba.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 37E8C90B8D8 for ; Thu, 3 Apr 2008 11:47:41 -0700 (PDT) Received: from lists.samba.org (mail.samba.org [66.70.73.150]) by cuda.sgi.com with ESMTP id J6icIARE6dnAPTcC for ; Thu, 03 Apr 2008 11:47:41 -0700 (PDT) Received: by lists.samba.org (Postfix, from userid 549) id 36F12163922; Thu, 3 Apr 2008 18:47:41 +0000 (GMT) Date: Thu, 3 Apr 2008 11:47:39 -0700 From: Jeremy Allison To: Christoph Hellwig Cc: Jeremy Allison , Barry Naujok , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation Subject: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation Message-ID: <20080403184739.GB6100@samba1> Reply-To: Jeremy Allison References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062709.011126702@chook.melbourne.sgi.com> <20080403171450.GB22385@infradead.org> <20080403172400.GC22812@samba1> <20080403184333.GA30595@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080403184333.GA30595@infradead.org> User-Agent: Mutt/1.5.11 X-Barracuda-Connect: mail.samba.org[66.70.73.150] X-Barracuda-Start-Time: 1207248462 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.1, rules version 3.1.46740 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15188 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jra@samba.org Precedence: bulk X-list: xfs On Thu, Apr 03, 2008 at 02:43:33PM -0400, Christoph Hellwig wrote: > On Thu, Apr 03, 2008 at 10:24:00AM -0700, Jeremy Allison wrote: > > On Thu, Apr 03, 2008 at 01:14:50PM -0400, Christoph Hellwig wrote: > > > Validating file names is not the filesystem job. In fact it's utterly > > > stupid, a unix filename is a sequence of bytes without special meaning > > > except for ., .., / and \0 > > > > This patch will be extremely useful for users who are serving > > Windows clients using Samba. It allow admins to turn off the > > userspace case insensitivity we have to emulate and be a significant > > speed increase. > > CI filenames can work perfectly fine without adding validation of file > names by treating non-conformant bytestreams as not having lower/upper > case variants. Sorry, then I'm not understanding your objection to this patch (and I don't think I understood that sentence :-). Jeremy. From owner-xfs@oss.sgi.com Thu Apr 3 12:06:12 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 12:06:21 -0700 (PDT) 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 m33J6BEY023215 for ; Thu, 3 Apr 2008 12:06:12 -0700 X-ASG-Debug-ID: 1207248926-60ff03dd0000-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 1AB5A106CCA0; Thu, 3 Apr 2008 11:55:26 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id IT9StmSFTD8Zia2O; Thu, 03 Apr 2008 11:55:26 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JhUas-0004lT-3J; Thu, 03 Apr 2008 18:55:26 +0000 Date: Thu, 3 Apr 2008 14:55:26 -0400 From: Christoph Hellwig To: Jeremy Allison Cc: Christoph Hellwig , Barry Naujok , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation Subject: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation Message-ID: <20080403185526.GA6045@infradead.org> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062709.011126702@chook.melbourne.sgi.com> <20080403171450.GB22385@infradead.org> <20080403172400.GC22812@samba1> <20080403184333.GA30595@infradead.org> <20080403184739.GB6100@samba1> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080403184739.GB6100@samba1> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207248927 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.1, rules version 3.1.46740 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15189 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, Apr 03, 2008 at 11:47:39AM -0700, Jeremy Allison wrote: > > CI filenames can work perfectly fine without adding validation of file > > names by treating non-conformant bytestreams as not having lower/upper > > case variants. > > Sorry, then I'm not understanding your objection to this patch (and I > don't think I understood that sentence :-). I objected to the part of the patch I've quoted (and the bitsrelated to it), not all of it. That how we do reviews in kernel land, not sure how samba handles it if you have a binary object/don't object policy.. From owner-xfs@oss.sgi.com Thu Apr 3 13:56:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 13:56:49 -0700 (PDT) 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=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 m33KuDt3005138 for ; Thu, 3 Apr 2008 13:56:14 -0700 X-ASG-Debug-ID: 1207246949-404b011c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from lists.samba.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CD202739452 for ; Thu, 3 Apr 2008 11:22:29 -0700 (PDT) Received: from lists.samba.org (mail.samba.org [66.70.73.150]) by cuda.sgi.com with ESMTP id eJUFtWL76tQmunTS for ; Thu, 03 Apr 2008 11:22:29 -0700 (PDT) Received: by lists.samba.org (Postfix, from userid 549) id 0D051163945; Thu, 3 Apr 2008 18:22:28 +0000 (GMT) Date: Thu, 3 Apr 2008 11:22:26 -0700 From: Jeremy Allison To: Eric Sandeen Cc: Jeremy Allison , Christoph Hellwig , Barry Naujok , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation Subject: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation Message-ID: <20080403182226.GA6100@samba1> Reply-To: Jeremy Allison References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062709.011126702@chook.melbourne.sgi.com> <20080403171450.GB22385@infradead.org> <20080403172400.GC22812@samba1> <47F51DDE.8070501@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <47F51DDE.8070501@sandeen.net> User-Agent: Mutt/1.5.11 X-Barracuda-Connect: mail.samba.org[66.70.73.150] X-Barracuda-Start-Time: 1207246949 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.1, rules version 3.1.46739 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15190 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jra@samba.org Precedence: bulk X-list: xfs On Thu, Apr 03, 2008 at 01:11:42PM -0500, Eric Sandeen wrote: > Jeremy Allison wrote: > > On Thu, Apr 03, 2008 at 01:14:50PM -0400, Christoph Hellwig wrote: > >> Validating file names is not the filesystem job. In fact it's utterly > >> stupid, a unix filename is a sequence of bytes without special meaning > >> except for ., .., / and \0 > > > > This patch will be extremely useful for users who are serving > > Windows clients using Samba. It allow admins to turn off the > > userspace case insensitivity we have to emulate and be a significant > > speed increase. > > I'd like to see the numbers... Simo tested an earlier version of this > patch, and it was not faster.... Jeremy, what would be a representative > test setup to use? It very much depends on the usage case. We have many users who have large numbers of files per directory, and not having to search these in userspace when we get a stat cache miss is helpful. Just running a generic "netbench" test won't show any difference, as that test uses separate directories for each client with small numbers of files per directory. There's a reason I wrote this HOWTO (having to use an alternate link as samba.org seems to be down right now): http://man.chinaunix.net/newsoft/samba/docs/man/Samba-HOWTO-Collection/largefile.html Jeremy. From owner-xfs@oss.sgi.com Thu Apr 3 14:36:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 14:36:24 -0700 (PDT) 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_15 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 m33LaEIS017625 for ; Thu, 3 Apr 2008 14:36:16 -0700 X-ASG-Debug-ID: 1207249037-3f0a01a80000-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 CD2D37399F6; Thu, 3 Apr 2008 11:57:17 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id v1304MOulnCZdtf9; Thu, 03 Apr 2008 11:57:17 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JhUcf-0008L9-4O; Thu, 03 Apr 2008 18:57:17 +0000 Date: Thu, 3 Apr 2008 14:57:17 -0400 From: Christoph Hellwig To: Jeremy Allison Cc: Christoph Hellwig , Barry Naujok , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation Subject: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation Message-ID: <20080403185717.GB6045@infradead.org> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062709.011126702@chook.melbourne.sgi.com> <20080403171450.GB22385@infradead.org> <20080403172400.GC22812@samba1> <20080403184333.GA30595@infradead.org> <20080403184739.GB6100@samba1> <20080403185526.GA6045@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080403185526.GA6045@infradead.org> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207249037 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.1, rules version 3.1.46743 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15191 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, Apr 03, 2008 at 02:55:26PM -0400, Christoph Hellwig wrote: > On Thu, Apr 03, 2008 at 11:47:39AM -0700, Jeremy Allison wrote: > > > CI filenames can work perfectly fine without adding validation of file > > > names by treating non-conformant bytestreams as not having lower/upper > > > case variants. > > > > Sorry, then I'm not understanding your objection to this patch (and I > > don't think I understood that sentence :-). > > I objected to the part of the patch I've quoted (and the bitsrelated to > it), not all of it. That how we do reviews in kernel land, not sure > how samba handles it if you have a binary object/don't object policy.. oops, look like the quote actually got deleted accidentally. sorry I'ltake that comment back. The part I object to are the various calls to xfs_unicode_validate in the namespace operations. From owner-xfs@oss.sgi.com Thu Apr 3 15:50:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 15:50:55 -0700 (PDT) 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 m33MoiWU005940 for ; Thu, 3 Apr 2008 15:50:48 -0700 X-ASG-Debug-ID: 1207263080-6d1503220000-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 9CDC8910C8C; Thu, 3 Apr 2008 15:51:20 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id JVazLVSrW9p9pxJ4; Thu, 03 Apr 2008 15:51:20 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JhYHA-0006dt-7l; Thu, 03 Apr 2008 22:51:20 +0000 Date: Thu, 3 Apr 2008 18:51:20 -0400 From: Christoph Hellwig To: David Chinner Cc: Barry Naujok , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 1/7] XFS: Name operation vector for hash and compare Subject: Re: [PATCH 1/7] XFS: Name operation vector for hash and compare Message-ID: <20080403225120.GA448@infradead.org> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062707.797672682@chook.melbourne.sgi.com> <20080403012912.GO103491721@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080403012912.GO103491721@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207263081 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.1, rules version 3.1.46758 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15196 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, Apr 03, 2008 at 11:29:12AM +1000, David Chinner wrote: > > +#define xfs_dir_hashname(dp, n, l) \ > > + ((dp)->i_mount->m_dirnameops->hashname((n), (l))) > > + > > +#define xfs_dir_compname(dp, n1, l1, n2, l2) \ > > + ((dp)->i_mount->m_dirnameops->compname((n1), (l1), (n2), (l2))) > > + > > Static inline functions, please. Or kill them completely. I find the common Linux style that jut opencodes method invocations a lot more readable. From owner-xfs@oss.sgi.com Thu Apr 3 15:55:23 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 15:55:36 -0700 (PDT) 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 m33MtKSX007413 for ; Thu, 3 Apr 2008 15:55:23 -0700 X-ASG-Debug-ID: 1207263357-7f38033e0000-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 D267F73B78F; Thu, 3 Apr 2008 15:55:57 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id a7MXEzCFhIVTSZ1U; Thu, 03 Apr 2008 15:55:57 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JhYLc-0000jc-Nt; Thu, 03 Apr 2008 22:55:56 +0000 Date: Thu, 3 Apr 2008 18:55:56 -0400 From: Christoph Hellwig To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 2/7] XFS: ASCII case-insensitive support Subject: Re: [PATCH 2/7] XFS: ASCII case-insensitive support Message-ID: <20080403225556.GB448@infradead.org> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062708.071715758@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080402062708.071715758@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207263357 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.1, rules version 3.1.46759 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15197 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 04:25:10PM +1000, Barry Naujok wrote: > + struct qstr *a, > + struct qstr *b) > +{ > + int result = xfs_dir_compname(XFS_I(dir->d_inode), a->name, a->len, > + b->name, b->len) == XFS_CMP_DIFFERENT; > + /* > + * result == 0 if a match is found, and if so, copy the name in "b" > + * to "a" to cope with negative dentries getting the correct name. > + */ > + if (result == 0) > + memcpy((unsigned char *)a->name, b->name, a->len); > + return result; qstr->name is marked const for a reason, please don't overwrite it after it's creation. > +struct dentry_operations xfs_ci_dentry_operations = > +{ struct dentry_operations xfs_ci_dentry_operations = { > +static xfs_dahash_t > +xfs_ascii_ci_hashname( is the use of STATIC now officially phased out for XFS? > + ((sbp)->sb_versionnum & XFS_SB_VERSION_OLDCIBIT); no need for the braces around sbp > From owner-xfs@oss.sgi.com Thu Apr 3 15:56:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 15:56:20 -0700 (PDT) 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.0 required=5.0 tests=BAYES_50,HTML_MESSAGE 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 m33Mu7iA007762 for ; Thu, 3 Apr 2008 15:56:08 -0700 X-ASG-Debug-ID: 1207263404-71c5032d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from yw-out-1718.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id ACB6C910D60 for ; Thu, 3 Apr 2008 15:56:44 -0700 (PDT) Received: from yw-out-1718.google.com (yw-out-1718.google.com [74.125.46.152]) by cuda.sgi.com with ESMTP id wknRGaFoMA6JnwrH for ; Thu, 03 Apr 2008 15:56:44 -0700 (PDT) Received: by yw-out-1718.google.com with SMTP id 6so1237866ywa.32 for ; Thu, 03 Apr 2008 15:56:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type; bh=3nzMfKx30J3X7t1hNZ9RCgxE+xMk/yODtD9NLsVenHo=; b=t7rJD3LPicu0uh/8yjxCcFHtke+juIKK/9xX5X+wRNOAwYMXsg12A21LuuLWIK+JsNpdJ5Dp8rMbiDRLLft88T2VpsWnnlEMgb/hcxtto1rO9XGWrku1yOABmtbexW6SPbqAY8qWct3uHoWTSGz6k7aH8QTpWpTQB2ui+adFmV0= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=message-id:date:from:to:subject:mime-version:content-type; b=V/BUbh0Ye2rT+rAM4AEeUHkkbW+EriZHnK3qoAbva5W8q+awiD9+Z5lvYQ5dk/tXqwiwh0vLYCFNzc98VqG86HNTelUhaXoI2w2Dvkr7kNS6YBpCV8pEzYdLMTemSEdotSpj/HRzJMMyxSO29ZhjEOhF5gMBTdsIEPByD/YsB2A= Received: by 10.151.12.4 with SMTP id p4mr187943ybi.229.1207263403584; Thu, 03 Apr 2008 15:56:43 -0700 (PDT) Received: by 10.150.197.1 with HTTP; Thu, 3 Apr 2008 15:56:43 -0700 (PDT) Message-ID: <4f52331f0804031556n1f00e435g3273c516aacc5d95@mail.gmail.com> Date: Thu, 3 Apr 2008 15:56:43 -0700 From: "Fong Vang" To: xfs@oss.sgi.com X-ASG-Orig-Subj: xfs_check running out of memory Subject: xfs_check running out of memory MIME-Version: 1.0 X-Barracuda-Connect: yw-out-1718.google.com[74.125.46.152] X-Barracuda-Start-Time: 1207263404 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0016 1.0000 -2.0103 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.06 X-Barracuda-Spam-Status: No, SCORE=-1.06 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_10_20, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.46758 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.94 HTML_10_20 BODY: Message is 10% to 20% HTML X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 321 X-archive-position: 15198 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sudoyang@gmail.com Precedence: bulk X-list: xfs xfs_check on one of my 64-bit server keeps running out of memory checking a 6.5TB file system with millions of files. xfsprogs is version 2.9.4 One of the man pages online mentions a xfs_check64 version but I can't seem to find this anyway. Where can I find this tool? thank you. [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Thu Apr 3 16:00:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 16:00:11 -0700 (PDT) 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=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 m33N02nv009527 for ; Thu, 3 Apr 2008 16:00:02 -0700 X-ASG-Debug-ID: 1207263638-71bc02ff0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail2.shareable.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EA5CC910E62 for ; Thu, 3 Apr 2008 16:00:38 -0700 (PDT) Received: from mail2.shareable.org (mail2.shareable.org [80.68.89.115]) by cuda.sgi.com with ESMTP id VKd1ByEt16FYACtZ for ; Thu, 03 Apr 2008 16:00:38 -0700 (PDT) Received: from jamie by mail2.shareable.org with local (Exim 4.63) (envelope-from ) id 1JhYPc-0000x8-9h; Fri, 04 Apr 2008 00:00:04 +0100 Date: Fri, 4 Apr 2008 00:00:04 +0100 From: Jamie Lokier To: David Chinner Cc: Christoph Hellwig , Barry Naujok , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation Subject: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation Message-ID: <20080403230003.GA3422@shareable.org> Mail-Followup-To: David Chinner , Christoph Hellwig , Barry Naujok , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062709.011126702@chook.melbourne.sgi.com> <20080403171450.GB22385@infradead.org> <20080403222059.GU103491721@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080403222059.GU103491721@sgi.com> User-Agent: Mutt/1.5.13 (2006-08-11) X-Barracuda-Connect: mail2.shareable.org[80.68.89.115] X-Barracuda-Start-Time: 1207263638 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.1, rules version 3.1.46758 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15199 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jamie@shareable.org Precedence: bulk X-list: xfs David Chinner wrote: > On Thu, Apr 03, 2008 at 01:14:50PM -0400, Christoph Hellwig wrote: > > Validating file names is not the filesystem job. In fact it's utterly > > stupid, a unix filename is a sequence of bytes without special meaning > > except for ., .., / and \0 > > So you're suggesting that we should rely on userspace being bug free > and always only using valid unicode sequences in it's names? You can bet that one person's "invalid unicode sequence" will have been used as a valid filename on someone else's filesystem even using unicode. Meanings of "invalid unicode sequence" vary (a lot) depending on which standard you follow. Annoyance will come when they try to copy the directory. Such things are no great surprise on Windows and MacOS (both of which do even worse things than rejecting sequences), but in POSIX land we expect things like that to work. The rules for ., .., / and \0, and accepting the rest as a blob, have been well defined and understood for a long time. -- Jamie From owner-xfs@oss.sgi.com Thu Apr 3 16:05:51 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 16:05:58 -0700 (PDT) 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 m33N5lU9011299 for ; Thu, 3 Apr 2008 16:05:51 -0700 X-ASG-Debug-ID: 1207263983-7f27033b0000-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 B1C8073BC4B; Thu, 3 Apr 2008 16:06:23 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 1Fv1vIMiyvflNM9j; Thu, 03 Apr 2008 16:06:23 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JhYVj-0004Qv-8w; Thu, 03 Apr 2008 23:06:23 +0000 Date: Thu, 3 Apr 2008 19:06:23 -0400 From: Christoph Hellwig To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 4/7] XFS: Return case-insensitive match for dentry cache Subject: Re: [PATCH 4/7] XFS: Return case-insensitive match for dentry cache Message-ID: <20080403230623.GC448@infradead.org> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062708.654277049@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080402062708.654277049@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207263984 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.1, rules version 3.1.46759 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15200 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 04:25:12PM +1000, Barry Naujok wrote: > It also introduces a new type, xfs_name, which is similar to the > dentry cache's qstr type. It contains a pointer to a zone allocated > string (MAXNAMELEN sized) and the length of the actual name. This > string does not need to be NULL terminated (a counted string). > > xfs_name_t is only used in the lookup path for this patch, but may > be used in other locations too if desired. It maybe desirable not > to use xfs_name_t at all in the lookup functions but stick to > separate parameters (which will mean 7 instead of 5 arguments). wouldn't it be a lot cleaner to just pass the struct qstr all the way down instead of inventing an almost the same type? > To avoid polluting the dcache, we implement a new directory inode > operations for lookup. xfs_vn_ci_lookup() interacts directly with > the dcache and the code was derived from ntfs_lookup() in > fs/ntfs/namei.c. The dentry hash and compare overrides introduced > in the ASCII-CI patch has been removed. So maybe we should introduce the method in that patch already? Especially as the old one is buggy and the new one should be one ore more helpers in generic code it could easily be a patch of it's own. > + /* > + * Directory without a 'disconnected' dentry; we need to do > + * d_instantiate() by hand because it takes dcache_lock which > + * we already hold. > + */ > + list_add(&result->d_alias, &inode->i_dentry); > + result->d_inode = inode; > + spin_unlock(&dcache_lock); > + security_d_instantiate(result, inode); please add a documented __d_instanciated helper in common code that is used by this and d_instanciate. > +typedef struct qstr bhv_vstr_t; we try to get rid of the bhv_v* names, they're ugly amd their naming is outdated. Just use struct qstr until some port comes up with s conflicting one. > + return kmem_zone_zalloc(xfs_da_name_zone, KM_SLEEP); please don't introduce new KM_SLEEP allocations. > + kmem_zone_free(xfs_da_name_zone, (void *)name); this cast should not be needed. From owner-xfs@oss.sgi.com Thu Apr 3 16:11:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 16:11:33 -0700 (PDT) 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.6 required=5.0 tests=AWL,BAYES_00,HTML_MESSAGE 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 m33NBOwa012728 for ; Thu, 3 Apr 2008 16:11:26 -0700 X-ASG-Debug-ID: 1207264320-71c9038c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from el-out-1112.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EB63891111E for ; Thu, 3 Apr 2008 16:12:00 -0700 (PDT) Received: from el-out-1112.google.com (el-out-1112.google.com [209.85.162.180]) by cuda.sgi.com with ESMTP id tcMTuzZGnH82SCCx for ; Thu, 03 Apr 2008 16:12:00 -0700 (PDT) Received: by el-out-1112.google.com with SMTP id y26so1866275ele.8 for ; Thu, 03 Apr 2008 16:11:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; bh=YcTEtqmxt5eJe5uXrWd1ADTxb8FhOYi7sPJxvM7MvGs=; b=WoY7Ug4bmDGuus7uMVKv5g79jDSO+c8L/KrnHDVJgRYo//GMIuOnE9xwrnEdDM1fyCtfv/PP/9DUW9AiguLTORa2b6VI+aqBwOkS1Knkik9UivVYEgJgmZ0mskra2uiVmzAr/9qXSxN5VYJxz1mikCQ9kD6+7gLMtq+0QZP7d+8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; b=P4Tylbu1b9aepc6cbqS94zfviTFPMu/mrhEY0U2kGG9JUIn6SCW8RR528IHzTsK0vBX1kaDP1rtGsvURwgvIkITtOYiBMbIHz3Ge6SvdUy4suMMRND5NYr+jJXma7snC76xi8/rQmtX3HK+FfVTQaoQAmskpmOhJgQQBatP9ZFc= Received: by 10.151.47.7 with SMTP id z7mr212384ybj.103.1207264318792; Thu, 03 Apr 2008 16:11:58 -0700 (PDT) Received: by 10.150.197.1 with HTTP; Thu, 3 Apr 2008 16:11:58 -0700 (PDT) Message-ID: <4f52331f0804031611u30e706ddk10aa7a4d011df6a2@mail.gmail.com> Date: Thu, 3 Apr 2008 16:11:58 -0700 From: "Fong Vang" To: nscott@aconex.com X-ASG-Orig-Subj: Re: xfs_check running out of memory Subject: Re: xfs_check running out of memory Cc: xfs@oss.sgi.com In-Reply-To: <1207263793.21048.150.camel@edge.scott.net.au> MIME-Version: 1.0 References: <4f52331f0804031556n1f00e435g3273c516aacc5d95@mail.gmail.com> <1207263793.21048.150.camel@edge.scott.net.au> X-Barracuda-Connect: el-out-1112.google.com[209.85.162.180] X-Barracuda-Start-Time: 1207264320 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=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.46760 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 913 X-archive-position: 15201 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sudoyang@gmail.com Precedence: bulk X-list: xfs if that's the case then why is it running out of memory? This is a 6.5TB file systems with millions of files. The system has 24GB of RAM. It needs to hold everything in memory? On Thu, Apr 3, 2008 at 4:03 PM, Nathan Scott wrote: > > On Thu, 2008-04-03 at 15:56 -0700, Fong Vang wrote: > > > > > > > > > > xfs_check on one of my 64-bit server keeps running out of memory > > checking a > > 6.5TB file system with millions of files. xfsprogs is version 2.9.4 > > One of > > the man pages online mentions a xfs_check64 version but I can't seem > > to find > > this anyway. Where can I find this tool? > > > > Thats an IRIX remnant. On 64 bit Linux systems, xfs_db > (and hence xfs_check) will be built as 64 bit binaries. > > Use xfs_repair -n, xfs_check does not scale (and will > hopefully be replaced by xfs_repair -n someday). > > -- > Nathan > > [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Thu Apr 3 16:15:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 16:15:33 -0700 (PDT) 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.7 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 m33NFPpW014081 for ; Thu, 3 Apr 2008 16:15:26 -0700 X-ASG-Debug-ID: 1207264561-71c703550000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from postoffice2.aconex.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CFC32911238 for ; Thu, 3 Apr 2008 16:16:02 -0700 (PDT) Received: from postoffice2.aconex.com (prod.aconex.com [203.89.192.138]) by cuda.sgi.com with ESMTP id DWby4aovattWZ0NY for ; Thu, 03 Apr 2008 16:16:02 -0700 (PDT) Received: from postoffice.aconex.com (localhost [127.0.0.1]) by postoffice2.aconex.com (Spam Firewall) with ESMTP id 1E5434EB647; Fri, 4 Apr 2008 10:16:01 +1100 (EST) Received: from postoffice.aconex.com (postoffice.yarra.acx [192.168.3.1]) by postoffice2.aconex.com with ESMTP id OnAEG9nMTfOevcj1; Fri, 04 Apr 2008 10:16:01 +1100 (EST) Received: from [192.168.5.76] (unknown [203.89.192.141]) by postoffice.aconex.com (Postfix) with ESMTP id 0432492C0E2; Fri, 4 Apr 2008 10:16:01 +1100 (EST) X-ASG-Orig-Subj: Re: xfs_check running out of memory Subject: Re: xfs_check running out of memory From: Nathan Scott Reply-To: nscott@aconex.com To: Fong Vang Cc: xfs@oss.sgi.com In-Reply-To: <4f52331f0804031611u30e706ddk10aa7a4d011df6a2@mail.gmail.com> References: <4f52331f0804031556n1f00e435g3273c516aacc5d95@mail.gmail.com> <1207263793.21048.150.camel@edge.scott.net.au> <4f52331f0804031611u30e706ddk10aa7a4d011df6a2@mail.gmail.com> Content-Type: text/plain Organization: Aconex Date: Fri, 04 Apr 2008 10:16:00 +1100 Message-Id: <1207264560.21048.153.camel@edge.scott.net.au> Mime-Version: 1.0 X-Mailer: Evolution 2.12.3 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: prod.aconex.com[203.89.192.138] X-Barracuda-Start-Time: 1207264562 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.1, rules version 3.1.46760 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15202 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: nscott@aconex.com Precedence: bulk X-list: xfs On Thu, 2008-04-03 at 16:11 -0700, Fong Vang wrote: > > if that's the case then why is it running out of memory? This is a > 6.5TB file systems with millions of files. The system has 24GB of > RAM. It needs to hold everything in memory? xfs_check has 3 per-fs-block arrays that are held all in memory, IIRC. Use xfs_repair -n, which has been revamped to scale a whole lot better than check. -- Nathan From owner-xfs@oss.sgi.com Thu Apr 3 16:21:45 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 16:21:52 -0700 (PDT) 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.7 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 m33NLh1a019927 for ; Thu, 3 Apr 2008 16:21:45 -0700 X-ASG-Debug-ID: 1207264939-71bd03e40000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from postoffice2.aconex.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 54A8591135F for ; Thu, 3 Apr 2008 16:22:19 -0700 (PDT) Received: from postoffice2.aconex.com (prod.aconex.com [203.89.192.138]) by cuda.sgi.com with ESMTP id aFcZpYhdYsOVlXx9 for ; Thu, 03 Apr 2008 16:22:19 -0700 (PDT) Received: from postoffice.aconex.com (localhost [127.0.0.1]) by postoffice2.aconex.com (Spam Firewall) with ESMTP id C81EA4EB830; Fri, 4 Apr 2008 10:03:13 +1100 (EST) Received: from postoffice.aconex.com (postoffice.yarra.acx [192.168.3.1]) by postoffice2.aconex.com with ESMTP id ItmE7TFrQ1mjCFrA; Fri, 04 Apr 2008 10:03:13 +1100 (EST) Received: from [192.168.5.76] (unknown [203.89.192.141]) by postoffice.aconex.com (Postfix) with ESMTP id BB22B92C0DE; Fri, 4 Apr 2008 10:03:13 +1100 (EST) X-ASG-Orig-Subj: Re: xfs_check running out of memory Subject: Re: xfs_check running out of memory From: Nathan Scott Reply-To: nscott@aconex.com To: Fong Vang Cc: xfs@oss.sgi.com In-Reply-To: <4f52331f0804031556n1f00e435g3273c516aacc5d95@mail.gmail.com> References: <4f52331f0804031556n1f00e435g3273c516aacc5d95@mail.gmail.com> Content-Type: text/plain Organization: Aconex Date: Fri, 04 Apr 2008 10:03:13 +1100 Message-Id: <1207263793.21048.150.camel@edge.scott.net.au> Mime-Version: 1.0 X-Mailer: Evolution 2.12.3 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: prod.aconex.com[203.89.192.138] X-Barracuda-Start-Time: 1207264940 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.1, rules version 3.1.46760 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15203 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: nscott@aconex.com Precedence: bulk X-list: xfs On Thu, 2008-04-03 at 15:56 -0700, Fong Vang wrote: > > > > > xfs_check on one of my 64-bit server keeps running out of memory > checking a > 6.5TB file system with millions of files. xfsprogs is version 2.9.4 > One of > the man pages online mentions a xfs_check64 version but I can't seem > to find > this anyway. Where can I find this tool? > Thats an IRIX remnant. On 64 bit Linux systems, xfs_db (and hence xfs_check) will be built as 64 bit binaries. Use xfs_repair -n, xfs_check does not scale (and will hopefully be replaced by xfs_repair -n someday). -- Nathan From owner-xfs@oss.sgi.com Thu Apr 3 16:22:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 16:22:56 -0700 (PDT) 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.7 required=5.0 tests=AWL,BAYES_00,HTML_MESSAGE 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 m33NMkih020290 for ; Thu, 3 Apr 2008 16:22:48 -0700 X-ASG-Debug-ID: 1207265002-7e8303b80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from rn-out-0910.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5FB4873BAE6 for ; Thu, 3 Apr 2008 16:23:22 -0700 (PDT) Received: from rn-out-0910.google.com (rn-out-0910.google.com [64.233.170.184]) by cuda.sgi.com with ESMTP id TATIqfTwXXDjLIkv for ; Thu, 03 Apr 2008 16:23:22 -0700 (PDT) Received: by rn-out-0910.google.com with SMTP id j40so2987148rnf.12 for ; Thu, 03 Apr 2008 16:23:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; bh=XxH+D4P/f/bt8u8A4HHIIsn+4QML4lctBt36xhxmpQs=; b=cx7RfC+8vcXJlZ+6ivxoEzg1O8svIg6yfCQ0omNpJSpL9nLR/prOeUbffi6vq9eTlWinfJO3ia7V/L/eXCZ+sFwSDaFi+aYEGQaU4qxLUfXcGbsL8bgyAcjJ4Yw1Dz941UKtQsUxypToTg1wWxKQ81rP5hl5y4/0KTblacp3KDs= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; b=cYNmcnb6DWanuktT3tHz95Lg9HITipDLQ1skz+xDq33wSTmYmF9jUDJgBxwDqXfBxVcwqFINnEfiHib+A5vWQbBwwq9UOpONPrAeZ00txTdTRexcMaxy892fH8u34YqCKz/WAIry+7Uwu+o7nrTSMu+MvbxdEo+RkajmTRycAkU= Received: by 10.151.100.17 with SMTP id c17mr197860ybm.247.1207265002357; Thu, 03 Apr 2008 16:23:22 -0700 (PDT) Received: by 10.150.197.1 with HTTP; Thu, 3 Apr 2008 16:23:22 -0700 (PDT) Message-ID: <4f52331f0804031623hc880b03i90f1eed342e97f3c@mail.gmail.com> Date: Thu, 3 Apr 2008 16:23:22 -0700 From: "Fong Vang" To: nscott@aconex.com X-ASG-Orig-Subj: Re: xfs_check running out of memory Subject: Re: xfs_check running out of memory Cc: xfs@oss.sgi.com In-Reply-To: <1207264560.21048.153.camel@edge.scott.net.au> MIME-Version: 1.0 References: <4f52331f0804031556n1f00e435g3273c516aacc5d95@mail.gmail.com> <1207263793.21048.150.camel@edge.scott.net.au> <4f52331f0804031611u30e706ddk10aa7a4d011df6a2@mail.gmail.com> <1207264560.21048.153.camel@edge.scott.net.au> X-Barracuda-Connect: rn-out-0910.google.com[64.233.170.184] X-Barracuda-Start-Time: 1207265003 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=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.46761 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 844 X-archive-position: 15204 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sudoyang@gmail.com Precedence: bulk X-list: xfs good to know. Doesn't xfs_check also repair? with xfs_repair -n, this doesn't do any repair. SO the right approach on big volumes would be to run xfs_repair -n first to detect problem then xfs_repair to fix? thank you for the info. much appreciated. just, curious. where did you get this info? On Thu, Apr 3, 2008 at 4:16 PM, Nathan Scott wrote: > On Thu, 2008-04-03 at 16:11 -0700, Fong Vang wrote: > > > > if that's the case then why is it running out of memory? This is a > > 6.5TB file systems with millions of files. The system has 24GB of > > RAM. It needs to hold everything in memory? > > xfs_check has 3 per-fs-block arrays that are held all in memory, IIRC. > Use xfs_repair -n, which has been revamped to scale a whole lot better > than check. > > -- > Nathan > > [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Thu Apr 3 16:26:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 16:26:19 -0700 (PDT) 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 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 m33NQA9O021312 for ; Thu, 3 Apr 2008 16:26:11 -0700 X-ASG-Debug-ID: 1207246304-22c600c80000-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 56EB190A5FB for ; Thu, 3 Apr 2008 11:11:44 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id d5jD2g562W7ZAuU9 for ; Thu, 03 Apr 2008 11:11:44 -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 9547718003EEC; Thu, 3 Apr 2008 13:11:43 -0500 (CDT) Message-ID: <47F51DDE.8070501@sandeen.net> Date: Thu, 03 Apr 2008 13:11:42 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Jeremy Allison CC: Christoph Hellwig , Barry Naujok , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation Subject: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062709.011126702@chook.melbourne.sgi.com> <20080403171450.GB22385@infradead.org> <20080403172400.GC22812@samba1> In-Reply-To: <20080403172400.GC22812@samba1> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1207246305 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.1, rules version 3.1.46740 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15205 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Jeremy Allison wrote: > On Thu, Apr 03, 2008 at 01:14:50PM -0400, Christoph Hellwig wrote: >> Validating file names is not the filesystem job. In fact it's utterly >> stupid, a unix filename is a sequence of bytes without special meaning >> except for ., .., / and \0 > > This patch will be extremely useful for users who are serving > Windows clients using Samba. It allow admins to turn off the > userspace case insensitivity we have to emulate and be a significant > speed increase. I'd like to see the numbers... Simo tested an earlier version of this patch, and it was not faster.... Jeremy, what would be a representative test setup to use? Thanks, -Eric From owner-xfs@oss.sgi.com Thu Apr 3 16:26:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 16:26:20 -0700 (PDT) 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 (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 m33NQA00021313 for ; Thu, 3 Apr 2008 16:26:11 -0700 X-ASG-Debug-ID: 1207246164-60fc02d00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from filer.fsl.cs.sunysb.edu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5CF3A904751 for ; Thu, 3 Apr 2008 11:09:24 -0700 (PDT) Received: from filer.fsl.cs.sunysb.edu (filer.fsl.cs.sunysb.edu [130.245.126.2]) by cuda.sgi.com with ESMTP id 2u2NGh6WNF0zLYwM for ; Thu, 03 Apr 2008 11:09:24 -0700 (PDT) Received: from josefsipek.net (baal.fsl.cs.sunysb.edu [130.245.126.78]) by filer.fsl.cs.sunysb.edu (8.12.11.20060308/8.13.1) with ESMTP id m33I9HmF024083; Thu, 3 Apr 2008 14:09:17 -0400 Received: by josefsipek.net (Postfix, from userid 1000) id 8AA991C00E74; Thu, 3 Apr 2008 14:09:18 -0400 (EDT) Date: Thu, 3 Apr 2008 14:09:18 -0400 From: "Josef 'Jeff' Sipek" To: Jeremy Allison Cc: Christoph Hellwig , Barry Naujok , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation Subject: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation Message-ID: <20080403180918.GA30189@josefsipek.net> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062709.011126702@chook.melbourne.sgi.com> <20080403171450.GB22385@infradead.org> <20080403172400.GC22812@samba1> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080403172400.GC22812@samba1> User-Agent: Mutt/1.5.16 (2007-06-11) X-Barracuda-Connect: filer.fsl.cs.sunysb.edu[130.245.126.2] X-Barracuda-Start-Time: 1207246165 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.1, rules version 3.1.46740 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15206 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jeffpc@josefsipek.net Precedence: bulk X-list: xfs On Thu, Apr 03, 2008 at 10:24:00AM -0700, Jeremy Allison wrote: > On Thu, Apr 03, 2008 at 01:14:50PM -0400, Christoph Hellwig wrote: > > Validating file names is not the filesystem job. In fact it's utterly > > stupid, a unix filename is a sequence of bytes without special meaning > > except for ., .., / and \0 > > This patch will be extremely useful for users who are serving > Windows clients using Samba. It allow admins to turn off the > userspace case insensitivity we have to emulate and be a significant > speed increase. IIRC, the last version of this patch series didn't help on the performance scale. Any updates as to whether that got fixed up? Josef 'Jeff' Sipek. -- In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. - Linus Torvalds From owner-xfs@oss.sgi.com Thu Apr 3 16:31:45 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 16:31:53 -0700 (PDT) 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.7 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 m33NVhaX022695 for ; Thu, 3 Apr 2008 16:31:45 -0700 X-ASG-Debug-ID: 1207265539-3f9c008e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from postoffice2.aconex.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8427B91214C for ; Thu, 3 Apr 2008 16:32:20 -0700 (PDT) Received: from postoffice2.aconex.com (prod.aconex.com [203.89.192.138]) by cuda.sgi.com with ESMTP id ldDT0p9JiG8ZXFjT for ; Thu, 03 Apr 2008 16:32:20 -0700 (PDT) Received: from postoffice.aconex.com (localhost [127.0.0.1]) by postoffice2.aconex.com (Spam Firewall) with ESMTP id 93B244EB440; Fri, 4 Apr 2008 10:01:08 +1100 (EST) Received: from postoffice.aconex.com (postoffice.yarra.acx [192.168.3.1]) by postoffice2.aconex.com with ESMTP id dJVWP7jFTiyamfwJ; Fri, 04 Apr 2008 10:01:08 +1100 (EST) Received: from [192.168.5.76] (unknown [203.89.192.141]) by postoffice.aconex.com (Postfix) with ESMTP id 843FD92C0E2; Fri, 4 Apr 2008 10:01:08 +1100 (EST) X-ASG-Orig-Subj: Re: [PATCH 2/7] XFS: ASCII case-insensitive support Subject: Re: [PATCH 2/7] XFS: ASCII case-insensitive support From: Nathan Scott Reply-To: nscott@aconex.com To: Christoph Hellwig Cc: Barry Naujok , xfs@oss.sgi.com In-Reply-To: <20080403225556.GB448@infradead.org> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062708.071715758@chook.melbourne.sgi.com> <20080403225556.GB448@infradead.org> Content-Type: text/plain Organization: Aconex Date: Fri, 04 Apr 2008 10:01:08 +1100 Message-Id: <1207263668.21048.147.camel@edge.scott.net.au> Mime-Version: 1.0 X-Mailer: Evolution 2.12.3 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: prod.aconex.com[203.89.192.138] X-Barracuda-Start-Time: 1207265540 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.1, rules version 3.1.46760 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15207 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: nscott@aconex.com Precedence: bulk X-list: xfs On Thu, 2008-04-03 at 18:55 -0400, Christoph Hellwig wrote: > > is the use of STATIC now officially phased out for XFS? userspace requires it for a bunch of stuff (via libxfs). cheers. -- Nathan From owner-xfs@oss.sgi.com Thu Apr 3 16:51:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 16:51:53 -0700 (PDT) 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.7 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 m33NphAE025758 for ; Thu, 3 Apr 2008 16:51:45 -0700 X-ASG-Debug-ID: 1207266740-681800300000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from postoffice2.aconex.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E368373BE11 for ; Thu, 3 Apr 2008 16:52:20 -0700 (PDT) Received: from postoffice2.aconex.com (prod.aconex.com [203.89.192.138]) by cuda.sgi.com with ESMTP id umJnvYoMnFugqv62 for ; Thu, 03 Apr 2008 16:52:20 -0700 (PDT) Received: from postoffice.aconex.com (localhost [127.0.0.1]) by postoffice2.aconex.com (Spam Firewall) with ESMTP id 1CE6B4EB877; Fri, 4 Apr 2008 10:33:39 +1100 (EST) Received: from postoffice.aconex.com (postoffice.yarra.acx [192.168.3.1]) by postoffice2.aconex.com with ESMTP id YmeBddIUbdcpvcZ1; Fri, 04 Apr 2008 10:33:39 +1100 (EST) Received: from [192.168.5.76] (unknown [203.89.192.141]) by postoffice.aconex.com (Postfix) with ESMTP id 06F1492C0E2; Fri, 4 Apr 2008 10:33:39 +1100 (EST) X-ASG-Orig-Subj: Re: xfs_check running out of memory Subject: Re: xfs_check running out of memory From: Nathan Scott Reply-To: nscott@aconex.com To: Fong Vang Cc: xfs@oss.sgi.com In-Reply-To: <4f52331f0804031623hc880b03i90f1eed342e97f3c@mail.gmail.com> References: <4f52331f0804031556n1f00e435g3273c516aacc5d95@mail.gmail.com> <1207263793.21048.150.camel@edge.scott.net.au> <4f52331f0804031611u30e706ddk10aa7a4d011df6a2@mail.gmail.com> <1207264560.21048.153.camel@edge.scott.net.au> <4f52331f0804031623hc880b03i90f1eed342e97f3c@mail.gmail.com> Content-Type: text/plain Organization: Aconex Date: Fri, 04 Apr 2008 10:33:38 +1100 Message-Id: <1207265618.21048.159.camel@edge.scott.net.au> Mime-Version: 1.0 X-Mailer: Evolution 2.12.3 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: prod.aconex.com[203.89.192.138] X-Barracuda-Start-Time: 1207266740 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.1, rules version 3.1.46763 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15208 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: nscott@aconex.com Precedence: bulk X-list: xfs On Thu, 2008-04-03 at 16:23 -0700, Fong Vang wrote: > > > > > good to know. Doesn't xfs_check also repair? with xfs_repair -n, No, it doesn't. > this doesn't do any repair. SO the right approach on big volumes > would be to run xfs_repair -n first to detect problem then xfs_repair > to fix? Sure - whatever floats your boat. > thank you for the info. much appreciated. just, curious. where did > you get this info? >From the source. cheers. -- Nathan From owner-xfs@oss.sgi.com Thu Apr 3 16:56:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 16:56:24 -0700 (PDT) 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 m33NuEYR026730 for ; Thu, 3 Apr 2008 16:56:16 -0700 X-ASG-Debug-ID: 1207248244-45a8013a0000-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 E95BF7397C9 for ; Thu, 3 Apr 2008 11:44:04 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id fiMpGFCBDhD3P44h for ; Thu, 03 Apr 2008 11:44:04 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JhUPN-0008Sa-8e; Thu, 03 Apr 2008 18:43:33 +0000 Date: Thu, 3 Apr 2008 14:43:33 -0400 From: Christoph Hellwig To: Jeremy Allison Cc: Christoph Hellwig , Barry Naujok , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation Subject: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation Message-ID: <20080403184333.GA30595@infradead.org> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062709.011126702@chook.melbourne.sgi.com> <20080403171450.GB22385@infradead.org> <20080403172400.GC22812@samba1> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080403172400.GC22812@samba1> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207248244 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.1, rules version 3.1.46739 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15209 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, Apr 03, 2008 at 10:24:00AM -0700, Jeremy Allison wrote: > On Thu, Apr 03, 2008 at 01:14:50PM -0400, Christoph Hellwig wrote: > > Validating file names is not the filesystem job. In fact it's utterly > > stupid, a unix filename is a sequence of bytes without special meaning > > except for ., .., / and \0 > > This patch will be extremely useful for users who are serving > Windows clients using Samba. It allow admins to turn off the > userspace case insensitivity we have to emulate and be a significant > speed increase. CI filenames can work perfectly fine without adding validation of file names by treating non-conformant bytestreams as not having lower/upper case variants. From owner-xfs@oss.sgi.com Thu Apr 3 17:00:20 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 17:00:28 -0700 (PDT) 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.8 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 m3400Dk7027581 for ; Thu, 3 Apr 2008 17:00:17 -0700 Received: from [134.14.55.21] (dhcp21.melbourne.sgi.com [134.14.55.21]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA04393; Fri, 4 Apr 2008 10:00:35 +1000 Message-ID: <47F56F9E.4080200@sgi.com> Date: Fri, 04 Apr 2008 11:00:30 +1100 From: Mark Goodwin Reply-To: markgw@sgi.com Organization: SGI Engineering User-Agent: Thunderbird 1.5.0.14 (Windows/20071210) MIME-Version: 1.0 To: Eric Sandeen CC: Jeremy Allison , Christoph Hellwig , Barry Naujok , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062709.011126702@chook.melbourne.sgi.com> <20080403171450.GB22385@infradead.org> <20080403172400.GC22812@samba1> <47F51DDE.8070501@sandeen.net> In-Reply-To: <47F51DDE.8070501@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15210 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: markgw@sgi.com Precedence: bulk X-list: xfs Eric Sandeen wrote: > Jeremy Allison wrote: >> On Thu, Apr 03, 2008 at 01:14:50PM -0400, Christoph Hellwig wrote: >>> Validating file names is not the filesystem job. In fact it's utterly >>> stupid, a unix filename is a sequence of bytes without special meaning >>> except for ., .., / and \0 >> This patch will be extremely useful for users who are serving >> Windows clients using Samba. It allow admins to turn off the >> userspace case insensitivity we have to emulate and be a significant >> speed increase. > > I'd like to see the numbers... Simo tested an earlier version of this > patch, and it was not faster.... Yes I'd like to see some numbers too. Simo, can you post details of your testing (framework, methodology, results, etc). > > Jeremy, what would be a representative test setup to use? Cheers -- Mark -- Mark Goodwin markgw@sgi.com Engineering Manager for XFS and PCP Phone: +61-3-99631937 SGI Australian Software Group Cell: +61-4-18969583 ------------------------------------------------------------- From owner-xfs@oss.sgi.com Thu Apr 3 17:04:51 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 17:04:59 -0700 (PDT) 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.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_41, J_CHICKENPOX_43,J_CHICKENPOX_71 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 m3404jhb028471 for ; Thu, 3 Apr 2008 17:04:48 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA04531; Fri, 4 Apr 2008 10:05:14 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3405CsT120207774; Fri, 4 Apr 2008 10:05:14 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3405Bct120917371; Fri, 4 Apr 2008 10:05:11 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Fri, 4 Apr 2008 10:05:11 +1000 From: David Chinner To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH 6/7] XFS: Native Language Support for Unicode in XFS Message-ID: <20080404000511.GV103491721@sgi.com> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062709.286398420@chook.melbourne.sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20080402062709.286398420@chook.melbourne.sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15211 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 04:25:14PM +1000, Barry Naujok wrote: > Implement the "-o nls=" mount option and required conversion > of older style charater sets to/from UTF-8 to support non-UTF8 locales. > This option is compatible with other Linux filesystems supporting > the "nls" mount option. > > NLS conversion is performed on filename operations including readdir and > also user domain extended attribute names. The name zone defined in > the "return name" patch is used for temporarily holding the converted > name. > > If Unicode is not configed Y, then the NLS support is virtually a no-op. > > Signed-off-by: Barry Naujok > > --- > fs/xfs/linux-2.6/xfs_linux.h | 5 + > fs/xfs/linux-2.6/xfs_super.c | 21 ++++++ > fs/xfs/xfs_attr.c | 78 +++++++++++++++--------- > fs/xfs/xfs_attr.h | 6 - > fs/xfs/xfs_attr_leaf.c | 74 ++++++++++++++++------- > fs/xfs/xfs_clnt.h | 1 > fs/xfs/xfs_dir2_block.c | 14 +++- > fs/xfs/xfs_dir2_leaf.c | 15 ++++ > fs/xfs/xfs_dir2_sf.c | 12 +++ > fs/xfs/xfs_mount.h | 2 > fs/xfs/xfs_rename.c | 12 +++ > fs/xfs/xfs_unicode.c | 137 +++++++++++++++++++++++++++++++++++++++++++ > fs/xfs/xfs_unicode.h | 16 +++++ > fs/xfs/xfs_vfsops.c | 21 ++++++ > fs/xfs/xfs_vnodeops.c | 117 +++++++++++++++++++++++++----------- > 15 files changed, 429 insertions(+), 102 deletions(-) > > Index: kern_ci/fs/xfs/linux-2.6/xfs_linux.h > =================================================================== > --- kern_ci.orig/fs/xfs/linux-2.6/xfs_linux.h > +++ kern_ci/fs/xfs/linux-2.6/xfs_linux.h > @@ -181,6 +181,11 @@ > #define howmany(x, y) (((x)+((y)-1))/(y)) > > /* > + * NLS UTF-8 (unicode) character set > + */ > +#define XFS_NLS_UTF8 "utf8" > + > +/* > * Various platform dependent calls that don't fit anywhere else > */ > #define xfs_sort(a,n,s,fn) sort(a,n,s,fn,NULL) > Index: kern_ci/fs/xfs/linux-2.6/xfs_super.c > =================================================================== > --- kern_ci.orig/fs/xfs/linux-2.6/xfs_super.c > +++ kern_ci/fs/xfs/linux-2.6/xfs_super.c > @@ -126,6 +126,7 @@ xfs_args_allocate( > #define MNTOPT_NOATTR2 "noattr2" /* do not use attr2 attribute format */ > #define MNTOPT_FILESTREAM "filestreams" /* use filestreams allocator */ > #define MNTOPT_CILOOKUP "ci" /* case-insensitive dir lookup */ > +#define MNTOPT_NLS "nls" /* NLS code page to use */ > #define MNTOPT_QUOTA "quota" /* disk quotas (user) */ > #define MNTOPT_NOQUOTA "noquota" /* no quotas */ > #define MNTOPT_USRQUOTA "usrquota" /* user quota enabled */ > @@ -320,9 +321,20 @@ xfs_parseargs( > args->flags &= ~XFSMNT_ATTR2; > } else if (!strcmp(this_char, MNTOPT_FILESTREAM)) { > args->flags2 |= XFSMNT2_FILESTREAMS; > +#ifdef CONFIG_XFS_UNICODE > } else if (!strcmp(this_char, MNTOPT_CILOOKUP)) { > args->flags2 |= XFSMNT2_CILOOKUP; > -#ifndef CONFIG_XFS_UNICODE > + } else if (!strcmp(this_char, MNTOPT_NLS)) { > + if (!value || !*value) { > + cmn_err(CE_WARN, > + "XFS: %s option requires an argument", > + this_char); > + return EINVAL; > + } > + strncpy(args->nls, value, MAXNAMELEN); > +#else > + } else if (!strcmp(this_char, MNTOPT_CILOOKUP) || > + !strcmp(this_char, MNTOPT_NLS)) { > cmn_err(CE_WARN, > "XFS: %s option requires Unicode support", > this_char); Parse these options unconditionally - reject them later once we have all the info we need off disk (as has been previously suggested). > *========================================================================*/ > > int > -xfs_attr_fetch(xfs_inode_t *ip, const char *name, int namelen, > +xfs_attr_fetch(xfs_inode_t *ip, const uchar_t *name, int namelen, > char *value, int *valuelenp, int flags, struct cred *cred) May as well change these to the standard XFS function format.... > { > xfs_da_args_t args; > @@ -167,6 +167,7 @@ xfs_attr_get( > cred_t *cred) > { > int error, namelen; > + const uchar_t *uni_name; > > XFS_STATS_INC(xs_attr_get); > > @@ -176,24 +177,29 @@ xfs_attr_get( > if (namelen >= MAXNAMELEN) > return(EFAULT); /* match IRIX behaviour */ > > + if (XFS_FORCED_SHUTDOWN(ip->i_mount)) > + return(EIO); > + > /* Enforce UTF-8 only for user attr names */ > if (xfs_sb_version_hasunicode(&ip->i_mount->m_sb) && > (flags & (ATTR_ROOT | ATTR_SECURE)) == 0) { > - error = xfs_unicode_validate(name, namelen); > + error = xfs_nls_to_unicode(ip->i_mount, name, namelen, > + &uni_name, &namelen); Ok, so you are replacing the validation now with conversion. > if (error) > return error; > - } > - if (XFS_FORCED_SHUTDOWN(ip->i_mount)) > - return(EIO); > + } else > + uni_name = name; > > xfs_ilock(ip, XFS_ILOCK_SHARED); > - error = xfs_attr_fetch(ip, name, namelen, value, valuelenp, flags, cred); > + error = xfs_attr_fetch(ip, uni_name, namelen, value, valuelenp, > + flags, cred); > xfs_iunlock(ip, XFS_ILOCK_SHARED); > + xfs_unicode_nls_free(name, uni_name); > return(error); kill the () in the return statement while you are there.... > xfs_ilock(dp, XFS_ILOCK_SHARED); > if (XFS_IFORK_Q(dp) == 0 || > (dp->i_d.di_aformat == XFS_DINODE_FMT_EXTENTS && > dp->i_d.di_anextents == 0)) { > xfs_iunlock(dp, XFS_ILOCK_SHARED); > + xfs_unicode_nls_free(name, uni_name); > return(XFS_ERROR(ENOATTR)); Stack the error conditions at the end of the function and jump to them. i.e. do this here: error = ENOATTR; goto out_error; > } > xfs_iunlock(dp, XFS_ILOCK_SHARED); > > - return xfs_attr_remove_int(dp, name, namelen, flags); > + error = xfs_attr_remove_int(dp, uni_name, namelen, flags); out_error: > + xfs_unicode_nls_free(name, uni_name); > + return error; > } > > int /* error */ > @@ -658,9 +676,9 @@ xfs_attr_list_int(xfs_attr_list_context_ > */ > /*ARGSUSED*/ > STATIC int > -xfs_attr_put_listent(xfs_attr_list_context_t *context, attrnames_t *namesp, > - char *name, int namelen, > - int valuelen, char *value) > +xfs_attr_user_list(xfs_attr_list_context_t *context, attrnames_t *namesp, > + char *name, int namelen, > + int valuelen, char *value) Formatting. [snip a shiteload of whitespace fixes] > if (dp->i_d.di_forkoff) { > - if (offset < dp->i_d.di_forkoff) > + if (offset < dp->i_d.di_forkoff) > return 0; > - else > + else > return dp->i_d.di_forkoff; just kill the else there. [more whitespace] > @@ -734,7 +738,7 @@ xfs_attr_shortform_list(xfs_attr_list_co > cursor->hashval = sbp->hash; > cursor->offset = 0; > } > - error = context->put_listent(context, > + error = á(context, > namesp, > sbp->name, > sbp->namelen, That looks completely busted ;) > +/* > + * Do NLS name conversion if required for user attribute names and call > + * context's put_listent routine > + */ > + > +STATIC int > +xfs_attr_put_listent(xfs_attr_list_context_t *context, attrnames_t *namesp, > + char *name, int namelen, int valuelen, char *value) > +{ > + char *nls_name; > + int nls_namelen; > + int error; > + > + if (xfs_is_using_nls(context->dp->i_mount) && namesp == attr_user) { > + error = xfs_unicode_to_nls(context->dp->i_mount, name, namelen, > + &nls_name, &nls_namelen); > + if (error) > + return error; > + error = context->put_listent(context, namesp, nls_name, > + nls_namelen, valuelen, value); > + xfs_unicode_nls_free(name, nls_name); > + return error; > + } else > + return context->put_listent(context, namesp, name, namelen, > + valuelen, value); Kill the else. > @@ -513,16 +516,21 @@ xfs_dir2_block_getdents( > #if XFS_BIG_INUMS > ino += mp->m_inoadd; > #endif > - > + error = xfs_unicode_to_nls(mp, dep->name, dep->namelen, > + &nls_name, &nls_namelen); > + if (error) > + break; > /* > * If it didn't fit, set the final offset to here & return. > */ > - if (filldir(dirent, dep->name, dep->namelen, cook, > + if (filldir(dirent, nls_name, nls_namelen, cook, > ino, DT_UNKNOWN)) { > *offset = cook; > + xfs_unicode_nls_free(dep->name, nls_name); > xfs_da_brelse(NULL, bp); > return 0; > } > + xfs_unicode_nls_free(dep->name, nls_name); This whole chunk is repeated inmany places with only slight variations in error handling. A wrapper function that encompasses this filldir callback section would be appropriate. say xfs_dir_filldir()? > @@ -1087,13 +1090,21 @@ xfs_dir2_leaf_getdents( > ino += mp->m_inoadd; > #endif > > + error = xfs_unicode_to_nls(mp, dep->name, dep->namelen, > + &nls_name, &nls_namelen); > + if (error) > + break; > + > /* > * Won't fit. Return to caller. > */ > - if (filldir(dirent, dep->name, dep->namelen, > + if (filldir(dirent, nls_name, nls_namelen, > xfs_dir2_byte_to_dataptr(mp, curoff), > - ino, DT_UNKNOWN)) > + ino, DT_UNKNOWN)) { > + xfs_unicode_nls_free(dep->name, nls_name); > break; > + } > + xfs_unicode_nls_free(dep->name, nls_name); xfs_dir_filldir() > @@ -789,12 +793,18 @@ xfs_dir2_sf_getdents( > #if XFS_BIG_INUMS > ino += mp->m_inoadd; > #endif > + error = xfs_unicode_to_nls(mp, sfep->name, sfep->namelen, > + &nls_name, &nls_namelen); > + if (error) > + return error; > > - if (filldir(dirent, sfep->name, sfep->namelen, > + if (filldir(dirent, nls_name, nls_namelen, > off, ino, DT_UNKNOWN)) { > *offset = off; > + xfs_unicode_nls_free(sfep->name, nls_name); > return 0; > } > + xfs_unicode_nls_free(sfep->name, nls_name); xfs_dir_filldir() > @@ -250,10 +250,14 @@ xfs_rename( > xfs_itrace_entry(target_dp); > > if (xfs_sb_version_hasunicode(&mp->m_sb)) { > - error = xfs_unicode_validate(src_name, src_namelen); > + error = xfs_nls_to_unicode(mp, > + VNAME(src_vname), VNAMELEN(src_vname), > + (const uchar_t **)&src_name, &src_namelen); > if (error) > return error; > - error = xfs_unicode_validate(target_name, target_namelen); > + error = xfs_nls_to_unicode(mp, > + VNAME(target_vname), VNAMELEN(target_vname), > + (const uchar_t **)&target_name, &target_namelen); This is kinda messy with all those macros and casts. I think I mentioned before that the mess should be hidden in a helper function.... > if (error) > return error; > } > @@ -265,6 +269,8 @@ xfs_rename( > src_name, target_name, > 0, 0, 0); > if (error) { > + xfs_unicode_nls_free(VNAME(src_vname), src_name); > + xfs_unicode_nls_free(VNAME(target_vname), target_name); > return error; goto out_error; > } > } > @@ -598,6 +604,8 @@ std_return: > src_name, target_name, > 0, error, 0); > } out_error: > + xfs_unicode_nls_free(VNAME(src_vname), src_name); > + xfs_unicode_nls_free(VNAME(target_vname), target_name); > return error; > > abort_return: > --- kern_ci.orig/fs/xfs/xfs_unicode.c > +++ kern_ci/fs/xfs/xfs_unicode.c ..... > + } > + if (i == uni_namelen) { > + *nls_name = n; > + *nls_namelen = o; > + return 0; > + } > + error = ENAMETOOLONG; > +err_out: > + xfs_da_name_free(n); > + return error; > +} That's kind of convoluted - took me a moment to work out where the successful return was coming from. if (i != uni_namelen) { error = ENAMETOOLONG; goto out_err; } *nls_name = n; *nls_namelen = o; return 0; err_out: xfs_da_name_free(n); return error; } > @@ -76,6 +84,14 @@ void xfs_unicode_free_cft(const xfs_cft_ > #define xfs_unicode_read_cft(mp) (EOPNOTSUPP) > #define xfs_unicode_free_cft(cft) > > +#define xfs_is_using_nls(mp) 0 > + > +#define xfs_unicode_to_nls(mp, uname, ulen, pnname, pnlen) \ > + ((*(pnname)) = (uname), (*(pnlen)) = (ulen), 0) > +#define xfs_nls_to_unicode(mp, nname, nlen, puname, pulen) \ > + ((*(puname)) = (nname), (*(pulen)) = (nlen), 0) > +#define xfs_unicode_nls_free(sname, cname) > + static inline where possible. > --- kern_ci.orig/fs/xfs/xfs_vfsops.c > +++ kern_ci/fs/xfs/xfs_vfsops.c > @@ -405,13 +405,30 @@ xfs_finish_flags( > if (xfs_sb_version_hasunicode(&mp->m_sb)) { > if (ap->flags2 & XFSMNT2_CILOOKUP) > mp->m_flags |= XFS_MOUNT_CILOOKUP; > + > + mp->m_nls = ap->nls[0] ? load_nls(ap->nls) : load_nls_default(); > + if (!mp->m_nls) { > + cmn_err(CE_WARN, > + "XFS: unable to load nls mapping \"%s\"\n", ap->nls); > + return XFS_ERROR(EINVAL); > + } > + if (strcmp(mp->m_nls->charset, XFS_NLS_UTF8) == 0) { > + /* special case utf8 - no translation required */ > + unload_nls(mp->m_nls); > + mp->m_nls = NULL; > + } Can you push this off into a xfs_nls_load() helper function? > @@ -647,6 +664,8 @@ out: > xfs_unmountfs(mp, credp); > xfs_qmops_put(mp); > xfs_dmops_put(mp); > + if (xfs_is_using_nls(mp)) > + unload_nls(mp->m_nls); and an unload function as well (put those two lines inside it). > if (xfs_sb_version_hasunicode(&dp->i_mount->m_sb)) { > - error = xfs_unicode_validate(d_name->name, d_name->len); > + error = xfs_nls_to_unicode(dp->i_mount, d_name->name, > + d_name->len, &name.name, &name.len); > if (error) > return error; > + } else { > + name.name = d_name->name; > + name.len = d_name->len; > } wrapper function. > - namelen = VNAMELEN(dentry); > - > if (xfs_sb_version_hasunicode(&mp->m_sb)) { > - error = xfs_unicode_validate(name, namelen); > + error = xfs_nls_to_unicode(mp, VNAME(dentry), VNAMELEN(dentry), > + (const uchar_t **)&name, &namelen); > if (error) > return error; > + } else { > + name = VNAME(dentry); > + namelen = VNAMELEN(dentry); > } same wrapper > > if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) { > @@ -1846,8 +1853,10 @@ xfs_create( > DM_RIGHT_NULL, name, NULL, > mode, 0, 0); > > - if (error) > + if (error) { > + xfs_unicode_nls_free(VNAME(dentry), name); > return error; > + } goto out_error; > dm_event_sent = 1; > } > > @@ -1999,6 +2008,7 @@ std_return: > DM_RIGHT_NULL, name, NULL, > mode, error, 0); > } out_error: > + xfs_unicode_nls_free(VNAME(dentry), name); > return error; > > abort_return: ..... fix up all the other functions that have the same mods. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Thu Apr 3 18:01:44 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 18:01:52 -0700 (PDT) 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.9 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 m3411eQE013308 for ; Thu, 3 Apr 2008 18:01:43 -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 LAA06421; Fri, 4 Apr 2008 11:02:06 +1000 Message-ID: <47F57E0E.7010700@sgi.com> Date: Fri, 04 Apr 2008 12:02:06 +1100 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Andi Kleen CC: David Chinner , Lachlan McIlroy , xfs-dev , xfs-oss Subject: Re: [Patch] Cacheline align xlog_t References: <20080401231552.GV103491721@sgi.com> <47F3293C.6090708@sgi.com> <20080402054403.GF103491721@sgi.com> <87myocek4o.fsf@basil.nowhere.org> <20080402222347.GK103491721@sgi.com> <20080403064608.GS29105@one.firstfloor.org> In-Reply-To: <20080403064608.GS29105@one.firstfloor.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15212 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Andi Kleen wrote: > On Thu, Apr 03, 2008 at 08:23:47AM +1000, David Chinner wrote: >>> For the dynamic allocation you would rather need to make sure it >>> starts at a cache line boundary explicitely because the allocator doesn't >>> know the alignment of the target type, otherwise your careful >>> padding might be useless. > >> There isn't one, right? > > You can always align yourself with kmalloc (or any other arbitary > size allocator) with the standard technique: > get L1_CACHE_BYTES-1 or possibly better cache_line_size() - 1 bytes > more and then align the pointer manually with ALIGN. Only tricky part > is that you have to undo the alignment before freeing. > Yeah, how do you know how much was offset for the alignment to go back for the freeing. I guess you could also keep the original pointer or the offset handy (a pain). Or can the allocator help out? --Tim From owner-xfs@oss.sgi.com Thu Apr 3 18:18:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 03 Apr 2008 18:18:10 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_64 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 m341Hwcw015836 for ; Thu, 3 Apr 2008 18:18:00 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA06877; Fri, 4 Apr 2008 11:18:34 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m341IXsT120815601; Fri, 4 Apr 2008 11:18:34 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m341IVrj117605473; Fri, 4 Apr 2008 11:18:31 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Fri, 4 Apr 2008 11:18:31 +1000 From: David Chinner To: Andi Kleen Cc: David Chinner , Lachlan McIlroy , xfs-dev , xfs-oss Subject: Re: [Patch] Cacheline align xlog_t Message-ID: <20080404011831.GZ103491721@sgi.com> References: <20080401231552.GV103491721@sgi.com> <47F3293C.6090708@sgi.com> <20080402054403.GF103491721@sgi.com> <87myocek4o.fsf@basil.nowhere.org> <20080402222347.GK103491721@sgi.com> <20080403064608.GS29105@one.firstfloor.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080403064608.GS29105@one.firstfloor.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15213 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, Apr 03, 2008 at 08:46:08AM +0200, Andi Kleen wrote: > On Thu, Apr 03, 2008 at 08:23:47AM +1000, David Chinner wrote: > > > For the dynamic allocation you would rather need to make sure it > > > starts at a cache line boundary explicitely because the allocator doesn't > > > know the alignment of the target type, otherwise your careful > > > padding might be useless. > > > > Yup. Is there an allocator function gives us cacheline aligned > > allocation > > __get_free_pages() @) [ok not serious] > > > (apart from a slab initialised with SLAB_HWCACHE_ALIGN)? > > That too yes. > > > There isn't one, right? > > You can always align yourself with kmalloc (or any other arbitary > size allocator) with the standard technique: > get L1_CACHE_BYTES-1 or possibly better cache_line_size() - 1 bytes > more and then align the pointer manually with ALIGN. Only tricky part > is that you have to undo the alignment before freeing. Great. I guess that means a wrapper function is in order. I'm not going to deal with this as part of this patch series, though. I'll just remove the superfluous notations. Patch below. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group --- Reorganise xlog_t for better cacheline isolation of contention To reduce contention on the log in large CPU count, separate out different parts of the xlog_t structure onto different cachelines. Move each lock onto a different cacheline along with all the members that are accessed/modified while that lock is held. Also, move the debugging code into debug code. Version 2: o kill the structure alignment hint as these are dynamically allocated structures. Signed-off-by: Dave Chinner --- fs/xfs/xfs_log.c | 5 +--- fs/xfs/xfs_log_priv.h | 55 +++++++++++++++++++++++++++----------------------- 2 files changed, 32 insertions(+), 28 deletions(-) Index: 2.6.x-xfs-new/fs/xfs/xfs_log.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_log.c 2008-04-02 21:57:09.664237248 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_log.c 2008-04-02 21:57:12.591863526 +1000 @@ -1237,9 +1237,9 @@ xlog_alloc_log(xfs_mount_t *mp, XFS_BUF_SET_FSPRIVATE2(bp, (unsigned long)1); iclog->ic_bp = bp; iclog->hic_data = bp->b_addr; - +#ifdef DEBUG log->l_iclog_bak[i] = (xfs_caddr_t)&(iclog->ic_header); - +#endif head = &iclog->ic_header; memset(head, 0, sizeof(xlog_rec_header_t)); head->h_magicno = cpu_to_be32(XLOG_HEADER_MAGIC_NUM); @@ -1250,7 +1250,6 @@ xlog_alloc_log(xfs_mount_t *mp, head->h_fmt = cpu_to_be32(XLOG_FMT); memcpy(&head->h_fs_uuid, &mp->m_sb.sb_uuid, sizeof(uuid_t)); - iclog->ic_size = XFS_BUF_SIZE(bp) - log->l_iclog_hsize; iclog->ic_state = XLOG_STATE_ACTIVE; iclog->ic_log = log; Index: 2.6.x-xfs-new/fs/xfs/xfs_log_priv.h =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_log_priv.h 2008-04-02 21:57:09.668236737 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_log_priv.h 2008-04-03 07:46:41.418849158 +1000 @@ -361,7 +361,7 @@ typedef struct xlog_iclog_fields { /* reference counts need their own cacheline */ atomic_t ic_refcnt ____cacheline_aligned_in_smp; -} xlog_iclog_fields_t ____cacheline_aligned_in_smp; +} xlog_iclog_fields_t; typedef union xlog_in_core2 { xlog_rec_header_t hic_header; @@ -402,8 +402,29 @@ typedef struct xlog_in_core { * that round off problems won't occur when releasing partial reservations. */ typedef struct log { + /* The following fields don't need locking */ + struct xfs_mount *l_mp; /* mount point */ + struct xfs_buf *l_xbuf; /* extra buffer for log + * wrapping */ + struct xfs_buftarg *l_targ; /* buftarg of log */ + uint l_flags; + uint l_quotaoffs_flag; /* XFS_DQ_*, for QUOTAOFFs */ + struct xfs_buf_cancel **l_buf_cancel_table; + int l_iclog_hsize; /* size of iclog header */ + int l_iclog_heads; /* # of iclog header sectors */ + uint l_sectbb_log; /* log2 of sector size in BBs */ + uint l_sectbb_mask; /* sector size (in BBs) + * alignment mask */ + int l_iclog_size; /* size of log in bytes */ + int l_iclog_size_log; /* log power size of log */ + int l_iclog_bufs; /* number of iclog buffers */ + xfs_daddr_t l_logBBstart; /* start block of log */ + int l_logsize; /* size of log in bytes */ + int l_logBBsize; /* size of log in BB chunks */ + /* The following block of fields are changed while holding icloglock */ - sema_t l_flushsema; /* iclog flushing semaphore */ + sema_t l_flushsema ____cacheline_aligned_in_smp; + /* iclog flushing semaphore */ int l_flushcnt; /* # of procs waiting on this * sema */ int l_covered_state;/* state of "covering disk @@ -413,27 +434,14 @@ typedef struct log { xfs_lsn_t l_tail_lsn; /* lsn of 1st LR with unflushed * buffers */ xfs_lsn_t l_last_sync_lsn;/* lsn of last LR on disk */ - struct xfs_mount *l_mp; /* mount point */ - struct xfs_buf *l_xbuf; /* extra buffer for log - * wrapping */ - struct xfs_buftarg *l_targ; /* buftarg of log */ - xfs_daddr_t l_logBBstart; /* start block of log */ - int l_logsize; /* size of log in bytes */ - int l_logBBsize; /* size of log in BB chunks */ int l_curr_cycle; /* Cycle number of log writes */ int l_prev_cycle; /* Cycle number before last * block increment */ int l_curr_block; /* current logical log block */ int l_prev_block; /* previous logical log block */ - int l_iclog_size; /* size of log in bytes */ - int l_iclog_size_log; /* log power size of log */ - int l_iclog_bufs; /* number of iclog buffers */ - - /* The following field are used for debugging; need to hold icloglock */ - char *l_iclog_bak[XLOG_MAX_ICLOGS]; /* The following block of fields are changed while holding grant_lock */ - spinlock_t l_grant_lock; + spinlock_t l_grant_lock ____cacheline_aligned_in_smp; xlog_ticket_t *l_reserve_headq; xlog_ticket_t *l_write_headq; int l_grant_reserve_cycle; @@ -441,19 +449,16 @@ typedef struct log { int l_grant_write_cycle; int l_grant_write_bytes; - /* The following fields don't need locking */ #ifdef XFS_LOG_TRACE struct ktrace *l_trace; struct ktrace *l_grant_trace; #endif - uint l_flags; - uint l_quotaoffs_flag; /* XFS_DQ_*, for QUOTAOFFs */ - struct xfs_buf_cancel **l_buf_cancel_table; - int l_iclog_hsize; /* size of iclog header */ - int l_iclog_heads; /* # of iclog header sectors */ - uint l_sectbb_log; /* log2 of sector size in BBs */ - uint l_sectbb_mask; /* sector size (in BBs) - * alignment mask */ + + /* The following field are used for debugging; need to hold icloglock */ +#ifdef DEBUG + char *l_iclog_bak[XLOG_MAX_ICLOGS]; +#endif + } xlog_t; #define XLOG_FORCED_SHUTDOWN(log) ((log)->l_flags & XLOG_IO_ERROR) From owner-xfs@oss.sgi.com Fri Apr 4 02:08:23 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 04 Apr 2008 02:08:58 -0700 (PDT) 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.1 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 m3498LuC031292 for ; Fri, 4 Apr 2008 02:08:23 -0700 X-ASG-Debug-ID: 1207300133-49a702360000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from moutng.kundenserver.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3B4A0106F71F for ; Fri, 4 Apr 2008 02:08:53 -0700 (PDT) Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.188]) by cuda.sgi.com with ESMTP id zcz1JY8RiMyKgrMF for ; Fri, 04 Apr 2008 02:08:53 -0700 (PDT) Received: from lisa (p4FD34C56.dip.t-dialin.net [79.211.76.86]) by mrelayeu.kundenserver.de (node=mrelayeu8) with ESMTP (Nemesis) id 0ML31I-1Jhhuk0wR7-0003Zr; Fri, 04 Apr 2008 11:08:50 +0200 Received: from localhost (localhost [127.0.0.1]) by tyrex.lisa.loc (Postfix) with ESMTP id 05582F3A1C9A; Fri, 4 Apr 2008 11:08:50 +0200 (CEST) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Scanned: amavisd-new at lisa From: Hans-Peter Jansen To: David Chinner X-ASG-Orig-Subj: Re: [Patch] unique per-AG inode generation number initialisation Subject: Re: [Patch] unique per-AG inode generation number initialisation Date: Fri, 4 Apr 2008 11:08:42 +0200 User-Agent: KMail/1.9.9 Cc: xfs-dev , xfs-oss References: <20080401231815.GW103491721@sgi.com> In-Reply-To: <20080401231815.GW103491721@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200804041108.43442.hpj@urpla.net> X-Provags-ID: V01U2FsdGVkX18d1y7TTFgumYrpUrrTtdiPTHNdF4afpKHLxdE 34NH7Y8a8s07qXDBfikOF+ibX/e0JCLZw0ZNQPCyoFN7AXtoRT HlGcEb6Mz7j/1axHbvUXA== X-Barracuda-Connect: moutng.kundenserver.de[212.227.126.188] X-Barracuda-Start-Time: 1207300138 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.1, rules version 3.1.46800 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean X-archive-position: 15214 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hpj@urpla.net Precedence: bulk X-list: xfs Dear David, Am Mittwoch, 2. April 2008 schrieb David Chinner: > Don't initialise new inode generation numbers to zero > > When we allocation new inode chunks, we initialise the generation > numbers to zero. This works fine until we delete a chunk and then > reallocate it, resulting in the same inode numbers but with a > reset generation count. This can result in inode/generation > pairs of different inodes occurring relatively close together. > > Given that the inode/gen pair makes up the "unique" portion of > an NFS filehandle on XFS, this can result in file handles cached > on clients being seen on the wire from the server but refer to > a different file. This causes .... issues for NFS clients. > > Hence we need a unique generation number initialisation for > each inode to prevent reuse of a small portion of the generation > number space. Make this initialiser per-allocation group so > that it is not a single point of contention in the filesystem, > and increment it on every allocation within an AG to reduce the > chance that a generation number is reused for a given inode number > if the inode chunk is deleted and reallocated immediately > afterwards. > > It is safe to add the agi_newinogen field to the AGI without > using a feature bit. If an older kernel is used, it simply > will not update the field on allocation. If the kernel is > updated and the field has garbage in it, then it's like having a > random seed to the generation number.... Is this patch ready for production systems? Did it went through QA already? If it's ready, shouldn't it go to the Linux stable team then, also, since it sounds like a serious issue. My systems hit file servers with solely xfs via NFS3 rather heavily - hence I am concerned.. Thanks, Pete > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_ag.h | 4 +++- > fs/xfs/xfs_ialloc.c | 30 ++++++++++++++++++++++-------- > 2 files changed, 25 insertions(+), 9 deletions(-) > > Index: 2.6.x-xfs-new/fs/xfs/xfs_ag.h > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_ag.h 2008-01-18 18:30:06.000000000 > +1100 +++ 2.6.x-xfs-new/fs/xfs/xfs_ag.h 2008-03-26 13:03:41.122918236 > +1100 @@ -121,6 +121,7 @@ typedef struct xfs_agi { > * still being referenced. > */ > __be32 agi_unlinked[XFS_AGI_UNLINKED_BUCKETS]; > + __be32 agi_newinogen; /* inode cluster generation */ > } xfs_agi_t; > > #define XFS_AGI_MAGICNUM 0x00000001 > @@ -134,7 +135,8 @@ typedef struct xfs_agi { > #define XFS_AGI_NEWINO 0x00000100 > #define XFS_AGI_DIRINO 0x00000200 > #define XFS_AGI_UNLINKED 0x00000400 > -#define XFS_AGI_NUM_BITS 11 > +#define XFS_AGI_NEWINOGEN 0x00000800 > +#define XFS_AGI_NUM_BITS 12 > #define XFS_AGI_ALL_BITS ((1 << XFS_AGI_NUM_BITS) - 1) > > /* disk block (xfs_daddr_t) in the AG */ > Index: 2.6.x-xfs-new/fs/xfs/xfs_ialloc.c > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_ialloc.c 2008-03-25 15:41:27.000000000 > +1100 +++ 2.6.x-xfs-new/fs/xfs/xfs_ialloc.c 2008-03-26 14:29:47.998554368 > +1100 @@ -309,6 +309,8 @@ xfs_ialloc_ag_alloc( > free = XFS_MAKE_IPTR(args.mp, fbuf, i); > free->di_core.di_magic = cpu_to_be16(XFS_DINODE_MAGIC); > free->di_core.di_version = version; > + free->di_core.di_gen = agi->agi_newinogen; > + be32_add_cpu(&agi->agi_newinogen, 1); > free->di_next_unlinked = cpu_to_be32(NULLAGINO); > xfs_ialloc_log_di(tp, fbuf, i, > XFS_DI_CORE_BITS | XFS_DI_NEXT_UNLINKED); > @@ -347,7 +349,8 @@ xfs_ialloc_ag_alloc( > * Log allocation group header fields > */ > xfs_ialloc_log_agi(tp, agbp, > - XFS_AGI_COUNT | XFS_AGI_FREECOUNT | XFS_AGI_NEWINO); > + XFS_AGI_COUNT | XFS_AGI_FREECOUNT | > + XFS_AGI_NEWINO | XFS_AGI_NEWINOGEN); > /* > * Modify/log superblock values for inode count and inode free count. > */ > @@ -896,11 +899,12 @@ nextag: > ino = XFS_AGINO_TO_INO(mp, agno, rec.ir_startino + offset); > XFS_INOBT_CLR_FREE(&rec, offset); > rec.ir_freecount--; > + be32_add_cpu(&agi->agi_newinogen, 1); > if ((error = xfs_inobt_update(cur, rec.ir_startino, rec.ir_freecount, > rec.ir_free))) > goto error0; > be32_add(&agi->agi_freecount, -1); > - xfs_ialloc_log_agi(tp, agbp, XFS_AGI_FREECOUNT); > + xfs_ialloc_log_agi(tp, agbp, XFS_AGI_FREECOUNT | XFS_AGI_NEWINOGEN); > down_read(&mp->m_peraglock); > mp->m_perag[tagno].pagi_freecount--; > up_read(&mp->m_peraglock); > @@ -1320,6 +1324,11 @@ xfs_ialloc_compute_maxlevels( > > /* > * Log specified fields for the ag hdr (inode section) > + * > + * We don't log the unlinked inode fields through here; they > + * get logged directly to the buffer. Hence we have a discontinuity > + * in the fields we are logging and we need two calls to map all > + * the dirtied parts of the agi.... > */ > void > xfs_ialloc_log_agi( > @@ -1342,22 +1351,27 @@ xfs_ialloc_log_agi( > offsetof(xfs_agi_t, agi_newino), > offsetof(xfs_agi_t, agi_dirino), > offsetof(xfs_agi_t, agi_unlinked), > + offsetof(xfs_agi_t, agi_newinogen), > sizeof(xfs_agi_t) > }; > + int log_newino = fields & XFS_AGI_NEWINOGEN; > + > #ifdef DEBUG > xfs_agi_t *agi; /* allocation group header */ > > agi = XFS_BUF_TO_AGI(bp); > ASSERT(be32_to_cpu(agi->agi_magicnum) == XFS_AGI_MAGIC); > #endif > - /* > - * Compute byte offsets for the first and last fields. > - */ > + fields &= ~XFS_AGI_NEWINOGEN; > + > + /* Compute byte offsets for the first and last fields. */ > xfs_btree_offsets(fields, offsets, XFS_AGI_NUM_BITS, &first, &last); > - /* > - * Log the allocation group inode header buffer. > - */ > xfs_trans_log_buf(tp, bp, first, last); > + if (log_newino) { > + xfs_btree_offsets(XFS_AGI_NEWINOGEN, offsets, XFS_AGI_NUM_BITS, > + &first, &last); > + xfs_trans_log_buf(tp, bp, first, last); > + } > } > > /* From owner-xfs@oss.sgi.com Fri Apr 4 08:08:06 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 04 Apr 2008 08:08:17 -0700 (PDT) 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.2 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 m34F85ud019609 for ; Fri, 4 Apr 2008 08:08:06 -0700 X-ASG-Debug-ID: 1207321718-699803b70000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.pawisda.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3EB92741D50 for ; Fri, 4 Apr 2008 08:08:39 -0700 (PDT) Received: from mail.pawisda.de (mail.pawisda.de [213.157.4.156]) by cuda.sgi.com with ESMTP id hXUW3c4GMgAPMjao for ; Fri, 04 Apr 2008 08:08:39 -0700 (PDT) Received: from localhost (localhost.intra.frontsite.de [127.0.0.1]) by mail.pawisda.de (Postfix) with ESMTP id 97FBF124D3; Fri, 4 Apr 2008 17:08:38 +0200 (CEST) Received: from mail.pawisda.de ([127.0.0.1]) by localhost (ndb [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 04290-04; Fri, 4 Apr 2008 17:08:32 +0200 (CEST) Received: from [192.168.51.2] (lw-pc002.intra.frontsite.de [192.168.51.2]) by mail.pawisda.de (Postfix) with ESMTP id 18631F160; Fri, 4 Apr 2008 17:08:32 +0200 (CEST) X-ASG-Orig-Subj: Re: [PATCH] do not test return value of xfs_bmap_*_count_leaves Subject: Re: [PATCH] do not test return value of xfs_bmap_*_count_leaves From: Ruben Porras To: "Josef 'Jeff' Sipek" Cc: xfs@oss.sgi.com In-Reply-To: <20080328154605.GA28322@josefsipek.net> References: <1206719011.8339.6.camel@marzo> <20080328154605.GA28322@josefsipek.net> Content-Type: multipart/mixed; boundary="=-yT0AAyVBBcP+RhUUuHTG" Date: Fri, 04 Apr 2008 17:08:30 +0200 Message-Id: <1207321711.1043.9.camel@lw-pc002.intra.pawisda.de> Mime-Version: 1.0 X-Mailer: Evolution 2.12.3 X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Scanned: by amavisd-new at pawisda.de X-Barracuda-Connect: mail.pawisda.de[213.157.4.156] X-Barracuda-Start-Time: 1207321722 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.1, rules version 3.1.46822 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean X-archive-position: 15215 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: ruben.porras@linworks.de Precedence: bulk X-list: xfs --=-yT0AAyVBBcP+RhUUuHTG Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Am Freitag, den 28.03.2008, 11:46 -0400 schrieb Josef 'Jeff' Sipek: > On Fri, Mar 28, 2008 at 04:43:31PM +0100, Ruben Porras wrote: > > These functions, xfs_bmap_count_leaves and xfs_bmap_disk_count_leaves, > > return always 0. Therefore it is not necessary to test the return value. > > If it always returns 0, why not make it void? better, patch attached. -- Rubén Porras Campo Telekommunikation Engineer LinWorks GmbH Robert-Koch-Straße 9; 64331 Weiterstadt http://www.linworks.de --=-yT0AAyVBBcP+RhUUuHTG Content-Disposition: attachment; filename=xfs_bmap.patch Content-Type: text/x-patch; name=xfs_bmap.patch; charset=utf-8 Content-Transfer-Encoding: 7bit Index: fs/xfs/xfs_bmap.c =================================================================== RCS file: /cvs/linux-2.6-xfs/fs/xfs/xfs_bmap.c,v retrieving revision 1.387 diff -u -r1.387 xfs_bmap.c --- fs/xfs/xfs_bmap.c 26 Mar 2008 15:25:15 -0000 1.387 +++ fs/xfs/xfs_bmap.c 4 Apr 2008 15:05:14 -0000 @@ -6356,13 +6356,9 @@ mp = ip->i_mount; ifp = XFS_IFORK_PTR(ip, whichfork); if ( XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS ) { - if (unlikely(xfs_bmap_count_leaves(ifp, 0, + xfs_bmap_count_leaves(ifp, 0, ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t), - count) < 0)) { - XFS_ERROR_REPORT("xfs_bmap_count_blocks(1)", - XFS_ERRLEVEL_LOW, mp); - return XFS_ERROR(EFSCORRUPTED); - } + count); return 0; } @@ -6443,13 +6439,7 @@ for (;;) { nextbno = be64_to_cpu(block->bb_rightsib); numrecs = be16_to_cpu(block->bb_numrecs); - if (unlikely(xfs_bmap_disk_count_leaves(0, - block, numrecs, count) < 0)) { - xfs_trans_brelse(tp, bp); - XFS_ERROR_REPORT("xfs_bmap_count_tree(2)", - XFS_ERRLEVEL_LOW, mp); - return XFS_ERROR(EFSCORRUPTED); - } + xfs_bmap_disk_count_leaves(0, block, numrecs, count); xfs_trans_brelse(tp, bp); if (nextbno == NULLFSBLOCK) break; @@ -6467,7 +6457,7 @@ /* * Count leaf blocks given a range of extent records. */ -STATIC int +STATIC void xfs_bmap_count_leaves( xfs_ifork_t *ifp, xfs_extnum_t idx, @@ -6480,14 +6470,13 @@ xfs_bmbt_rec_host_t *frp = xfs_iext_get_ext(ifp, idx + b); *count += xfs_bmbt_get_blockcount(frp); } - return 0; } /* * Count leaf blocks given a range of extent records originally * in btree format. */ -STATIC int +STATIC void xfs_bmap_disk_count_leaves( xfs_extnum_t idx, xfs_bmbt_block_t *block, @@ -6501,5 +6490,4 @@ frp = XFS_BTREE_REC_ADDR(xfs_bmbt, block, idx + b); *count += xfs_bmbt_disk_get_blockcount(frp); } - return 0; } --=-yT0AAyVBBcP+RhUUuHTG-- From owner-xfs@oss.sgi.com Fri Apr 4 08:11:54 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 04 Apr 2008 08:12:01 -0700 (PDT) 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 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 m34FBrCk020499 for ; Fri, 4 Apr 2008 08:11:53 -0700 X-ASG-Debug-ID: 1207321947-17db010c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.pawisda.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2CBC191D4DC for ; Fri, 4 Apr 2008 08:12:28 -0700 (PDT) Received: from mail.pawisda.de (mail.pawisda.de [213.157.4.156]) by cuda.sgi.com with ESMTP id 4ZICKuWoPATOTajX for ; Fri, 04 Apr 2008 08:12:28 -0700 (PDT) Received: from localhost (localhost.intra.frontsite.de [127.0.0.1]) by mail.pawisda.de (Postfix) with ESMTP id 67A35124D9 for ; Fri, 4 Apr 2008 17:12:28 +0200 (CEST) Received: from mail.pawisda.de ([127.0.0.1]) by localhost (ndb [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 04290-05 for ; Fri, 4 Apr 2008 17:12:23 +0200 (CEST) Received: from [192.168.51.2] (lw-pc002.intra.frontsite.de [192.168.51.2]) by mail.pawisda.de (Postfix) with ESMTP id F2F7BF160 for ; Fri, 4 Apr 2008 17:12:22 +0200 (CEST) X-ASG-Orig-Subj: [PATCH] fix comments related to xfs_write_file Subject: [PATCH] fix comments related to xfs_write_file From: Ruben Porras To: xfs@oss.sgi.com Content-Type: multipart/mixed; boundary="=-QNR/w8iiZ5KYQLytZkEk" Date: Fri, 04 Apr 2008 17:12:21 +0200 Message-Id: <1207321941.1043.14.camel@lw-pc002.intra.pawisda.de> Mime-Version: 1.0 X-Mailer: Evolution 2.12.3 X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Scanned: by amavisd-new at pawisda.de X-Barracuda-Connect: mail.pawisda.de[213.157.4.156] X-Barracuda-Start-Time: 1207321950 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.1, rules version 3.1.46824 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean X-archive-position: 15216 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: ruben.porras@linworks.de Precedence: bulk X-list: xfs --=-QNR/w8iiZ5KYQLytZkEk Content-Type: text/plain Content-Transfer-Encoding: 7bit The function xfs_write_file does no longer exists, i think that the first comment doesn't even make sense, and that the second one is correct writing xfs_write instead of xfs_write_file. --=-QNR/w8iiZ5KYQLytZkEk Content-Disposition: attachment; filename=xfs_write_file.patch Content-Type: text/x-patch; name=xfs_write_file.patch; charset=UTF-8 Content-Transfer-Encoding: 7bit Index: fs/xfs/xfs_inode.c =================================================================== RCS file: /cvs/linux-2.6-xfs/fs/xfs/xfs_inode.c,v retrieving revision 1.495 diff -u -r1.495 xfs_inode.c --- fs/xfs/xfs_inode.c 22 Feb 2008 03:05:49 -0000 1.495 +++ fs/xfs/xfs_inode.c 4 Apr 2008 14:55:46 -0000 @@ -1799,11 +1799,6 @@ ASSERT(ismrlocked(&(ip->i_iolock), MR_UPDATE) != 0); ASSERT(new_size > ip->i_size); - /* - * Zero any pages that may have been created by - * xfs_write_file() beyond the end of the file - * and any blocks between the old and new file sizes. - */ return xfs_zero_eof(ip, new_size, ip->i_size); } Index: fs/xfs/xfs_rw.c =================================================================== RCS file: /cvs/linux-2.6-xfs/fs/xfs/xfs_rw.c,v retrieving revision 1.399 diff -u -r1.399 xfs_rw.c --- fs/xfs/xfs_rw.c 24 Aug 2007 16:13:42 -0000 1.399 +++ fs/xfs/xfs_rw.c 4 Apr 2008 14:55:47 -0000 @@ -1,3 +1,4 @@ + /* * Copyright (c) 2000-2006 Silicon Graphics, Inc. * All Rights Reserved. @@ -114,7 +115,7 @@ * the fact that buffered writes lock out direct I/O * writes - the direct I/O write could have extended * the size nontransactionally, then finished before - * we started. xfs_write_file will think that the file + * we started. xfs_write will think that the file * didn't grow but the update isn't safe unless the * size change is logged. * --=-QNR/w8iiZ5KYQLytZkEk-- From owner-xfs@oss.sgi.com Fri Apr 4 11:07:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 04 Apr 2008 11:07:10 -0700 (PDT) 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.3 required=5.0 tests=AWL,BAYES_50,HTML_MESSAGE 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 m34I711I019468 for ; Fri, 4 Apr 2008 11:07:03 -0700 X-ASG-Debug-ID: 1207332457-75f902360000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ti-out-0910.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5A65791F904 for ; Fri, 4 Apr 2008 11:07:37 -0700 (PDT) Received: from ti-out-0910.google.com (ti-out-0910.google.com [209.85.142.184]) by cuda.sgi.com with ESMTP id LvpUkKj7v8QeRse9 for ; Fri, 04 Apr 2008 11:07:37 -0700 (PDT) Received: by ti-out-0910.google.com with SMTP id d10so171407tib.18 for ; Fri, 04 Apr 2008 11:07:37 -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:mime-version:content-type; bh=VzGyVXdHho01BLMDNCp84VVoHbWX1/plIrf8kE7eMAo=; b=bwGSuLLDH59iwBe+XCTxDiP3l6Z3f7Hb0u6dI0neScSrAtL1m+kly2Yc/u0XLNTB+JaOlh84VoY7hNw89Pai/+JuSRQsI6QxzTu0rebn5zyGCGjOZW09Y9GJeDJ5CvDVnvo+2+EoJ9+xTBcLtiiDLP0BpTonbUdaZ683aDl1sko= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:mime-version:content-type; b=Y3y7nyczfEGbZHGj6X2kR/mH0XQ+jFihhF6tm0d2lr0e+VPm039n+MEyLVJHFmhKhoBFW7l9hG6V4nazuQiwPhw0xsPpOn2/WjTn6sPEOMlBEgvlI0iSbHm68AffWX9n7AWE6QPgWLmDIXUPiScPY/wORGC1cUUctwyCBRxVC1M= Received: by 10.151.114.7 with SMTP id r7mr747870ybm.201.1207332027186; Fri, 04 Apr 2008 11:00:27 -0700 (PDT) Received: by 10.150.197.1 with HTTP; Fri, 4 Apr 2008 11:00:27 -0700 (PDT) Message-ID: <4f52331f0804041100g696ba02er47c3642c56a24cf7@mail.gmail.com> Date: Fri, 4 Apr 2008 11:00:27 -0700 From: "Fong Vang" To: xfs@oss.sgi.com X-ASG-Orig-Subj: suggested tuning for XFS on RAID system Subject: suggested tuning for XFS on RAID system MIME-Version: 1.0 X-Barracuda-Connect: ti-out-0910.google.com[209.85.142.184] X-Barracuda-Start-Time: 1207332458 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.38 X-Barracuda-Spam-Status: No, SCORE=-1.38 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_00_10, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.46836 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.64 HTML_00_10 BODY: Message is 0% to 10% HTML 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 522 X-archive-position: 15217 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sudoyang@gmail.com Precedence: bulk X-list: xfs Anyone has any suggestion on tuning XFS for more stability and reliability on a 1TB and 7TB XFS file system that holds potentially millions of small files? The file system is built on a RAID-10 file system with caching turned on in the raid controller (can't switch it off or we loose too much performance). about 80% of the IO operations are write for about 2 months then this switches to 20% write and 80% reads after the two month period. Any thoughts? Thank you for your help. [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Fri Apr 4 13:49:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 04 Apr 2008 13:49:35 -0700 (PDT) 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.5 required=5.0 tests=BAYES_00,MISSING_MIME_HB_SEP 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 m34KnO45018607 for ; Fri, 4 Apr 2008 13:49:27 -0700 X-ASG-Debug-ID: 1207342199-6ba5010d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from nlpi101.prodigy.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3870E107052E for ; Fri, 4 Apr 2008 13:49:59 -0700 (PDT) Received: from nlpi101.prodigy.net (nlpi101.prodigy.net [207.115.36.117]) by cuda.sgi.com with ESMTP id blzHNeWmhZ6jrXjJ for ; Fri, 04 Apr 2008 13:49:59 -0700 (PDT) X-ORBL: [75.36.32.111] Received: from localhost (localhost) by nlpi101.prodigy.net (8.13.8 out.dk.spool/8.13.8) id m34KnxvM010231; Fri, 4 Apr 2008 15:49:59 -0500 Date: Fri, 4 Apr 2008 15:49:59 -0500 From: Mail Delivery Subsystem Message-Id: <200804042049.m34KnxvM010231@nlpi101.prodigy.net> To: MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary="m34KnxvM010231.1207342199/nlpi101.prodigy.net" Content-Transfer-Encoding: 8bit X-ASG-Orig-Subj: Returned mail: see transcript for details Subject: Returned mail: see transcript for details Auto-Submitted: auto-generated (failure) X-Barracuda-Connect: nlpi101.prodigy.net[207.115.36.117] X-Barracuda-Start-Time: 1207342202 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0762 1.0000 -1.5369 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.54 X-Barracuda-Spam-Status: No, SCORE=-1.54 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.1, rules version 3.1.46846 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15218 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: MAILER-DAEMON@nlpi101.prodigy.net Precedence: bulk X-list: xfs <<< No Message Collected >>> --m34KnxvM010231.1207342199/nlpi101.prodigy.net-- From owner-xfs@oss.sgi.com Sat Apr 5 07:01:10 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 05 Apr 2008 07:02:27 -0700 (PDT) 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 m35E19L1028110 for ; Sat, 5 Apr 2008 07:01:10 -0700 X-ASG-Debug-ID: 1207404104-4af100e90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp.getmail.no (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7C102749DDF for ; Sat, 5 Apr 2008 07:01:44 -0700 (PDT) Received: from smtp.getmail.no (smtp.getmail.no [84.208.20.33]) by cuda.sgi.com with ESMTP id DouqbHRA4Rs1kEca for ; Sat, 05 Apr 2008 07:01:44 -0700 (PDT) Received: from pmxchannel-daemon.no-osl-m323-srv-009-z2.isp.get.no by no-osl-m323-srv-009-z2.isp.get.no (Sun Java System Messaging Server 6.2-7.05 (built Sep 5 2006)) id <0JYU00C0DUYUMT00@no-osl-m323-srv-009-z2.isp.get.no> for xfs@oss.sgi.com; Sat, 05 Apr 2008 16:01:42 +0200 (CEST) Received: from smtp.getmail.no ([10.5.16.1]) by no-osl-m323-srv-009-z2.isp.get.no (Sun Java System Messaging Server 6.2-7.05 (built Sep 5 2006)) with ESMTP id <0JYU007PPUYGDX40@no-osl-m323-srv-009-z2.isp.get.no> for xfs@oss.sgi.com; Sat, 05 Apr 2008 16:01:28 +0200 (CEST) Received: from localhost ([84.215.109.218]) by no-osl-m323-srv-004-z1.isp.get.no (Sun Java System Messaging Server 6.2-7.05 (built Sep 5 2006)) with ESMTP id <0JYU0011GUYGU880@no-osl-m323-srv-004-z1.isp.get.no> for xfs@oss.sgi.com; Sat, 05 Apr 2008 16:01:28 +0200 (CEST) Received: from thor by localhost with local (Exim 4.69 #1 (Debian)) id 1Ji8xU-0000Jh-5o for ; Sat, 05 Apr 2008 16:01:28 +0200 Date: Sat, 05 Apr 2008 16:01:28 +0200 From: Thor Kristoffersen X-ASG-Orig-Subj: Re: Does XFS prevent disk spindown? Subject: Re: Does XFS prevent disk spindown? In-reply-to: To: xfs@oss.sgi.com Message-id: MIME-version: 1.0 Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7BIT References: <20080401003005.GJ103491721@sgi.com> <47F1CF6D.2040103@sandeen.net> User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.1 (gnu/linux) X-Barracuda-Connect: smtp.getmail.no[84.208.20.33] X-Barracuda-Start-Time: 1207404106 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=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.46912 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15219 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: thorkr@gmail.com Precedence: bulk X-list: xfs (It looks like my reply never made it to the list so I'm trying again.) Eric Sandeen writes: > David Chinner wrote: >> On Mon, Mar 31, 2008 at 08:26:00PM +0200, Thor Kristoffersen wrote: >>> I've noticed that when I spin down XFS-mounted disks they spin up again >>> shortly afterwards. I used iostat to monitor disk accesses to a mounted >>> partition (with noatime) in single user mode. Apparently there is a write >>> access to the partition approximately every 35 seconds, even if the >>> partition is idle. As far as I can understand, since there is no data that >>> needs to be flushed this must be done by an XFS daemon for some purpose. > > Use blktrace, or echo 1 > /proc/sys/vm/block_dump to see what block and > who's writing it... it's probably the superblock? what kernel? This is kernel version 2.6.24. More specifically it's a Debian kernel from package linux-image-2.6.24-1-686 (2.6.24-4). I put the system in runlevel 1 and executed the test as you suggested. On /dev/sda3 I have mounted (with noatime) an XFS filesystem that contains data that is not supposed to be accessed by any process. In the output below I have filtered out all accesses to other partitions. (BTW, this is not actually the disk that I wanted to spin down, but I think the log proves my point.) Thor ------------------------------------------------------ Tue Apr 1 18:51:27 CEST 2008 xfssyncd(3426): WRITE block 682946473 on sda3 Tue Apr 1 18:51:32 CEST 2008 Tue Apr 1 18:51:37 CEST 2008 Tue Apr 1 18:51:42 CEST 2008 Tue Apr 1 18:51:47 CEST 2008 Tue Apr 1 18:51:52 CEST 2008 Tue Apr 1 18:51:57 CEST 2008 Tue Apr 1 18:52:02 CEST 2008 xfssyncd(3426): WRITE block 682946475 on sda3 Tue Apr 1 18:52:07 CEST 2008 Tue Apr 1 18:52:12 CEST 2008 Tue Apr 1 18:52:17 CEST 2008 Tue Apr 1 18:52:22 CEST 2008 Tue Apr 1 18:52:27 CEST 2008 Tue Apr 1 18:52:32 CEST 2008 Tue Apr 1 18:52:37 CEST 2008 Tue Apr 1 18:52:42 CEST 2008 xfssyncd(3426): WRITE block 682946477 on sda3 Tue Apr 1 18:52:47 CEST 2008 Tue Apr 1 18:52:52 CEST 2008 Tue Apr 1 18:52:57 CEST 2008 Tue Apr 1 18:53:02 CEST 2008 Tue Apr 1 18:53:07 CEST 2008 Tue Apr 1 18:53:12 CEST 2008 Tue Apr 1 18:53:17 CEST 2008 xfssyncd(3426): WRITE block 682946479 on sda3 Tue Apr 1 18:53:22 CEST 2008 Tue Apr 1 18:53:27 CEST 2008 Tue Apr 1 18:53:32 CEST 2008 Tue Apr 1 18:53:37 CEST 2008 Tue Apr 1 18:53:42 CEST 2008 Tue Apr 1 18:53:47 CEST 2008 Tue Apr 1 18:53:52 CEST 2008 xfssyncd(3426): WRITE block 682946481 on sda3 Tue Apr 1 18:53:57 CEST 2008 Tue Apr 1 18:54:02 CEST 2008 Tue Apr 1 18:54:07 CEST 2008 Tue Apr 1 18:54:12 CEST 2008 Tue Apr 1 18:54:17 CEST 2008 Tue Apr 1 18:54:22 CEST 2008 Tue Apr 1 18:54:27 CEST 2008 xfssyncd(3426): WRITE block 682946483 on sda3 Tue Apr 1 18:54:32 CEST 2008 Tue Apr 1 18:54:37 CEST 2008 Tue Apr 1 18:54:42 CEST 2008 Tue Apr 1 18:54:47 CEST 2008 Tue Apr 1 18:54:52 CEST 2008 Tue Apr 1 18:54:57 CEST 2008 Tue Apr 1 18:55:02 CEST 2008 xfssyncd(3426): WRITE block 682946485 on sda3 Tue Apr 1 18:55:07 CEST 2008 Tue Apr 1 18:55:12 CEST 2008 Tue Apr 1 18:55:17 CEST 2008 Tue Apr 1 18:55:22 CEST 2008 Tue Apr 1 18:55:27 CEST 2008 Tue Apr 1 18:55:32 CEST 2008 Tue Apr 1 18:55:37 CEST 2008 xfssyncd(3426): WRITE block 682946487 on sda3 Tue Apr 1 18:55:42 CEST 2008 Tue Apr 1 18:55:47 CEST 2008 Tue Apr 1 18:55:52 CEST 2008 Tue Apr 1 18:55:57 CEST 2008 Tue Apr 1 18:56:02 CEST 2008 Tue Apr 1 18:56:07 CEST 2008 Tue Apr 1 18:56:12 CEST 2008 Tue Apr 1 18:56:17 CEST 2008 xfssyncd(3426): WRITE block 682946489 on sda3 Tue Apr 1 18:56:22 CEST 2008 Tue Apr 1 18:56:27 CEST 2008 Tue Apr 1 18:56:32 CEST 2008 Tue Apr 1 18:56:37 CEST 2008 Tue Apr 1 18:56:42 CEST 2008 Tue Apr 1 18:56:47 CEST 2008 Tue Apr 1 18:56:52 CEST 2008 xfssyncd(3426): WRITE block 682946491 on sda3 Tue Apr 1 18:56:57 CEST 2008 Tue Apr 1 18:57:02 CEST 2008 Tue Apr 1 18:57:07 CEST 2008 Tue Apr 1 18:57:12 CEST 2008 Tue Apr 1 18:57:17 CEST 2008 Tue Apr 1 18:57:22 CEST 2008 Tue Apr 1 18:57:27 CEST 2008 xfssyncd(3426): WRITE block 682946493 on sda3 Tue Apr 1 18:57:32 CEST 2008 Tue Apr 1 18:57:37 CEST 2008 Tue Apr 1 18:57:42 CEST 2008 Tue Apr 1 18:57:47 CEST 2008 Tue Apr 1 18:57:52 CEST 2008 Tue Apr 1 18:57:57 CEST 2008 Tue Apr 1 18:58:02 CEST 2008 xfssyncd(3426): WRITE block 682946495 on sda3 Tue Apr 1 18:58:07 CEST 2008 Tue Apr 1 18:58:12 CEST 2008 Tue Apr 1 18:58:17 CEST 2008 Tue Apr 1 18:58:22 CEST 2008 From owner-xfs@oss.sgi.com Sat Apr 5 11:05:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 05 Apr 2008 11:05:26 -0700 (PDT) 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.9 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 m35I5ECd032400 for ; Sat, 5 Apr 2008 11:05:18 -0700 X-ASG-Debug-ID: 1207418751-68c902d70000-ps1ADW X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ty.sabi.co.UK (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1A9B293CA26 for ; Sat, 5 Apr 2008 11:05:51 -0700 (PDT) Received: from ty.sabi.co.UK (82-69-39-138.dsl.in-addr.zen.co.uk [82.69.39.138]) by cuda.sgi.com with ESMTP id EWGuEURodumKHof6 for ; Sat, 05 Apr 2008 11:05:51 -0700 (PDT) Received: from from [127.0.0.1] (helo=tree.ty.sabi.co.uk) by ty.sabi.co.UK with esmtp(Exim 4.66 #1) id 1JiClN-0004zF-Fo for ; Sat, 05 Apr 2008 19:05:13 +0100 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <18423.48984.905157.301030@tree.ty.sabi.co.uk> Date: Sat, 5 Apr 2008 19:05:12 +0100 X-Face: SMJE]JPYVBO-9UR%/8d'mG.F!@.,l@c[f'[%S8'BZIcbQc3/">GrXDwb#;fTRGNmHr^JFb SAptvwWc,0+z+~p~"Gdr4H$(|N(yF(wwCM2bW0~U?HPEE^fkPGx^u[*[yV.gyB!hDOli}EF[\cW*S H&spRGFL}{`bj1TaD^l/"[ msn( /TH#THs{Hpj>)]f> X-ASG-Orig-Subj: Re: suggested tuning for XFS on RAID system Subject: Re: suggested tuning for XFS on RAID system In-Reply-To: <4f52331f0804041100g696ba02er47c3642c56a24cf7@mail.gmail.com> References: <4f52331f0804041100g696ba02er47c3642c56a24cf7@mail.gmail.com> X-Mailer: VM 7.17 under 21.5 (beta28) XEmacs Lucid From: pg_xfs2@xfs2.for.sabi.co.UK (Peter Grandi) X-Disclaimer: This message contains only personal opinions X-Barracuda-Connect: 82-69-39-138.dsl.in-addr.zen.co.uk[82.69.39.138] X-Barracuda-Start-Time: 1207418752 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.70 X-Barracuda-Spam-Status: No, SCORE=-1.70 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=FROM_HAS_ULINE_NUMS, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.46931 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.22 FROM_HAS_ULINE_NUMS From: contains an underline and numbers/letters 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15220 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: pg_xfs2@xfs2.for.sabi.co.UK Precedence: bulk X-list: xfs >>> On Fri, 4 Apr 2008 11:00:27 -0700, "Fong Vang" >>> said: sudoyang> Anyone has any suggestion on tuning XFS for more sudoyang> stability and reliability on a 1TB and 7TB XFS file sudoyang> system that holds potentially millions of small files? sudoyang> [ ... ] Use this tuning tool: mysqladmin create MEGA or this optimization script: perl -e 'use BerkeleyDB; my %db; tie %db,"BerkeleyDB::Hash", -Flags => DB_CREATE,-Filename => "MEGA"; untie %db;' BTW, similar discussions have happened in the past. It is a sign of respect for a mailing list to look into the archives before asking the same questions again and again and again and again. From owner-xfs@oss.sgi.com Sun Apr 6 09:09:23 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 06 Apr 2008 09:10:39 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_20,J_CHICKENPOX_45, MIME_8BIT_HEADER 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 m36G9Ku7007040 for ; Sun, 6 Apr 2008 09:09:23 -0700 X-ASG-Debug-ID: 1207498193-163501b10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from server.dwo.hu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D47CF944596; Sun, 6 Apr 2008 09:09:53 -0700 (PDT) Received: from server.dwo.hu (server.dwo.hu [87.229.110.63]) by cuda.sgi.com with ESMTP id zgF9rFQZeVDVMaL8; Sun, 06 Apr 2008 09:09:53 -0700 (PDT) Received: from [87.229.110.93] (helo=HvDCorps) by server.dwo.hu with esmtpa (Exim 4.50) id 1JiXcB-000ErB-5w; Sun, 06 Apr 2008 18:21:07 +0200 From: =?iso-8859-2?Q?Husz=E1r_Viktor_D=E9nes?= To: "'David Chinner'" Cc: "'Emmanuel Florac'" , X-ASG-Orig-Subj: RE: free space problem Subject: RE: free space problem Date: Sun, 6 Apr 2008 18:09:39 +0200 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-2" X-Mailer: Microsoft Office Outlook, Build 11.0.6353 In-Reply-To: <20080401003518.GK103491721@sgi.com> thread-index: AciTkfWY4zv9vyvkTdWR19YuMxZuWwEbWs0Q X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198 X-Barracuda-Connect: server.dwo.hu[87.229.110.63] X-Barracuda-Start-Time: 1207498196 Message-Id: <20080406160953.D47CF944596@cuda.sgi.com> 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: -0.22 X-Barracuda-Spam-Status: No, SCORE=-0.22 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M, MARKETING_SUBJECT, MSGID_FROM_MTA_ID X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47017 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.70 MSGID_FROM_MTA_ID Message-Id for external message added locally 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m36G9Nu7007071 X-archive-position: 15221 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hvd@dwo.hu Precedence: bulk X-list: xfs Hi guys, the earlier problem came out again: Here are the logs: [root]~# df -h Filesystem Size Used Avail Use% Mounted on /dev/md0 42G 15G 26G 37% / tmpfs 7.9G 0 7.9G 0% /lib/init/rw udev 10M 76K 10M 1% /dev tmpfs 7.9G 2.2M 7.9G 1% /dev/shm /dev/md1 420G 31G 389G 8% /var/www/users /dev/mapper/a-a 17T 17T 51G 100% /var/www/users/sms [root]~# df -ih Filesystem Inodes IUsed IFree IUse% Mounted on /dev/md0 5.3M 152K 5.1M 3% / tmpfs 2.0M 5 2.0M 1% /lib/init/rw udev 2.0M 487 2.0M 1% /dev tmpfs 2.0M 10 2.0M 1% /dev/shm /dev/md1 420M 398K 419M 1% /var/www/users /dev/mapper/a-a 203M 850K 202M 1% /var/www/users/sms [root]~# xfs_info /var/www/users/sms meta-data=/dev/a/a isize=256 agcount=32, agsize=137326144 blks = sectsz=512 attr=0 data = bsize=4096 blocks=4394436608, imaxpct=25 = sunit=0 swidth=0 blks, unwritten=1 naming =version 2 bsize=4096 log =internal bsize=4096 blocks=32768, version=1 = sectsz=512 sunit=0 blks realtime =none extsz=65536 blocks=0, rtextents=0 [root]~# xfs_logprint /dev/a/a xfs_logprint: xfs_logprint: /dev/a/a contains a mounted and writable filesystem data device: 0xfd00 log device: 0xfd00 daddr: 17577746464 length: 262144 Header 0x1 wanted 0xfeedbabe ********************************************************************** * ERROR: header cycle=1 block=176303 * ********************************************************************** Bad log record header [root]~# umount /var/www/users/sms [root]~# xfs_repair /dev/a/a 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 - agno = 2 - 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... - clear lost+found (if it exists) ... - clearing existing "lost+found" inode - deleting existing "lost+found" entry - check for inodes claiming duplicate blocks... - agno = 0 - agno = 1 - agno = 2 - 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 - ensuring existence of lost+found directory - traversing filesystem starting at / ... - traversal finished ... - traversing all unattached subtrees ... - traversals finished ... - moving disconnected inodes to lost+found ... Phase 7 - verify and correct link counts... done [root]~# mount /var/www/users/sms [root]~# touch /var/www/users/sms/1 touch: cannot touch `/var/www/users/sms/1': No space left on device [root]~# xfs_logprint /dev/a/a xfs_logprint: xfs_logprint: /dev/a/a contains a mounted and writable filesystem data device: 0xfd00 log device: 0xfd00 daddr: 17577746464 length: 262144 cycle: 1 version: 1 lsn: 1,0 tail_lsn: 1,0 length of Log Record: 20 prev offset: -1 num ops: 1 uuid: 68b5aa39-c15e-4170-a43f-9278e95911ea format: little endian linux h_size: 32768 ---------------------------------------------------------------------------- Oper (0): tid: b0c0d0d0 len: 8 clientid: LOG flags: UNMOUNT Unmount filesystem ============================================================================ xfs_logprint: skipped 512 cleared blocks in range: 2 - 513 xfs_logprint: skipped 261630 zeroed blocks in range: 514 - 262143 xfs_logprint: physical end of log ============================================================================ xfs_logprint: logical end of log ============================================================================ We have another server, which has exactly the same hardware architecture, exactly the same system, it's the same server we use dns load balancing between the two, and there we have no problem at all, but see the log: [root]~# df -h Filesystem Size Used Avail Use% Mounted on /dev/md0 42G 12G 30G 28% / tmpfs 7.9G 0 7.9G 0% /lib/init/rw udev 10M 72K 10M 1% /dev tmpfs 7.9G 0 7.9G 0% /dev/shm /dev/mapper/a-a 17T 17T 28G 100% /var/www/users/sms [root]~# df -ih Filesystem Inodes IUsed IFree IUse% Mounted on /dev/md0 5.3M 293K 5.0M 6% / tmpfs 2.0M 5 2.0M 1% /lib/init/rw udev 2.0M 469 2.0M 1% /dev tmpfs 2.0M 1 2.0M 1% /dev/shm /dev/mapper/a-a 309M 857K 309M 1% /var/www/users/sms [root]~# xfs_info /var/www/users/sms meta-data=/dev/a/a isize=256 agcount=32, agsize=137326144 blks = sectsz=512 attr=0 data = bsize=4096 blocks=4394436608, imaxpct=25 = sunit=0 swidth=0 blks, unwritten=1 naming =version 2 bsize=4096 log =internal bsize=4096 blocks=32768, version=1 = sectsz=512 sunit=0 blks realtime =none extsz=65536 blocks=0, rtextents=0 [root]~# xfs_logprint /dev/a/a xfs_logprint: xfs_logprint: /dev/a/a contains a mounted and writable filesystem data device: 0xfd00 log device: 0xfd00 daddr: 17577746464 length: 262144 Header 0x3 wanted 0xfeedbabe ********************************************************************** * ERROR: header cycle=3 block=55900 * ********************************************************************** Bad log record header So you tell me, it appeared again just suddenly. Thank you, Viktor -----Original Message----- From: David Chinner [mailto:dgc@sgi.com] Sent: Tuesday, April 01, 2008 2:35 AM To: Huszár Viktor Dénes Cc: 'Emmanuel Florac'; xfs@oss.sgi.com Subject: Re: free space problem On Mon, Mar 31, 2008 at 07:36:56PM +0200, Huszár Viktor Dénes wrote: > -----Original Message----- > From: Emmanuel Florac [mailto:eflorac@intellique.com] > Sent: Monday, March 31, 2008 9:40 AM > To: Huszár Viktor Dénes; xfs@oss.sgi.com > Subject: Re: free space problem > > Le Mon, 31 Mar 2008 02:31:16 +0200 vous écriviez: > > >Then maybe you simply ran out of inodes. It's common if you have lots > >of small files. There is a way to increase the number of inodes but I > >don't remember it right now. > -- > No, unfortunately not. There are not many small files and the inode usage is > 1%. See. Yes, but if you have fragemented free space then it is possible that there are not enough free extents large enough (or aligned correctly) to allocate more inodes. The number of "free inodes" reported doesn't take this into account; it only looks at the number of free blocks and converts that to a theoretical number of inodes that could be allocated in that space (i.e. it assumes perfect fit and no waste). In this "not quite full filesystem" situation, you can write data to the filesystem, but any attempt to create a new inode (new file, directory, etc) will fail with ENOSPC. This sounds like the symptoms you are reporting.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group __________ Information from ESET NOD32 Antivirus, version of virus signature database 2988 (20080331) __________ The message was checked by ESET NOD32 Antivirus. http://www.eset.com From owner-xfs@oss.sgi.com Sun Apr 6 09:26:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 06 Apr 2008 09:26:54 -0700 (PDT) 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,MIME_8BIT_HEADER 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 m36GQkj8010585 for ; Sun, 6 Apr 2008 09:26:48 -0700 X-ASG-Debug-ID: 1207499243-77af03810000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ninsei.hu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2D00F94473A for ; Sun, 6 Apr 2008 09:27:23 -0700 (PDT) Received: from ninsei.hu (ninsei.hu [212.92.23.158]) by cuda.sgi.com with ESMTP id rxBaihDeRvu2Dz76 for ; Sun, 06 Apr 2008 09:27:23 -0700 (PDT) Received: from luba (lns-bzn-35-82-250-205-20.adsl.proxad.net [82.250.205.20]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by chatsubo.ninsei.hu (Postfix) with ESMTP id AB3C97907; Sun, 6 Apr 2008 18:26:47 +0200 (CEST) Received: by luba (Postfix, from userid 32266) id 3595C10A9C9; Sun, 6 Apr 2008 18:26:45 +0200 (CEST) Date: Sun, 6 Apr 2008 18:26:46 +0200 From: KELEMEN Peter To: =?utf-8?B?SHVzesOhciBWaWt0b3IgRMOpbmVz?= Cc: "'David Chinner'" , "'Emmanuel Florac'" , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: free space problem Subject: Re: free space problem Message-ID: <20080406162645.GA10648@luba> Mail-Followup-To: =?utf-8?B?SHVzesOhciBWaWt0b3IgRMOpbmVz?= , 'David Chinner' , 'Emmanuel Florac' , xfs@oss.sgi.com References: <20080401003518.GK103491721@sgi.com> <20080406160953.D47CF944596@cuda.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20080406160953.D47CF944596@cuda.sgi.com> Organization: CERN European Laboratory for Particle Physics, Switzerland X-GPG-KeyID: 1024D/9FF0CABE 2004-04-03 X-GPG-Fingerprint: 6C9E 5917 3B06 E4EE 6356 7BF0 8F3E CAB6 9FF0 CABE X-Comment: Personal opinion. Paragraphs might have been reformatted. X-Copyright: Forwarding or publishing without permission is prohibited. X-Accept-Language: hu,en User-Agent: Mutt/1.5.17 (2007-11-01) X-Barracuda-Connect: ninsei.hu[212.92.23.158] X-Barracuda-Start-Time: 1207499244 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.1, rules version 3.1.47017 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15222 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: Peter.Kelemen@cern.ch Precedence: bulk X-list: xfs * Huszár Viktor Dénes (hvd@dwo.hu) [20080406 18:09]: > /dev/mapper/a-a 17T 17T 51G 100% /var/www/users/sms That's 0.292% of your filesystem free. Not much by any means. Peter -- .+'''+. .+'''+. .+'''+. .+'''+. .+'' Kelemen Péter / \ / \ Peter.Kelemen@cern.ch .+' `+...+' `+...+' `+...+' `+...+' From owner-xfs@oss.sgi.com Sun Apr 6 09:37:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 06 Apr 2008 09:37:50 -0700 (PDT) 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.2 required=5.0 tests=AWL,BAYES_50,MIME_8BIT_HEADER 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 m36Gbgtp012528 for ; Sun, 6 Apr 2008 09:37:43 -0700 X-ASG-Debug-ID: 1207499896-50fa001e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from server.dwo.hu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 06E10750B05; Sun, 6 Apr 2008 09:38:17 -0700 (PDT) Received: from server.dwo.hu (server.dwo.hu [87.229.110.63]) by cuda.sgi.com with ESMTP id wkrWWzbnkyEZ7cvw; Sun, 06 Apr 2008 09:38:17 -0700 (PDT) Received: from [87.229.110.93] (helo=HvDCorps) by server.dwo.hu with esmtpa (Exim 4.50) id 1JiY3l-000FYV-M6; Sun, 06 Apr 2008 18:49:38 +0200 From: =?iso-8859-2?Q?Husz=E1r_Viktor_D=E9nes?= To: "'KELEMEN Peter'" Cc: "'David Chinner'" , "'Emmanuel Florac'" , X-ASG-Orig-Subj: RE: free space problem Subject: RE: free space problem Date: Sun, 6 Apr 2008 18:38:06 +0200 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-2" X-Mailer: Microsoft Office Outlook, Build 11.0.6353 In-Reply-To: <20080406162645.GA10648@luba> Thread-Index: AciYBKqgCLZSP32nTfKvKX+3F8ENTQAAFDlQ X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198 X-Barracuda-Connect: server.dwo.hu[87.229.110.63] X-Barracuda-Start-Time: 1207499900 Message-Id: <20080406163817.06E10750B05@cuda.sgi.com> 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: -0.72 X-Barracuda-Spam-Status: No, SCORE=-0.72 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MARKETING_SUBJECT, MSGID_FROM_MTA_ID X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47018 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.70 MSGID_FROM_MTA_ID Message-Id for external message added locally X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m36Gbhtp012532 X-archive-position: 15223 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hvd@dwo.hu Precedence: bulk X-list: xfs Peter, are you Hungarian :) too? For us this 0.3 % is vital 50-100 GBytes. Do you think that if we would have a free space arund 400-500 Gb the problem would never appear? Thanks, Viktor -----Original Message----- From: KELEMEN Peter [mailto:Peter.Kelemen@cern.ch] Sent: Sunday, April 06, 2008 6:27 PM To: Huszár Viktor Dénes Cc: 'David Chinner'; 'Emmanuel Florac'; xfs@oss.sgi.com Subject: Re: free space problem * Huszár Viktor Dénes (hvd@dwo.hu) [20080406 18:09]: > /dev/mapper/a-a 17T 17T 51G 100% /var/www/users/sms That's 0.292% of your filesystem free. Not much by any means. Peter -- .+'''+. .+'''+. .+'''+. .+'''+. .+'' Kelemen Péter / \ / \ Peter.Kelemen@cern.ch .+' `+...+' `+...+' `+...+' `+...+' __________ Information from ESET NOD32 Antivirus, version of virus signature database 3005 (20080406) __________ The message was checked by ESET NOD32 Antivirus. http://www.eset.com __________ Information from ESET NOD32 Antivirus, version of virus signature database 3005 (20080406) __________ The message was checked by ESET NOD32 Antivirus. http://www.eset.com From owner-xfs@oss.sgi.com Sun Apr 6 18:05:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 06 Apr 2008 18:05:14 -0700 (PDT) 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.9 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 m371525p007196 for ; Sun, 6 Apr 2008 18:05:05 -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 LAA25396; Mon, 7 Apr 2008 11:05:34 +1000 Message-ID: <47F9735E.8020900@sgi.com> Date: Mon, 07 Apr 2008 11:05:34 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Thor Kristoffersen CC: xfs@oss.sgi.com Subject: Re: Does XFS prevent disk spindown? References: <20080401003005.GJ103491721@sgi.com> <47F1CF6D.2040103@sandeen.net> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15224 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Thor Kristoffersen wrote: > (It looks like my reply never made it to the list so I'm trying again.) > > Eric Sandeen writes: >> David Chinner wrote: >>> On Mon, Mar 31, 2008 at 08:26:00PM +0200, Thor Kristoffersen wrote: >>>> I've noticed that when I spin down XFS-mounted disks they spin up again >>>> shortly afterwards. I used iostat to monitor disk accesses to a mounted >>>> partition (with noatime) in single user mode. Apparently there is a write >>>> access to the partition approximately every 35 seconds, even if the >>>> partition is idle. As far as I can understand, since there is no data that >>>> needs to be flushed this must be done by an XFS daemon for some purpose. >> Use blktrace, or echo 1 > /proc/sys/vm/block_dump to see what block and >> who's writing it... it's probably the superblock? what kernel? > > This is kernel version 2.6.24. More specifically it's a Debian kernel from > package linux-image-2.6.24-1-686 (2.6.24-4). > > I put the system in runlevel 1 and executed the test as you suggested. On > /dev/sda3 I have mounted (with noatime) an XFS filesystem that contains > data that is not supposed to be accessed by any process. In the output > below I have filtered out all accesses to other partitions. (BTW, this is > not actually the disk that I wanted to spin down, but I think the log > proves my point.) > > I'm wondering if that is writing to the xfs ondisk log/journal in those cases. What does 'xfs_logprint -t' show in these "idle" states after these writes? --Tim > Thor > > ------------------------------------------------------ > > Tue Apr 1 18:51:27 CEST 2008 > xfssyncd(3426): WRITE block 682946473 on sda3 > Tue Apr 1 18:51:32 CEST 2008 > Tue Apr 1 18:51:37 CEST 2008 > Tue Apr 1 18:51:42 CEST 2008 > Tue Apr 1 18:51:47 CEST 2008 > Tue Apr 1 18:51:52 CEST 2008 > Tue Apr 1 18:51:57 CEST 2008 > Tue Apr 1 18:52:02 CEST 2008 > xfssyncd(3426): WRITE block 682946475 on sda3 > Tue Apr 1 18:52:07 CEST 2008 > Tue Apr 1 18:52:12 CEST 2008 > Tue Apr 1 18:52:17 CEST 2008 > Tue Apr 1 18:52:22 CEST 2008 > Tue Apr 1 18:52:27 CEST 2008 > Tue Apr 1 18:52:32 CEST 2008 > Tue Apr 1 18:52:37 CEST 2008 > Tue Apr 1 18:52:42 CEST 2008 > xfssyncd(3426): WRITE block 682946477 on sda3 > Tue Apr 1 18:52:47 CEST 2008 > Tue Apr 1 18:52:52 CEST 2008 > Tue Apr 1 18:52:57 CEST 2008 > Tue Apr 1 18:53:02 CEST 2008 > Tue Apr 1 18:53:07 CEST 2008 > Tue Apr 1 18:53:12 CEST 2008 > Tue Apr 1 18:53:17 CEST 2008 > xfssyncd(3426): WRITE block 682946479 on sda3 > Tue Apr 1 18:53:22 CEST 2008 > Tue Apr 1 18:53:27 CEST 2008 > Tue Apr 1 18:53:32 CEST 2008 > Tue Apr 1 18:53:37 CEST 2008 > Tue Apr 1 18:53:42 CEST 2008 > Tue Apr 1 18:53:47 CEST 2008 > Tue Apr 1 18:53:52 CEST 2008 > xfssyncd(3426): WRITE block 682946481 on sda3 > Tue Apr 1 18:53:57 CEST 2008 > Tue Apr 1 18:54:02 CEST 2008 > Tue Apr 1 18:54:07 CEST 2008 > Tue Apr 1 18:54:12 CEST 2008 > Tue Apr 1 18:54:17 CEST 2008 > Tue Apr 1 18:54:22 CEST 2008 > Tue Apr 1 18:54:27 CEST 2008 > xfssyncd(3426): WRITE block 682946483 on sda3 > Tue Apr 1 18:54:32 CEST 2008 > Tue Apr 1 18:54:37 CEST 2008 > Tue Apr 1 18:54:42 CEST 2008 > Tue Apr 1 18:54:47 CEST 2008 > Tue Apr 1 18:54:52 CEST 2008 > Tue Apr 1 18:54:57 CEST 2008 > Tue Apr 1 18:55:02 CEST 2008 > xfssyncd(3426): WRITE block 682946485 on sda3 > Tue Apr 1 18:55:07 CEST 2008 > Tue Apr 1 18:55:12 CEST 2008 > Tue Apr 1 18:55:17 CEST 2008 > Tue Apr 1 18:55:22 CEST 2008 > Tue Apr 1 18:55:27 CEST 2008 > Tue Apr 1 18:55:32 CEST 2008 > Tue Apr 1 18:55:37 CEST 2008 > xfssyncd(3426): WRITE block 682946487 on sda3 > Tue Apr 1 18:55:42 CEST 2008 > Tue Apr 1 18:55:47 CEST 2008 > Tue Apr 1 18:55:52 CEST 2008 > Tue Apr 1 18:55:57 CEST 2008 > Tue Apr 1 18:56:02 CEST 2008 > Tue Apr 1 18:56:07 CEST 2008 > Tue Apr 1 18:56:12 CEST 2008 > Tue Apr 1 18:56:17 CEST 2008 > xfssyncd(3426): WRITE block 682946489 on sda3 > Tue Apr 1 18:56:22 CEST 2008 > Tue Apr 1 18:56:27 CEST 2008 > Tue Apr 1 18:56:32 CEST 2008 > Tue Apr 1 18:56:37 CEST 2008 > Tue Apr 1 18:56:42 CEST 2008 > Tue Apr 1 18:56:47 CEST 2008 > Tue Apr 1 18:56:52 CEST 2008 > xfssyncd(3426): WRITE block 682946491 on sda3 > Tue Apr 1 18:56:57 CEST 2008 > Tue Apr 1 18:57:02 CEST 2008 > Tue Apr 1 18:57:07 CEST 2008 > Tue Apr 1 18:57:12 CEST 2008 > Tue Apr 1 18:57:17 CEST 2008 > Tue Apr 1 18:57:22 CEST 2008 > Tue Apr 1 18:57:27 CEST 2008 > xfssyncd(3426): WRITE block 682946493 on sda3 > Tue Apr 1 18:57:32 CEST 2008 > Tue Apr 1 18:57:37 CEST 2008 > Tue Apr 1 18:57:42 CEST 2008 > Tue Apr 1 18:57:47 CEST 2008 > Tue Apr 1 18:57:52 CEST 2008 > Tue Apr 1 18:57:57 CEST 2008 > Tue Apr 1 18:58:02 CEST 2008 > xfssyncd(3426): WRITE block 682946495 on sda3 > Tue Apr 1 18:58:07 CEST 2008 > Tue Apr 1 18:58:12 CEST 2008 > Tue Apr 1 18:58:17 CEST 2008 > Tue Apr 1 18:58:22 CEST 2008 > From owner-xfs@oss.sgi.com Sun Apr 6 19:18:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 06 Apr 2008 19:18:08 -0700 (PDT) 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.8 required=5.0 tests=AWL,BAYES_00,MIME_8BIT_HEADER 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 m372Hu2j018978 for ; Sun, 6 Apr 2008 19:17:59 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA26920; Mon, 7 Apr 2008 12:18:29 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m372IRsT124483513; Mon, 7 Apr 2008 12:18:28 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m372IM41123712155; Mon, 7 Apr 2008 12:18:22 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 7 Apr 2008 12:18:22 +1000 From: David Chinner To: =?iso-8859-1?Q?Husz=E1r_Viktor_D=E9nes?= Cc: "'David Chinner'" , "'Emmanuel Florac'" , xfs@oss.sgi.com Subject: Re: free space problem Message-ID: <20080407021822.GZ108924158@sgi.com> References: <20080401003518.GK103491721@sgi.com> <20080406160953.D47CF944596@cuda.sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20080406160953.D47CF944596@cuda.sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15225 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Sun, Apr 06, 2008 at 06:09:39PM +0200, Huszár Viktor Dénes wrote: > Hi guys, the earlier problem came out again: > > Here are the logs: > > [root]~# df -h > Filesystem Size Used Avail Use% Mounted on > /dev/md0 42G 15G 26G 37% / > tmpfs 7.9G 0 7.9G 0% /lib/init/rw > udev 10M 76K 10M 1% /dev > tmpfs 7.9G 2.2M 7.9G 1% /dev/shm > /dev/md1 420G 31G 389G 8% /var/www/users > /dev/mapper/a-a 17T 17T 51G 100% /var/www/users/sms So you effectively have a full filesystem. Inode allocation may be impossible as the filesystem approaches full as there is not enough contiguous free space to allocate them in. Also, you are probably using the inode32 allocator (i.e. no inode64 mount option), which means inodes can only be placed in the first 1TB of the filesystem, and that means those AGs are probably out of space. Given that you have 523GB AGs, that means inode will probably only be put in AG 0, ad that's probably out of space. What does: # xfs_db -r -c 'freesp -s -a 0' /dev/mapper/a-a give you? FWIW, This problem will come and go as you unlink files and change the pattern of freespace... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Sun Apr 6 19:23:31 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 06 Apr 2008 19:23:39 -0700 (PDT) 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.9 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 m372NQ7O019989 for ; Sun, 6 Apr 2008 19:23:29 -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 MAA26979; Mon, 7 Apr 2008 12:23:54 +1000 Message-ID: <47F985BA.7060100@sgi.com> Date: Mon, 07 Apr 2008 12:23:54 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss Subject: Re: [PATCH] remove CONFIG_XFS_SECURITY References: <47819E47.4030906@sandeen.net> <47BB7774.5080401@sandeen.net> In-Reply-To: <47BB7774.5080401@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15226 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Eric Sandeen wrote: > Eric Sandeen wrote: >> Is there any point to this option? Sure, it disables the ability >> to set security attributes at runtime, but it doesn't slim down >> any code. >> >> Any reason to not remove it, and always allow security attributes >> to be set? > > Ack? Nak? Comments? > Fine by me. I'm not sure of the point either. However, don't need to modify the attr_secure_capable function, might as well delete it and just use fs_noerr for the capable hook field. --Tim (BTW, will check in attr2 fixes soon - need to write a qa test ;-) > -Eric > >> Signed-off-by: Eric Sandeen >> >> --- >> >> Index: linux-2.6.24-rc3/fs/xfs/Kconfig >> =================================================================== >> --- linux-2.6.24-rc3.orig/fs/xfs/Kconfig >> +++ linux-2.6.24-rc3/fs/xfs/Kconfig >> @@ -35,18 +35,6 @@ config XFS_QUOTA >> with or without the generic quota support enabled (CONFIG_QUOTA) - >> they are completely independent subsystems. >> >> -config XFS_SECURITY >> - bool "XFS Security Label support" >> - depends on XFS_FS >> - help >> - Security labels support alternative access control models >> - implemented by security modules like SELinux. This option >> - enables an extended attribute namespace for inode security >> - labels in the XFS filesystem. >> - >> - If you are not using a security module that requires using >> - extended attributes for inode security labels, say N. >> - >> config XFS_POSIX_ACL >> bool "XFS POSIX ACL support" >> depends on XFS_FS >> Index: linux-2.6.24-rc3/fs/xfs/linux-2.6/xfs_super.h >> =================================================================== >> --- linux-2.6.24-rc3.orig/fs/xfs/linux-2.6/xfs_super.h >> +++ linux-2.6.24-rc3/fs/xfs/linux-2.6/xfs_super.h >> @@ -50,13 +50,8 @@ extern void xfs_qm_exit(void); >> # define set_posix_acl_flag(sb) do { } while (0) >> #endif >> >> -#ifdef CONFIG_XFS_SECURITY >> -# define XFS_SECURITY_STRING "security attributes, " >> -# define ENOSECURITY 0 >> -#else >> -# define XFS_SECURITY_STRING >> -# define ENOSECURITY EOPNOTSUPP >> -#endif >> +/* Used to be "configurable" so keep it around. */ >> +#define XFS_SECURITY_STRING "security attributes, " >> >> #ifdef CONFIG_XFS_RT >> # define XFS_REALTIME_STRING "realtime, " >> Index: linux-2.6.24-rc3/fs/xfs/xfs_attr.c >> =================================================================== >> --- linux-2.6.24-rc3.orig/fs/xfs/xfs_attr.c >> +++ linux-2.6.24-rc3/fs/xfs/xfs_attr.c >> @@ -2651,7 +2651,7 @@ attr_secure_capable( >> bhv_vnode_t *vp, >> cred_t *cred) >> { >> - return -ENOSECURITY; >> + return 0; >> } >> >> STATIC int >> >> > From owner-xfs@oss.sgi.com Sun Apr 6 20:52:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 06 Apr 2008 20:52:18 -0700 (PDT) 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.0 required=5.0 tests=BAYES_50,PLING_QUERY 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 m373q6h9006890 for ; Sun, 6 Apr 2008 20:52:08 -0700 X-ASG-Debug-ID: 1207540361-4b3303700000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from msa101lp.auone-net.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0A324753A5D for ; Sun, 6 Apr 2008 20:52:41 -0700 (PDT) Received: from msa101lp.auone-net.jp (msa101lp.auone-net.jp [222.3.140.164]) by cuda.sgi.com with ESMTP id xGg4Oa6ja58HsFcE for ; Sun, 06 Apr 2008 20:52:41 -0700 (PDT) Received: by msa101lp.auone-net.jp (au one net msa) id 4E36D6C0037; Mon, 7 Apr 2008 12:52:09 +0900 (JST) Date: Mon, 7 Apr 2008 12:52:09 +0900 (JST) From: au one net X-ASG-Orig-Subj: =?ISO-2022-JP?B?GyRCJWEhPCVrQXc/LiUoJWkhPERMQ04bKEI=?= Subject: =?ISO-2022-JP?B?GyRCJWEhPCVrQXc/LiUoJWkhPERMQ04bKEI=?= To: xfs@oss.sgi.com Auto-Submitted: auto-replied MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary="9440A6C0031.1207540329/msa101lp.auone-net.jp" Message-Id: <20080407035209.4E36D6C0037@msa101lp.auone-net.jp> X-Barracuda-Connect: msa101lp.auone-net.jp[222.3.140.164] X-Barracuda-Start-Time: 1207540364 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5023 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= X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47064 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15227 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: no-reply@app.auone-net.jp Precedence: bulk X-list: xfs This is a MIME-encapsulated message. --9440A6C0031.1207540329/msa101lp.auone-net.jp Content-Description: Notification Content-Type: text/plain; charset=ISO-2022-JP $BAw?.@h$N%a!<%k%"%I%l%9$,!"8=:_MxMQ$G$-$J$$>uBV$K$J$C$F$$$^$9!#(B $B"(K\%a!<%k$O(Bau one net$B$N%a!<%k%7%9%F%`$h$jG[?.$7$F$*$j$^$9!#(B $B$3$N%a!<%k$K$OD>@\JV?.$$$?$@$1$^$;$s!#(B $B!J!!0J2: host mail.yousworld.com[124.241.194.104] said: 550 : Recipient address rejected: UserUnknown (in reply to RCPT TO command) --9440A6C0031.1207540329/msa101lp.auone-net.jp Content-Description: Delivery report Content-Type: message/delivery-status Reporting-MTA: dns; msa101lp.auone-net.jp X-au-one-net-msa-Queue-ID: 9440A6C0031 X-au-one-net-msa-Sender: rfc822; xfs@oss.sgi.com Arrival-Date: Mon, 7 Apr 2008 12:51:57 +0900 (JST) Final-Recipient: rfc822; nihao@yousworld.com Original-Recipient: rfc822;nihao@yousworld.com Action: failed Status: 5.0.0 Remote-MTA: dns; mail.yousworld.com Diagnostic-Code: smtp; 550 : Recipient address rejected: UserUnknown --9440A6C0031.1207540329/msa101lp.auone-net.jp Content-Description: Undelivered Message Headers Content-Type: text/rfc822-headers Received: from oss.sgi.com (K074153.ppp.dion.ne.jp [211.18.74.153]) by msa101lp.auone-net.jp (au one net msa) with ESMTP id 9440A6C0031 for ; Mon, 7 Apr 2008 12:51:57 +0900 (JST) From: xfs@oss.sgi.com To: nihao@yousworld.com Subject: Report Date: Mon, 7 Apr 2008 12:51:23 +0900 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0004_566308BB.2BFD784F" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2600.0000 X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 Message-Id: <20080407035158.9440A6C0031@msa101lp.auone-net.jp> --9440A6C0031.1207540329/msa101lp.auone-net.jp-- From owner-xfs@oss.sgi.com Mon Apr 7 01:23:15 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 01:24:32 -0700 (PDT) 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 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 m378NEwp021312 for ; Mon, 7 Apr 2008 01:23:15 -0700 X-ASG-Debug-ID: 1207556627-218b030c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6721A94CEA9 for ; Mon, 7 Apr 2008 01:23:47 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id PkKytF5rSRz8ZDVb for ; Mon, 07 Apr 2008 01:23:47 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m377u6F3002559 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Mon, 7 Apr 2008 09:56:06 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m377u6pI002557 for xfs@oss.sgi.com; Mon, 7 Apr 2008 09:56:06 +0200 Date: Mon, 7 Apr 2008 09:56:06 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 1/3] split xfs_icsb_sync_counters_flags Subject: Re: [PATCH 1/3] split xfs_icsb_sync_counters_flags Message-ID: <20080407075606.GA2317@lst.de> References: <20080319204501.GB23644@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080319204501.GB23644@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1207556632 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.1, rules version 3.1.47081 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15228 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs ping? (for the whole patch series) On Wed, Mar 19, 2008 at 09:45:01PM +0100, Christoph Hellwig wrote: > Add a new xfs_icsb_sync_counters_locked for the case where m_sb_lock > is already taken and add a flags argument to xfs_icsb_sync_counters so > that xfs_icsb_sync_counters_flags is not needed. > > > Signed-off-by: Christoph Hellwig > > Index: linux-2.6-xfs/fs/xfs/xfs_fsops.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_fsops.c 2008-02-22 04:44:13.000000000 +0100 > +++ linux-2.6-xfs/fs/xfs/xfs_fsops.c 2008-03-04 18:26:19.000000000 +0100 > @@ -462,7 +462,7 @@ xfs_fs_counts( > xfs_mount_t *mp, > xfs_fsop_counts_t *cnt) > { > - xfs_icsb_sync_counters_flags(mp, XFS_ICSB_LAZY_COUNT); > + xfs_icsb_sync_counters(mp, XFS_ICSB_LAZY_COUNT); > spin_lock(&mp->m_sb_lock); > cnt->freedata = mp->m_sb.sb_fdblocks - XFS_ALLOC_SET_ASIDE(mp); > cnt->freertx = mp->m_sb.sb_frextents; > @@ -524,7 +524,7 @@ xfs_reserve_blocks( > */ > retry: > spin_lock(&mp->m_sb_lock); > - xfs_icsb_sync_counters_flags(mp, XFS_ICSB_SB_LOCKED); > + xfs_icsb_sync_counters_locked(mp, 0); > > /* > * If our previous reservation was larger than the current value, > Index: linux-2.6-xfs/fs/xfs/xfs_mount.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.c 2008-03-03 16:12:34.000000000 +0100 > +++ linux-2.6-xfs/fs/xfs/xfs_mount.c 2008-03-04 18:26:19.000000000 +0100 > @@ -54,7 +54,6 @@ STATIC void xfs_unmountfs_wait(xfs_mount > STATIC void xfs_icsb_destroy_counters(xfs_mount_t *); > STATIC void xfs_icsb_balance_counter(xfs_mount_t *, xfs_sb_field_t, > int, int); > -STATIC void xfs_icsb_sync_counters(xfs_mount_t *); > STATIC int xfs_icsb_modify_counters(xfs_mount_t *, xfs_sb_field_t, > int64_t, int); > STATIC int xfs_icsb_disable_counter(xfs_mount_t *, xfs_sb_field_t); > @@ -63,7 +62,6 @@ STATIC int xfs_icsb_disable_counter(xfs_ > > #define xfs_icsb_destroy_counters(mp) do { } while (0) > #define xfs_icsb_balance_counter(mp, a, b, c) do { } while (0) > -#define xfs_icsb_sync_counters(mp) do { } while (0) > #define xfs_icsb_modify_counters(mp, a, b, c) do { } while (0) > > #endif > @@ -1374,7 +1372,7 @@ xfs_log_sbcount( > if (!xfs_fs_writable(mp)) > return 0; > > - xfs_icsb_sync_counters(mp); > + xfs_icsb_sync_counters(mp, 0); > > /* > * we don't need to do this if we are updating the superblock > @@ -2252,38 +2250,33 @@ xfs_icsb_enable_counter( > } > > void > -xfs_icsb_sync_counters_flags( > +xfs_icsb_sync_counters_locked( > xfs_mount_t *mp, > int flags) > { > xfs_icsb_cnts_t cnt; > > - /* Pass 1: lock all counters */ > - if ((flags & XFS_ICSB_SB_LOCKED) == 0) > - spin_lock(&mp->m_sb_lock); > - > xfs_icsb_count(mp, &cnt, flags); > > - /* Step 3: update mp->m_sb fields */ > if (!xfs_icsb_counter_disabled(mp, XFS_SBS_ICOUNT)) > mp->m_sb.sb_icount = cnt.icsb_icount; > if (!xfs_icsb_counter_disabled(mp, XFS_SBS_IFREE)) > mp->m_sb.sb_ifree = cnt.icsb_ifree; > if (!xfs_icsb_counter_disabled(mp, XFS_SBS_FDBLOCKS)) > mp->m_sb.sb_fdblocks = cnt.icsb_fdblocks; > - > - if ((flags & XFS_ICSB_SB_LOCKED) == 0) > - spin_unlock(&mp->m_sb_lock); > } > > /* > * Accurate update of per-cpu counters to incore superblock > */ > -STATIC void > +void > xfs_icsb_sync_counters( > - xfs_mount_t *mp) > + xfs_mount_t *mp, > + int flags) > { > - xfs_icsb_sync_counters_flags(mp, 0); > + spin_lock(&mp->m_sb_lock); > + xfs_icsb_sync_counters_locked(mp, flags); > + spin_unlock(&mp->m_sb_lock); > } > > /* > Index: linux-2.6-xfs/fs/xfs/xfs_mount.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.h 2008-03-03 16:12:34.000000000 +0100 > +++ linux-2.6-xfs/fs/xfs/xfs_mount.h 2008-03-04 18:26:19.000000000 +0100 > @@ -211,12 +211,13 @@ typedef struct xfs_icsb_cnts { > > extern int xfs_icsb_init_counters(struct xfs_mount *); > extern void xfs_icsb_reinit_counters(struct xfs_mount *); > -extern void xfs_icsb_sync_counters_flags(struct xfs_mount *, int); > +extern void xfs_icsb_sync_counters(struct xfs_mount *, int); > +extern void xfs_icsb_sync_counters_locked(struct xfs_mount *, int); > > #else > #define xfs_icsb_init_counters(mp) (0) > #define xfs_icsb_reinit_counters(mp) do { } while (0) > -#define xfs_icsb_sync_counters_flags(mp, flags) do { } while (0) > +#define xfs_icsb_sync_counters(mp, flags) do { } while (0) > #endif > > typedef struct xfs_ail { > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-03-03 04:57:21.000000000 +0100 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-03-04 18:26:19.000000000 +0100 > @@ -1182,7 +1182,7 @@ xfs_fs_statfs( > statp->f_fsid.val[0] = (u32)id; > statp->f_fsid.val[1] = (u32)(id >> 32); > > - xfs_icsb_sync_counters_flags(mp, XFS_ICSB_LAZY_COUNT); > + xfs_icsb_sync_counters(mp, XFS_ICSB_LAZY_COUNT); > > spin_lock(&mp->m_sb_lock); > statp->f_bsize = sbp->sb_blocksize; ---end quoted text--- From owner-xfs@oss.sgi.com Mon Apr 7 03:01:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 03:01:19 -0700 (PDT) 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 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 m37A1A55003485 for ; Mon, 7 Apr 2008 03:01:11 -0700 X-ASG-Debug-ID: 1207562506-3760038c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6B173755B08 for ; Mon, 7 Apr 2008 03:01:47 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id cyr5keZKHrDf4Q0q for ; Mon, 07 Apr 2008 03:01:47 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m37A1eF3012041 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Mon, 7 Apr 2008 12:01:41 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m37A1ehq012039 for xfs@oss.sgi.com; Mon, 7 Apr 2008 12:01:40 +0200 Date: Mon, 7 Apr 2008 12:01:40 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: new xfsqa mismatches Subject: new xfsqa mismatches Message-ID: <20080407100140.GA11891@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1207562508 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.1, rules version 3.1.47088 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15229 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs 103: - output mismatch (see 103.out.bad) 7c7 < ln: creating symbolic link `SCRATCH_MNT/nosymlink/target' to `SCRATCH_MNT/nosymlink/source': Operation not permitted --- > ln: creating symbolic link `SCRATCH_MNT/nosymlink/target' to `SCRATCH_MNT/nosymlink/source' to `SCRATCH_MNT/nosymlink/source': Operation not permitted not sure where the double to comes from but we should catch it 130 and 132 expetect Bytes in various places but get bytes from xfs_io from CVS From owner-xfs@oss.sgi.com Mon Apr 7 04:10:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 04:10:46 -0700 (PDT) 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_33 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 m37BAbrL014563 for ; Mon, 7 Apr 2008 04:10:39 -0700 X-ASG-Debug-ID: 1207566674-0fb400590000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7EA9094E5B1 for ; Mon, 7 Apr 2008 04:11:14 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id 5jfVdlAWyows7W0s for ; Mon, 07 Apr 2008 04:11:14 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m379vjF3011838 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Mon, 7 Apr 2008 11:57:45 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m379vjjh011836 for xfs@oss.sgi.com; Mon, 7 Apr 2008 11:57:45 +0200 Date: Mon, 7 Apr 2008 11:57:45 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] don't validate symlink target component length Subject: [PATCH] don't validate symlink target component length Message-ID: <20080407095745.GA11772@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1207566675 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.82 X-Barracuda-Spam-Status: No, SCORE=-1.82 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_MJ615 X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47093 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 BSF_SC0_MJ615 Custom Rule MJ615 X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15230 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs This validtion is not posix conform and no other Linux filesystem does it. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.c 2008-04-07 09:33:21.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.c 2008-04-07 09:34:25.000000000 +0200 @@ -3105,31 +3105,6 @@ xfs_symlink( pathlen = strlen(target_path); if (pathlen >= MAXPATHLEN) /* total string too long */ return XFS_ERROR(ENAMETOOLONG); - if (pathlen >= MAXNAMELEN) { /* is any component too long? */ - int len, total; - char *path; - - for (total = 0, path = target_path; total < pathlen;) { - /* - * Skip any slashes. - */ - while(*path == '/') { - total++; - path++; - } - - /* - * Count up to the next slash or end of path. - * Error out if the component is bigger than MAXNAMELEN. - */ - for(len = 0; *path != '/' && total < pathlen;total++, path++) { - if (++len >= MAXNAMELEN) { - error = ENAMETOOLONG; - return error; - } - } - } - } if (DM_EVENT_ENABLED(dp, DM_EVENT_SYMLINK)) { error = XFS_SEND_NAMESP(mp, DM_EVENT_SYMLINK, dp, From owner-xfs@oss.sgi.com Mon Apr 7 05:45:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 05:45:46 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,SUBJ_TICKET 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 m37CjcMH001711 for ; Mon, 7 Apr 2008 05:45:39 -0700 X-ASG-Debug-ID: 1207572373-3e8e00310000-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 04622756C91; Mon, 7 Apr 2008 05:46:13 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id Eg4oZba1RYmktq8b; Mon, 07 Apr 2008 05:46:13 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jiqjl-0007nE-C4; Mon, 07 Apr 2008 12:46:13 +0000 Date: Mon, 7 Apr 2008 08:46:13 -0400 From: Christoph Hellwig To: David Chinner Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [Patch] Remove xlog_ticket allocator Subject: Re: [Patch] Remove xlog_ticket allocator Message-ID: <20080407124613.GA27350@infradead.org> References: <20080401231439.GU103491721@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080401231439.GU103491721@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207572376 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.1, rules version 3.1.47098 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15231 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Wed, Apr 02, 2008 at 09:14:39AM +1000, David Chinner wrote: > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_vfsops.c 2008-03-13 13:58:08.866070224 +1100 > +++ 2.6.x-xfs-new/fs/xfs/xfs_vfsops.c 2008-03-13 13:59:59.208010688 +1100 > @@ -68,15 +68,17 @@ xfs_init(void) > /* > * Initialize all of the zone allocators we use. > */ > + xfs_log_ticket_zone = kmem_zone_init(sizeof(xlog_ticket_t), > + "xfs_log_ticket"); > xfs_bmap_free_item_zone = kmem_zone_init(sizeof(xfs_bmap_free_item_t), > - "xfs_bmap_free_item"); > + "xfs_bmap_free_item"); > xfs_btree_cur_zone = kmem_zone_init(sizeof(xfs_btree_cur_t), > - "xfs_btree_cur"); > - xfs_trans_zone = kmem_zone_init(sizeof(xfs_trans_t), "xfs_trans"); > - xfs_da_state_zone = > - kmem_zone_init(sizeof(xfs_da_state_t), "xfs_da_state"); > + "xfs_btree_cur"); > + xfs_da_state_zone = kmem_zone_init(sizeof(xfs_da_state_t), > + "xfs_da_state"); > xfs_dabuf_zone = kmem_zone_init(sizeof(xfs_dabuf_t), "xfs_dabuf"); > xfs_ifork_zone = kmem_zone_init(sizeof(xfs_ifork_t), "xfs_ifork"); > + xfs_trans_zone = kmem_zone_init(sizeof(xfs_trans_t), "xfs_trans"); kmem_zone_init can fail so both for the new and old calls we need some error handling here. Could probably be a separate patch. Otherwise this looks fine. From owner-xfs@oss.sgi.com Mon Apr 7 05:50:35 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 05:50:42 -0700 (PDT) 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 m37CoYiW002862 for ; Mon, 7 Apr 2008 05:50:35 -0700 X-ASG-Debug-ID: 1207572671-442e02610000-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 78CC194EC32; Mon, 7 Apr 2008 05:51:11 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id YwiAzSHuGKAbMOHt; Mon, 07 Apr 2008 05:51:11 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JiqoZ-0004Lr-Lf; Mon, 07 Apr 2008 12:51:11 +0000 Date: Mon, 7 Apr 2008 08:51:11 -0400 From: Christoph Hellwig To: David Chinner Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [Patch] Per iclog callback chain lock Subject: Re: [Patch] Per iclog callback chain lock Message-ID: <20080407125111.GB27350@infradead.org> References: <20080401231348.GT103491721@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080401231348.GT103491721@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207572672 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.1, rules version 3.1.47099 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15232 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs Looks good. You might want to kill ic_callback_tail while you're at it as it's a write-only struct member. From owner-xfs@oss.sgi.com Mon Apr 7 05:52:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 05:52:07 -0700 (PDT) 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 m37Cpx5L003294 for ; Mon, 7 Apr 2008 05:52:00 -0700 X-ASG-Debug-ID: 1207572757-4db302150000-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 72D2194EE29 for ; Mon, 7 Apr 2008 05:52:37 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id mnxEFHs8ZaqoXsUU for ; Mon, 07 Apr 2008 05:52:37 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JiqpS-0007hg-08; Mon, 07 Apr 2008 12:52:06 +0000 Date: Mon, 7 Apr 2008 08:52:05 -0400 From: Christoph Hellwig To: David Chinner Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [Patch] fix lock inversion in forced unmount Subject: Re: [Patch] fix lock inversion in forced unmount Message-ID: <20080407125205.GC27350@infradead.org> References: <20080402001758.GY103491721@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080402001758.GY103491721@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207572757 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.1, rules version 3.1.47099 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15233 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs Obviously correct. From owner-xfs@oss.sgi.com Mon Apr 7 05:57:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 05:57:10 -0700 (PDT) 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 m37Cv1En004477 for ; Mon, 7 Apr 2008 05:57:02 -0700 X-ASG-Debug-ID: 1207573058-4f7700520000-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 2DFE2756366; Mon, 7 Apr 2008 05:57:38 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id kFX62r6X6bXKrzA3; Mon, 07 Apr 2008 05:57:38 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jiquo-0004gJ-Iy; Mon, 07 Apr 2008 12:57:38 +0000 Date: Mon, 7 Apr 2008 08:57:38 -0400 From: Christoph Hellwig To: David Chinner Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [Patch] unique per-AG inode generation number initialisation Subject: Re: [Patch] unique per-AG inode generation number initialisation Message-ID: <20080407125738.GD27350@infradead.org> References: <20080401231815.GW103491721@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080401231815.GW103491721@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207573059 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.1, rules version 3.1.47100 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15234 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs I don't really like this. The chance to hit a previously used generation seems to high. What about making the first few bits of each generation number a per-ag counter that's incremented anytime we deallocate an inode cluster? From owner-xfs@oss.sgi.com Mon Apr 7 14:24:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 14:25:20 -0700 (PDT) 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.1 required=5.0 tests=BAYES_00,MSGID_MULTIPLE_AT 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 m37LO5JZ028236 for ; Mon, 7 Apr 2008 14:24:09 -0700 X-ASG-Debug-ID: 1207603482-5baa02c20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fed1rmmtao107.cox.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9E2EE95F98C for ; Mon, 7 Apr 2008 14:24:42 -0700 (PDT) Received: from fed1rmmtao107.cox.net (fed1rmmtao107.cox.net [68.230.241.39]) by cuda.sgi.com with ESMTP id 4l7ZGHRa2NNfKFsQ for ; Mon, 07 Apr 2008 14:24:42 -0700 (PDT) Received: from fed1rmimpo02.cox.net ([70.169.32.72]) by fed1rmmtao107.cox.net (InterMail vM.7.08.02.01 201-2186-121-102-20070209) with ESMTP id <20080407212443.LMSL6668.fed1rmmtao107.cox.net@fed1rmimpo02.cox.net> for ; Mon, 7 Apr 2008 17:24:43 -0400 Received: from meru.bbky.org ([72.199.86.230]) by fed1rmimpo02.cox.net with bizsmtp id AlQi1Z0074yAxSY04lQi62; Mon, 07 Apr 2008 17:24:42 -0400 Received: from shin (unknown [192.168.0.199]) by meru.bbky.org (Postfix) with ESMTP id 2AEC61C025C80 for ; Mon, 7 Apr 2008 14:24:42 -0700 (PDT) From: "Bond Masuda" To: X-ASG-Orig-Subj: performance problems with XFS and Linux kernel 2.6.24.4 Subject: performance problems with XFS and Linux kernel 2.6.24.4 Date: Mon, 7 Apr 2008 14:24:41 -0700 Organization: JL Bond Consulting Message-ID: <007001c898f5$cae2f4a0$60a8dde0$@masuda@jlbond.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Office Outlook 12.0 Thread-Index: AciY9crE3isP5DM2QeeSspEAp9S0hQ== Content-Language: en-us X-Barracuda-Connect: fed1rmmtao107.cox.net[68.230.241.39] X-Barracuda-Start-Time: 1207603483 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: -0.65 X-Barracuda-Spam-Status: No, SCORE=-0.65 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MSGID_MULTIPLE_AT X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47132 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.38 MSGID_MULTIPLE_AT Message-ID contains multiple '@' characters X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15235 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bond.masuda@jlbond.com Precedence: bulk X-list: xfs Hi, I am aware of the change regarding barrier/nobarrier in 2.6.17 and above. However, the performance hit I'm seeing is very severe and much worse than what I was seeing in 2.6.17 (bundled with latest updates in Fedora Core 4). I'm currently running Fedora 8 with 2.6.24.4-64.fc8. If I remove nobarrier mount option, it takes seconds just to write few megabytes and the system becomes very very sluggish. On 2.6.17 (Fedora 4) without the nobarrier option it was still usable. The XFS file system is about 900GB, if that matters. Is this a known problem? How can I gather more information to figure out exactly what is going on? Thanks, -Bond From owner-xfs@oss.sgi.com Mon Apr 7 14:33:58 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 14:34:06 -0700 (PDT) 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=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 m37LXv2l029990 for ; Mon, 7 Apr 2008 14:33:58 -0700 X-ASG-Debug-ID: 1207604074-5bf9015e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp.getmail.no (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 158C275B34A for ; Mon, 7 Apr 2008 14:34:34 -0700 (PDT) Received: from smtp.getmail.no (smtp.getmail.no [84.208.20.33]) by cuda.sgi.com with ESMTP id ZQ36SgdNjHZnd1eq for ; Mon, 07 Apr 2008 14:34:34 -0700 (PDT) Received: from pmxchannel-daemon.no-osl-m323-srv-009-z2.isp.get.no by no-osl-m323-srv-009-z2.isp.get.no (Sun Java System Messaging Server 6.2-7.05 (built Sep 5 2006)) id <0JYZ0010V2GPOX00@no-osl-m323-srv-009-z2.isp.get.no> for xfs@oss.sgi.com; Mon, 07 Apr 2008 22:34:01 +0200 (CEST) Received: from smtp.getmail.no ([10.5.16.1]) by no-osl-m323-srv-009-z2.isp.get.no (Sun Java System Messaging Server 6.2-7.05 (built Sep 5 2006)) with ESMTP id <0JYZ007U92FJRSD0@no-osl-m323-srv-009-z2.isp.get.no> for xfs@oss.sgi.com; Mon, 07 Apr 2008 22:33:19 +0200 (CEST) Received: from localhost ([84.215.109.218]) by no-osl-m323-srv-009-z1.isp.get.no (Sun Java System Messaging Server 6.2-7.05 (built Sep 5 2006)) with ESMTP id <0JYZ00GXM2FJP6A0@no-osl-m323-srv-009-z1.isp.get.no> for xfs@oss.sgi.com; Mon, 07 Apr 2008 22:33:19 +0200 (CEST) Received: from thor by localhost with local (Exim 4.69 #1 (Debian)) id 1Jiy1n-0007JF-A4; Mon, 07 Apr 2008 22:33:19 +0200 Date: Mon, 07 Apr 2008 22:33:19 +0200 From: Thor Kristoffersen X-ASG-Orig-Subj: Re: Does XFS prevent disk spindown? Subject: Re: Does XFS prevent disk spindown? In-reply-to: <47F9735E.8020900@sgi.com> To: Timothy Shimmin Cc: xfs@oss.sgi.com Message-id: MIME-version: 1.0 Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7BIT References: <20080401003005.GJ103491721@sgi.com> <47F1CF6D.2040103@sandeen.net> <47F9735E.8020900@sgi.com> User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.1 (gnu/linux) X-Barracuda-Connect: smtp.getmail.no[84.208.20.33] X-Barracuda-Start-Time: 1207604075 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=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47133 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15236 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: thorkr@gmail.com Precedence: bulk X-list: xfs Timothy Shimmin writes: > Thor Kristoffersen wrote: >>> Use blktrace, or echo 1 > /proc/sys/vm/block_dump to see what block and >>> who's writing it... it's probably the superblock? what kernel? >> >> This is kernel version 2.6.24. More specifically it's a Debian kernel from >> package linux-image-2.6.24-1-686 (2.6.24-4). >> >> I put the system in runlevel 1 and executed the test as you suggested. On >> /dev/sda3 I have mounted (with noatime) an XFS filesystem that contains >> data that is not supposed to be accessed by any process. In the output >> below I have filtered out all accesses to other partitions. (BTW, this is >> not actually the disk that I wanted to spin down, but I think the log >> proves my point.) >> >> > I'm wondering if that is writing to the xfs ondisk log/journal in those cases. > What does 'xfs_logprint -t' show in these "idle" states > after these writes? xfs_logprint produces output like the one shown below, so it does indeed look like it's writing to the journal. But why should it need to keep writing to the journal when there have been no updates to any files on that partition recently? Thor ---------------------------------------------------------------- xfs_logprint: data device: 0x803 log device: 0x803 daddr: 682818768 length: 262144 log tail: 157103 head: 157107 state: LOG REC AT LSN cycle 1 block 157103 (0x1, 0x265af) ============================================================================ TRANS: tid:0xf2fcd6e0 type:SB_COUNT #items:1 trans:0x0 q:0x80b4c08 BUF: cnt:2 total:2 a:0x8099140 len:24 a:0x80ac748 len:128 BUF: #regs:2 start blkno:0x0 len:1 bmap size:1 flags:0x0 SUPER Block Buffer: LOG REC AT LSN cycle 1 block 157105 (0x1, 0x265b1) ============================================================================ TRANS: tid:0xf2fcd790 type:SB_COUNT #items:1 trans:0x0 q:0x80b4c08 BUF: cnt:2 total:2 a:0x8099140 len:24 a:0x80ac748 len:128 BUF: #regs:2 start blkno:0x0 len:1 bmap size:1 flags:0x0 SUPER Block Buffer: From owner-xfs@oss.sgi.com Mon Apr 7 14:51:36 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 14:51:44 -0700 (PDT) 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.0 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 m37LpVlr032473 for ; Mon, 7 Apr 2008 14:51:35 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id HAA17825; Tue, 8 Apr 2008 07:52:05 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m37Lq4sT125386337; Tue, 8 Apr 2008 07:52:05 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m37Lq3A2125471675; Tue, 8 Apr 2008 07:52:03 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 8 Apr 2008 07:52:03 +1000 From: David Chinner To: Christoph Hellwig Cc: David Chinner , xfs-dev , xfs-oss Subject: Re: [Patch] unique per-AG inode generation number initialisation Message-ID: <20080407215203.GB108924158@sgi.com> References: <20080401231815.GW103491721@sgi.com> <20080407125738.GD27350@infradead.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080407125738.GD27350@infradead.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15237 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 07, 2008 at 08:57:38AM -0400, Christoph Hellwig wrote: > I don't really like this. The chance to hit a previously used generation > seems to high. The chance to hit an existing generation number is almost non-existant. The counter is incremented on every allocation and not just when inode chunks are allocated on disk. Hence a series of "allocate chunk, unlink + free chunk, realloc chunk" is guaranteed to get a higher generation number on reallocation, as is the "allocate a chunk, while [1] {allocate; unlink}, unlink chunk, reallocate chunk." These are the issues that are causing use problems right now. The generation number won't get reused at all until it wraps at 2^32 allocations within the AG, and then you've got to have a chunk of inodes get freed and reallocated at the same time the counter matches an inode generation number. While not impossible, it'll be pretty rare.... > What about making the first few bits of each generation > number a per-ag counter that's incremented anytime we deallocate an inode > cluster? First thing I considered - increment on chunk freeing is not sufficient guarantee of short-term uniqueness. To guarantee short term uniqueness, the generation number used to initialise the inode chunk if it is immediately reallocated needs to be greater than the maximum used by any inode in the chunk that got freed. Now the "counter" becomes a "maximum generation number used in the AG" value. This also adds significant complexity to xfs_icluster_free() as we have to look at every inode in the chunk and not just the ones that are in-core. FWIW, the biggest complexity with this approach is wrapping - how do you tell what the highest highest generation number in the inode chunk being freed is when some have wrapped through zero? I basically gave up on this approach because of the extra complexity and nasty, untestable corner cases it introduced into code that is already complex. A simple incrementing counter solves the short-term uniqueness problem while still making it very hard to get duplicates in the long term. If you really, really need long term uniqueness, then use 'ikeep'. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 7 14:55:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 14:55:25 -0700 (PDT) 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.0 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 m37LtCtn000955 for ; Mon, 7 Apr 2008 14:55:17 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id HAA17887; Tue, 8 Apr 2008 07:55:43 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m37LtfsT125515359; Tue, 8 Apr 2008 07:55:42 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m37LtdnN125535623; Tue, 8 Apr 2008 07:55:39 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 8 Apr 2008 07:55:39 +1000 From: David Chinner To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: new xfsqa mismatches Message-ID: <20080407215539.GC108924158@sgi.com> References: <20080407100140.GA11891@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080407100140.GA11891@lst.de> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15238 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 07, 2008 at 12:01:40PM +0200, Christoph Hellwig wrote: > 103: > > - output mismatch (see 103.out.bad) > 7c7 > < ln: creating symbolic link `SCRATCH_MNT/nosymlink/target' to `SCRATCH_MNT/nosymlink/source': Operation not permitted > --- > > ln: creating symbolic link `SCRATCH_MNT/nosymlink/target' to `SCRATCH_MNT/nosymlink/source' to `SCRATCH_MNT/nosymlink/source': Operation not permitted > > not sure where the double to comes from but we should catch it From the last fix that I did to fix this for new version of ln. If other ppl sent xfsqa patches to the oss list, then you'd see that a patch to fix this was sent out for review yesterday.... > 130 and 132 expetect Bytes in various places but get bytes from xfs_io > from CVS What's the error output? I've not seen that one.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 7 14:56:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 14:56:23 -0700 (PDT) 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.0 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 m37LuBa1001304 for ; Mon, 7 Apr 2008 14:56:13 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id HAA17915; Tue, 8 Apr 2008 07:56:45 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m37LuhsT125518641; Tue, 8 Apr 2008 07:56:43 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m37LufCk124249832; Tue, 8 Apr 2008 07:56:41 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 8 Apr 2008 07:56:41 +1000 From: David Chinner To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 1/3] split xfs_icsb_sync_counters_flags Message-ID: <20080407215641.GD108924158@sgi.com> References: <20080319204501.GB23644@lst.de> <20080407075606.GA2317@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080407075606.GA2317@lst.de> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15239 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 07, 2008 at 09:56:06AM +0200, Christoph Hellwig wrote: > ping? (for the whole patch series) In my qa patch series that I haven't had a chance to check in yet. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 7 14:58:32 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 14:58:39 -0700 (PDT) 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.0 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 m37LwSvl002118 for ; Mon, 7 Apr 2008 14:58:31 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id HAA17982; Tue, 8 Apr 2008 07:58:58 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m37LwvsT125536651; Tue, 8 Apr 2008 07:58:58 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m37LwtH0125357219; Tue, 8 Apr 2008 07:58:55 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 8 Apr 2008 07:58:55 +1000 From: David Chinner To: Thor Kristoffersen Cc: Timothy Shimmin , xfs@oss.sgi.com Subject: Re: Does XFS prevent disk spindown? Message-ID: <20080407215855.GE108924158@sgi.com> References: <20080401003005.GJ103491721@sgi.com> <47F1CF6D.2040103@sandeen.net> <47F9735E.8020900@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15240 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 07, 2008 at 10:33:19PM +0200, Thor Kristoffersen wrote: > Timothy Shimmin writes: > > Thor Kristoffersen wrote: > >>> Use blktrace, or echo 1 > /proc/sys/vm/block_dump to see what block and > >>> who's writing it... it's probably the superblock? what kernel? > >> > >> This is kernel version 2.6.24. More specifically it's a Debian kernel from > >> package linux-image-2.6.24-1-686 (2.6.24-4). > >> > >> I put the system in runlevel 1 and executed the test as you suggested. On > >> /dev/sda3 I have mounted (with noatime) an XFS filesystem that contains > >> data that is not supposed to be accessed by any process. In the output > >> below I have filtered out all accesses to other partitions. (BTW, this is > >> not actually the disk that I wanted to spin down, but I think the log > >> proves my point.) > >> > >> > > I'm wondering if that is writing to the xfs ondisk log/journal in those cases. > > What does 'xfs_logprint -t' show in these "idle" states > > after these writes? > > xfs_logprint produces output like the one shown below, so it does indeed > look like it's writing to the journal. But why should it need to keep > writing to the journal when there have been no updates to any files on that > partition recently? Are you using lazy-count=1? (i.e. output of 'xfs_info ', please). Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 7 15:00:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 15:00:46 -0700 (PDT) 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.0 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 m37M0aMC002775 for ; Mon, 7 Apr 2008 15:00:38 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id IAA18239; Tue, 8 Apr 2008 08:01:10 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m37M18sT124333314; Tue, 8 Apr 2008 08:01:09 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m37M17ni125433244; Tue, 8 Apr 2008 08:01:07 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 8 Apr 2008 08:01:06 +1000 From: David Chinner To: Bond Masuda Cc: xfs@oss.sgi.com Subject: Re: performance problems with XFS and Linux kernel 2.6.24.4 Message-ID: <20080407220106.GF108924158@sgi.com> References: <007001c898f5$cae2f4a0$60a8dde0$@masuda@jlbond.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <007001c898f5$cae2f4a0$60a8dde0$@masuda@jlbond.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15241 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 07, 2008 at 02:24:41PM -0700, Bond Masuda wrote: > Hi, > > I am aware of the change regarding barrier/nobarrier in 2.6.17 and above. > However, the performance hit I'm seeing is very severe and much worse than > what I was seeing in 2.6.17 (bundled with latest updates in Fedora Core 4). > > I'm currently running Fedora 8 with 2.6.24.4-64.fc8. If I remove nobarrier > mount option, it takes seconds just to write few megabytes and the system > becomes very very sluggish. On 2.6.17 (Fedora 4) without the nobarrier > option it was still usable. Doesn't sound like a barrier problem. > The XFS file system is about 900GB, if that matters. > > Is this a known problem? > How can I gather more information to figure out > exactly what is going on? Start with what your hardware is, what your storage config is, output of 'xfs_info ', the log of your test (complete output) on working and non-working kernels, etc. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 7 15:02:45 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 15:02:53 -0700 (PDT) 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.0 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 m37M2ehi003823 for ; Mon, 7 Apr 2008 15:02:44 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id IAA18346; Tue, 8 Apr 2008 08:03:13 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m37M3BsT125539466; Tue, 8 Apr 2008 08:03:12 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m37M39m4125351772; Tue, 8 Apr 2008 08:03:09 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 8 Apr 2008 08:03:09 +1000 From: David Chinner To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH] don't validate symlink target component length Message-ID: <20080407220309.GG108924158@sgi.com> References: <20080407095745.GA11772@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080407095745.GA11772@lst.de> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15242 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 07, 2008 at 11:57:45AM +0200, Christoph Hellwig wrote: > This validtion is not posix conform and no other Linux filesystem does > it. Beat me to it, Christoph. ;) I'll run it through QA. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 7 15:17:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 15:17:07 -0700 (PDT) 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.0 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 m37MGuOC006849 for ; Mon, 7 Apr 2008 15:16:59 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id IAA18641; Tue, 8 Apr 2008 08:17:30 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m37MHTsT125452686; Tue, 8 Apr 2008 08:17:30 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m37MHS33124654579; Tue, 8 Apr 2008 08:17:28 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 8 Apr 2008 08:17:28 +1000 From: David Chinner To: Christoph Hellwig Cc: David Chinner , xfs-dev , xfs-oss Subject: Re: [Patch] Per iclog callback chain lock Message-ID: <20080407221728.GH108924158@sgi.com> References: <20080401231348.GT103491721@sgi.com> <20080407125111.GB27350@infradead.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080407125111.GB27350@infradead.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15243 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 07, 2008 at 08:51:11AM -0400, Christoph Hellwig wrote: > Looks good. You might want to kill ic_callback_tail while you're at it > as it's a write-only struct member. No, it's not a write-only member. xlog_notify() queues to the tail by doing: 410 cb->cb_next = NULL; 411 *(iclog->ic_callback_tail) = cb; 412 iclog->ic_callback_tail = &(cb->cb_next); So we can't remove it. Changing the callback chain to use a struct list_head makes more sense, but that's a separate patch.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 7 18:12:45 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 18:12:53 -0700 (PDT) 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=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 m381CgaM006683 for ; Mon, 7 Apr 2008 18:12:44 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA22016; Tue, 8 Apr 2008 11:13:15 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m381DEsT111201315; Tue, 8 Apr 2008 11:13:15 +1000 (AEST) Received: (from mohamedb@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m381DEck112465969; Tue, 8 Apr 2008 11:13:14 +1000 (AEST) Date: Tue, 8 Apr 2008 11:13:14 +1000 (AEST) From: Mohamed Barwani Message-Id: <200804080113.m381DEck112465969@snort.melbourne.sgi.com> To: xfs-bugs-internal@sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 979086 - xfsqa 103 needs to handle new/old ln failure output X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15244 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: mohamedb@snort.melbourne.sgi.com Precedence: bulk X-list: xfs Update ln filter to work with ln (version < 6.x) Date: Tue Apr 8 11:11:28 AEST 2008 Workarea: snort.melbourne.sgi.com:/home/mohamedb/isms/xfs-cmds Inspected by: dgc@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:30759a xfstests/103 - 1.7 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/103.diff?r1=text&tr1=1.7&r2=text&tr2=1.6&f=h - added a regular expression on the filter to check before replacing. From owner-xfs@oss.sgi.com Mon Apr 7 18:38:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 18:38:11 -0700 (PDT) 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.0 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 m381c0MR008259 for ; Mon, 7 Apr 2008 18:38:03 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA22467; Tue, 8 Apr 2008 11:38:35 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m381cYsT125482764; Tue, 8 Apr 2008 11:38:35 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m381cXx6125597616; Tue, 8 Apr 2008 11:38:33 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 8 Apr 2008 11:38:33 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [patch] xfsqa - 008 is unreliable on 64k page size Message-ID: <20080408013833.GN108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15245 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Test 008 is unreliable on 64k page size. The I/O size is large enough that the probability of extent merging results in intermittent failures due to fewer extents that the +/- 10% tolerance allows. Fix by making the files larger. Signed-off-by: Dave Chinner --- xfstests/008 | 10 +++++----- xfstests/008.out | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) Index: xfs-cmds/xfstests/008 =================================================================== --- xfs-cmds.orig/xfstests/008 2006-11-14 19:57:39.000000000 +1100 +++ xfs-cmds/xfstests/008 2008-04-08 10:18:10.641024202 +1000 @@ -79,13 +79,13 @@ _setup_testdir rm -f $here/$seq.out.full -_do_test 1 50 "-l 5000000 -c 50 -b $pgsize" -_do_test 2 100 "-l 10000000 -c 100 -b $pgsize" -_do_test 3 100 "-l 10000000 -c 100 -b 512" # test partial pages +_do_test 1 50 "-l 50000000 -c 50 -b $pgsize" +_do_test 2 100 "-l 100000000 -c 100 -b $pgsize" +_do_test 3 100 "-l 100000000 -c 100 -b 512" # test partial pages # rinse, lather, repeat for direct IO -_do_test 4 50 "-d -l 5000000 -c 50 -b $pgsize" -_do_test 5 100 "-d -l 10000000 -c 100 -b $pgsize" +_do_test 4 50 "-d -l 50000000 -c 50 -b $pgsize" +_do_test 5 100 "-d -l 100000000 -c 100 -b $pgsize" # note: direct IO requires page aligned IO # todo: realtime. Index: xfs-cmds/xfstests/008.out =================================================================== --- xfs-cmds.orig/xfstests/008.out 2006-11-14 19:57:39.000000000 +1100 +++ xfs-cmds/xfstests/008.out 2008-04-08 11:25:52.584176769 +1000 @@ -1,21 +1,21 @@ QA output created by 008 -randholes.1 : -l 5000000 -c 50 -b PGSIZE +randholes.1 : -l 50000000 -c 50 -b PGSIZE ------------------------------------------ holes is in range -randholes.2 : -l 10000000 -c 100 -b PGSIZE +randholes.2 : -l 100000000 -c 100 -b PGSIZE ------------------------------------------ holes is in range -randholes.3 : -l 10000000 -c 100 -b 512 +randholes.3 : -l 100000000 -c 100 -b 512 ------------------------------------------ holes is in range -randholes.4 : -d -l 5000000 -c 50 -b PGSIZE +randholes.4 : -d -l 50000000 -c 50 -b PGSIZE ------------------------------------------ holes is in range -randholes.5 : -d -l 10000000 -c 100 -b PGSIZE +randholes.5 : -d -l 100000000 -c 100 -b PGSIZE ------------------------------------------ holes is in range From owner-xfs@oss.sgi.com Mon Apr 7 18:39:55 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 18:40:02 -0700 (PDT) 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.0 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 m381dphd008554 for ; Mon, 7 Apr 2008 18:39:53 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA22505; Tue, 8 Apr 2008 11:40:25 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m381eOsT125217706; Tue, 8 Apr 2008 11:40:25 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m381eND6125535841; Tue, 8 Apr 2008 11:40:23 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 8 Apr 2008 11:40:23 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [patch] xfsqa 185 - remove uninitialised variables in golden output. Message-ID: <20080408014023.GO108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15246 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Kill the output of uninitialised values when punching a hole. This prevents the test from passing on just about everything. Signed-off-by: Dave Chinner --- xfstests/185.out | 5 ----- xfstests/dmapi/src/suite1/cmd/probe_punch_xfsctl_hole.c | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) Index: xfs-cmds/xfstests/185.out =================================================================== --- xfs-cmds.orig/xfstests/185.out 2008-03-13 17:49:31.000000000 +1100 +++ xfs-cmds/xfstests/185.out 2008-04-08 11:31:30.520670188 +1000 @@ -12,7 +12,6 @@ roffp is 0, rlenp is 16384 Method: dmapi_punch Running DMAPI punch hole on /mnt/scratch/dmapi/holly_file with settings: offset = '0', length = '16384', sid = '0' -roffp is 4200149, rlenp is 47820330485640 ======================================================= ======================================================= Testing with length = 1k, offset = 0 @@ -27,7 +26,6 @@ roffp is 0, rlenp is 1024 Method: dmapi_punch Running DMAPI punch hole on /mnt/scratch/dmapi/holly_file with settings: offset = '0', length = '1024', sid = '0' -roffp is 4200149, rlenp is 47194545715080 ======================================================= ======================================================= Testing with length = 1k, offset = 4k @@ -42,7 +40,6 @@ roffp is 4096, rlenp is 1024 Method: dmapi_punch Running DMAPI punch hole on /mnt/scratch/dmapi/holly_file with settings: offset = '4096', length = '1024', sid = '0' -roffp is 4200149, rlenp is 47256598480776 ======================================================= ======================================================= Testing with length = 4k, offset = 1k @@ -57,7 +54,6 @@ roffp is 1024, rlenp is 4096 Method: dmapi_punch Running DMAPI punch hole on /mnt/scratch/dmapi/holly_file with settings: offset = '1024', length = '4096', sid = '0' -roffp is 4200149, rlenp is 47292581427080 ======================================================= ======================================================= Testing with length = 1024k, offset = 512k @@ -72,5 +68,4 @@ roffp is 524288, rlenp is 1048576 Method: dmapi_punch Running DMAPI punch hole on /mnt/scratch/dmapi/holly_file with settings: offset = '524288', length = '1048576', sid = '0' -roffp is 4200149, rlenp is 47016592795528 ======================================================= Index: xfs-cmds/xfstests/dmapi/src/suite1/cmd/probe_punch_xfsctl_hole.c =================================================================== --- xfs-cmds.orig/xfstests/dmapi/src/suite1/cmd/probe_punch_xfsctl_hole.c 2008-03-13 17:49:31.000000000 +1100 +++ xfs-cmds/xfstests/dmapi/src/suite1/cmd/probe_punch_xfsctl_hole.c 2008-04-08 11:30:32.032200700 +1000 @@ -176,6 +176,7 @@ main( strerror(errno)); exit(1); } + fprintf(stdout, "roffp is %lld, rlenp is %lld\n", roffp, rlenp); break; case METHOD_DMAPI_PUNCH: if (dm_punch_hole(sid, hanp, hlen, DM_NO_TOKEN, offset, length)) { @@ -185,7 +186,6 @@ main( } break; } - fprintf(stdout, "roffp is %lld, rlenp is %lld\n", roffp, rlenp); dm_handle_free(hanp, hlen); return 0; From owner-xfs@oss.sgi.com Mon Apr 7 19:29:05 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 19:29:12 -0700 (PDT) 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.0 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 m382T0Nr014325 for ; Mon, 7 Apr 2008 19:29:03 -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 MAA23330; Tue, 8 Apr 2008 12:29:33 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 170C258C4C0F; Tue, 8 Apr 2008 12:29:32 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 979087 - Test 091 fails on sector size != 512 bytes Message-Id: <20080408022933.170C258C4C0F@chook.melbourne.sgi.com> Date: Tue, 8 Apr 2008 12:29:32 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15247 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Test 091 fails on sector size != 512 bytes Test 091 assumes a direct I/O alignment of 512 bytes, a hold over from 2.4 kernels. On 2.6. kernels, direct I/O needs to be aligned to the sector size the filesystem was mkfs'd with. Date: Tue Apr 8 12:29:00 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/xfs-cmds Inspected by: bnaujok The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:30760a xfstests/091 - 1.7 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/091.diff?r1=text&tr1=1.7&r2=text&tr2=1.6&f=h - Teach 091 about 2.6 kernels and grab the sector size from the xfs_info output. From owner-xfs@oss.sgi.com Mon Apr 7 21:42:47 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 21:42:54 -0700 (PDT) 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.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from relay.sgi.com (relay2.corp.sgi.com [192.26.58.22]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m384gkhS004063 for ; Mon, 7 Apr 2008 21:42:47 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by relay2.corp.sgi.com (Postfix) with ESMTP id D8EAD3040F2; Mon, 7 Apr 2008 21:43:20 -0700 (PDT) Received: from itchy (xaiki@itchy.melbourne.sgi.com [134.14.55.96]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m384hEjm277646; Tue, 8 Apr 2008 14:43:16 +1000 (AEST) From: Niv Sardi To: David Chinner Cc: xfs-dev , xfs-oss Subject: Re: [patch] xfsqa 185 - remove uninitialised variables in golden output. In-Reply-To: <20080408014023.GO108924158@sgi.com> (David Chinner's message of "Tue, 8 Apr 2008 11:40:23 +1000") References: <20080408014023.GO108924158@sgi.com> User-Agent: Gnus/5.110007 (No Gnus v0.7) Emacs/23.0.60 (i486-pc-linux-gnu) Date: Tue, 08 Apr 2008 14:43:15 +1000 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15248 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@sgi.com Precedence: bulk X-list: xfs David Chinner writes: > Kill the output of uninitialised values when punching a hole. > This prevents the test from passing on just about everything. > > Signed-off-by: Dave Chinner Thanks dave, I've been meaning to do that for a long time, we might want to kill the sid output too when it's not specified on command line (can that change ? I've always seen it as 0). Cheers, -- Niv Sardi From owner-xfs@oss.sgi.com Mon Apr 7 21:46:58 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 21:47:05 -0700 (PDT) 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.0 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 m384kqJg004947 for ; Mon, 7 Apr 2008 21:46:56 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA25726; Tue, 8 Apr 2008 14:47:30 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m384lTsT125556667; Tue, 8 Apr 2008 14:47:29 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m384lRA5125519654; Tue, 8 Apr 2008 14:47:27 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 8 Apr 2008 14:47:27 +1000 From: David Chinner To: Niv Sardi Cc: David Chinner , xfs-dev , xfs-oss Subject: Re: [patch] xfsqa 185 - remove uninitialised variables in golden output. Message-ID: <20080408044727.GV108924158@sgi.com> References: <20080408014023.GO108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15249 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Tue, Apr 08, 2008 at 02:43:15PM +1000, Niv Sardi wrote: > David Chinner writes: > > > Kill the output of uninitialised values when punching a hole. > > This prevents the test from passing on just about everything. > > > > Signed-off-by: Dave Chinner > > Thanks dave, I've been meaning to do that for a long time, we might want > to kill the sid output too when it's not specified on command line (can > that change ? I've always seen it as 0). no idea. You can remove it as a separate patch if it is a problem. I'm going to check this one in now ;) Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 7 21:49:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 21:49:21 -0700 (PDT) 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.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42, J_CHICKENPOX_47,J_CHICKENPOX_65 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 m384n2Cq005525 for ; Mon, 7 Apr 2008 21:49:05 -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 OAA25761; Tue, 8 Apr 2008 14:49:38 +1000 Date: Tue, 08 Apr 2008 14:50:17 +1000 To: "xfs@oss.sgi.com" Subject: [REVIEW] cleanup - remove bhv_vname_t From: "Barry Naujok" Organization: SGI Cc: xfs-dev Content-Type: multipart/mixed; boundary=----------PNYoZ3ZdOW1QI4qtNDrlw5 MIME-Version: 1.0 Message-ID: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15250 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs ------------PNYoZ3ZdOW1QI4qtNDrlw5 Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 Content-Transfer-Encoding: Quoted-Printable This is a new patch for the CI code, but is first in the sequence and really a stand-alone patch. Stack changes on x86_64: original new xfs_cleanup_inode 208 < 100 xfs_rename 184 168 xfs_dir_removename 152 144 xfs_mkdir 152 136 xfs_rmdir 104 < 100 [following is attached in case of patch mangling] --- fs/xfs/dmapi/xfs_dm.c | 8 +-- fs/xfs/linux-2.6/xfs_export.c | 5 -- fs/xfs/linux-2.6/xfs_iops.c | 51 ++++++++++++++++------ fs/xfs/linux-2.6/xfs_vnode.h | 8 --- fs/xfs/xfs_dir2.c | 46 +++++++++---------- fs/xfs/xfs_dir2.h | 20 ++++++-- fs/xfs/xfs_mount.h | 4 - fs/xfs/xfs_rename.c | 54 ++++++++++------------- fs/xfs/xfs_utils.c | 4 - fs/xfs/xfs_utils.h | 2 fs/xfs/xfs_vnodeops.c | 97=20=20 +++++++++++++++++------------------------- fs/xfs/xfs_vnodeops.h | 23 +++++---- 12 files changed, 162 insertions(+), 160 deletions(-) Index: kern_ci/fs/xfs/dmapi/xfs_dm.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/dmapi/xfs_dm.c +++ kern_ci/fs/xfs/dmapi/xfs_dm.c @@ -245,7 +245,7 @@ xfs_copyin_attrname( size_t len; strcpy(to->dan_chars, dmattr_prefix); - + len =3D strnlen_user((char __user *)from, DM_ATTR_NAME_SIZE); if (len =3D=3D 0) error =3D EFAULT; @@ -3172,8 +3172,8 @@ xfs_dm_send_namesp_event( dm_right_t vp1_right, xfs_inode_t *ip2, dm_right_t vp2_right, - char *name1, - char *name2, + const char *name1, + const char *name2, mode_t mode, int retcode, int flags) @@ -3182,7 +3182,7 @@ xfs_dm_send_namesp_event( return -dm_send_namesp_event(event, mp ? mp->m_super : NULL, ip1->i_vnode, vp1_right, ip2 ? ip2->i_vnode : NULL, vp2_right, - name1, name2, + (char *)name1, (char *)name2, mode, retcode, flags); } Index: kern_ci/fs/xfs/linux-2.6/xfs_export.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_export.c +++ kern_ci/fs/xfs/linux-2.6/xfs_export.c @@ -22,6 +22,7 @@ #include "xfs_trans.h" #include "xfs_sb.h" #include "xfs_ag.h" +#include "xfs_dir2.h" #include "xfs_dmapi.h" #include "xfs_mount.h" #include "xfs_export.h" @@ -30,8 +31,6 @@ #include "xfs_inode.h" #include "xfs_vfsops.h" -static struct dentry dotdot =3D { .d_name.name =3D "..", .d_name.len =3D 2= , }; - /* * Note that we only accept fileids which are long enough rather than=20= =20 allow * the parent generation number to default to zero. XFS considers zero a @@ -216,7 +215,7 @@ xfs_fs_get_parent( struct xfs_inode *cip; struct dentry *parent; - error =3D xfs_lookup(XFS_I(child->d_inode), &dotdot, &cip); + error =3D xfs_lookup(XFS_I(child->d_inode), &xfs_name_dotdot, &cip); if (unlikely(error)) return ERR_PTR(-error); Index: kern_ci/fs/xfs/linux-2.6/xfs_iops.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_iops.c +++ kern_ci/fs/xfs/linux-2.6/xfs_iops.c @@ -239,6 +239,16 @@ xfs_init_security( return error; } +static inline struct xfs_name * +xfs_dentry_name( + struct xfs_name *namep, + struct dentry *dentry) +{ + namep->name =3D dentry->d_name.name; + namep->len =3D dentry->d_name.len; + return namep; +} + STATIC void xfs_cleanup_inode( struct inode *dir, @@ -246,20 +256,19 @@ xfs_cleanup_inode( struct dentry *dentry, int mode) { - struct dentry teardown =3D {}; + struct xfs_name name; /* Oh, the horror. * If we can't add the ACL or we fail in * xfs_init_security we must back out. * ENOSPC can hit here, among other things. */ - teardown.d_inode =3D inode; - teardown.d_name =3D dentry->d_name; + xfs_dentry_name(&name, dentry); if (S_ISDIR(mode)) - xfs_rmdir(XFS_I(dir), &teardown); + xfs_rmdir(XFS_I(dir), &name, XFS_I(inode)); else - xfs_remove(XFS_I(dir), &teardown); + xfs_remove(XFS_I(dir), &name, XFS_I(inode)); iput(inode); } @@ -273,6 +282,7 @@ xfs_vn_mknod( struct inode *inode; struct xfs_inode *ip =3D NULL; xfs_acl_t *default_acl =3D NULL; + struct xfs_name name; attrexists_t test_default_acl =3D _ACL_DEFAULT_EXISTS; int error; @@ -293,6 +303,8 @@ xfs_vn_mknod( } } + xfs_dentry_name(&name, dentry); + if (IS_POSIXACL(dir) && !default_acl) mode &=3D ~current->fs->umask; @@ -303,10 +315,10 @@ xfs_vn_mknod( case S_IFSOCK: rdev =3D sysv_encode_dev(rdev); case S_IFREG: - error =3D xfs_create(XFS_I(dir), dentry, mode, rdev, &ip, NULL); + error =3D xfs_create(XFS_I(dir), &name, mode, rdev, &ip, NULL); break; case S_IFDIR: - error =3D xfs_mkdir(XFS_I(dir), dentry, mode, &ip, NULL); + error =3D xfs_mkdir(XFS_I(dir), &name, mode, &ip, NULL); break; default: error =3D EINVAL; @@ -371,12 +383,13 @@ xfs_vn_lookup( struct nameidata *nd) { struct xfs_inode *cip; + struct xfs_name name; int error; if (dentry->d_name.len >=3D MAXNAMELEN) return ERR_PTR(-ENAMETOOLONG); - error =3D xfs_lookup(XFS_I(dir), dentry, &cip); + error =3D xfs_lookup(XFS_I(dir), xfs_dentry_name(&name, dentry), &cip); if (unlikely(error)) { if (unlikely(error !=3D ENOENT)) return ERR_PTR(-error); @@ -394,12 +407,14 @@ xfs_vn_link( struct dentry *dentry) { struct inode *inode; /* inode of guy being linked to */ + struct xfs_name name; int error; inode =3D old_dentry->d_inode; igrab(inode); - error =3D xfs_link(XFS_I(dir), XFS_I(inode), dentry); + error =3D xfs_link(XFS_I(dir), XFS_I(inode), + xfs_dentry_name(&name, dentry)); if (unlikely(error)) { iput(inode); return -error; @@ -417,11 +432,13 @@ xfs_vn_unlink( struct dentry *dentry) { struct inode *inode; + struct xfs_name name; int error; inode =3D dentry->d_inode; - error =3D xfs_remove(XFS_I(dir), dentry); + error =3D xfs_remove(XFS_I(dir), xfs_dentry_name(&name, dentry), + XFS_I(inode)); if (likely(!error)) { xfs_validate_fields(dir); /* size needs update */ xfs_validate_fields(inode); @@ -437,14 +454,15 @@ xfs_vn_symlink( { struct inode *inode; struct xfs_inode *cip =3D NULL; + struct xfs_name name; int error; mode_t mode; mode =3D S_IFLNK | (irix_symlink_mode ? 0777 & ~current->fs->umask : S_IRWXUGO); - error =3D xfs_symlink(XFS_I(dir), dentry, (char *)symname, mode, - &cip, NULL); + error =3D xfs_symlink(XFS_I(dir), xfs_dentry_name(&name, dentry), + (char *)symname, mode, &cip, NULL); if (unlikely(error)) goto out; @@ -471,9 +489,11 @@ xfs_vn_rmdir( struct dentry *dentry) { struct inode *inode =3D dentry->d_inode; + struct xfs_name name; int error; - error =3D xfs_rmdir(XFS_I(dir), dentry); + error =3D xfs_rmdir(XFS_I(dir), xfs_dentry_name(&name, dentry), + XFS_I(inode)); if (likely(!error)) { xfs_validate_fields(inode); xfs_validate_fields(dir); @@ -489,9 +509,12 @@ xfs_vn_rename( struct dentry *ndentry) { struct inode *new_inode =3D ndentry->d_inode; + struct xfs_name oname, nname; int error; - error =3D xfs_rename(XFS_I(odir), odentry, XFS_I(ndir), ndentry); + error =3D xfs_rename(XFS_I(odir), xfs_dentry_name(&oname, odentry), + XFS_I(odentry->d_inode), XFS_I(ndir), + xfs_dentry_name(&nname, ndentry)); if (likely(!error)) { if (new_inode) xfs_validate_fields(new_inode); Index: kern_ci/fs/xfs/linux-2.6/xfs_vnode.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_vnode.h +++ kern_ci/fs/xfs/linux-2.6/xfs_vnode.h @@ -23,7 +23,6 @@ struct bhv_vattr; struct xfs_iomap; struct attrlist_cursor_kern; -typedef struct dentry bhv_vname_t; typedef __u64 bhv_vnumber_t; typedef struct inode bhv_vnode_t; @@ -211,13 +210,6 @@ static inline bhv_vnode_t *vn_grab(bhv_v } /* - * Vname handling macros. - */ -#define VNAME(dentry) ((char *) (dentry)->d_name.name) -#define VNAMELEN(dentry) ((dentry)->d_name.len) -#define VNAME_TO_INODE(dentry) (XFS_I((dentry)->d_inode)) - -/* * Dealing with bad inodes */ static inline int VN_BAD(bhv_vnode_t *vp) Index: kern_ci/fs/xfs/xfs_dir2.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -44,6 +44,7 @@ #include "xfs_error.h" #include "xfs_vnodeops.h" +xfs_name_t xfs_name_dotdot =3D {"..", 2}; void xfs_dir_mount( @@ -146,8 +147,7 @@ int xfs_dir_createname( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, + xfs_name_t *name, xfs_ino_t inum, /* new entry inode number */ xfs_fsblock_t *first, /* bmap's firstblock */ xfs_bmap_free_t *flist, /* bmap's freeblock list */ @@ -162,9 +162,9 @@ xfs_dir_createname( return rval; XFS_STATS_INC(xs_dir_create); - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D inum; args.dp =3D dp; args.firstblock =3D first; @@ -197,8 +197,7 @@ int xfs_dir_lookup( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, + xfs_name_t *name, xfs_ino_t *inum) /* out: inode number */ { xfs_da_args_t args; @@ -208,9 +207,9 @@ xfs_dir_lookup( ASSERT((dp->i_d.di_mode & S_IFMT) =3D=3D S_IFDIR); XFS_STATS_INC(xs_dir_lookup); - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D 0; args.dp =3D dp; args.firstblock =3D NULL; @@ -247,8 +246,7 @@ int xfs_dir_removename( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, + xfs_name_t *name, xfs_ino_t ino, xfs_fsblock_t *first, /* bmap's firstblock */ xfs_bmap_free_t *flist, /* bmap's freeblock list */ @@ -261,9 +259,9 @@ xfs_dir_removename( ASSERT((dp->i_d.di_mode & S_IFMT) =3D=3D S_IFDIR); XFS_STATS_INC(xs_dir_remove); - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D ino; args.dp =3D dp; args.firstblock =3D first; @@ -329,8 +327,7 @@ int xfs_dir_replace( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, /* name of entry to replace */ - int namelen, + xfs_name_t *name, /* name of entry to replace */ xfs_ino_t inum, /* new inode number */ xfs_fsblock_t *first, /* bmap's firstblock */ xfs_bmap_free_t *flist, /* bmap's freeblock list */ @@ -345,9 +342,9 @@ xfs_dir_replace( if ((rval =3D xfs_dir_ino_validate(tp->t_mountp, inum))) return rval; - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D inum; args.dp =3D dp; args.firstblock =3D first; @@ -379,8 +376,7 @@ int xfs_dir_canenter( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, /* name of entry to add */ - int namelen) + xfs_name_t *name) /* name of entry to add */ { xfs_da_args_t args; int rval; @@ -388,9 +384,9 @@ xfs_dir_canenter( ASSERT((dp->i_d.di_mode & S_IFMT) =3D=3D S_IFDIR); - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D 0; args.dp =3D dp; args.firstblock =3D NULL; Index: kern_ci/fs/xfs/xfs_dir2.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_dir2.h +++ kern_ci/fs/xfs/xfs_dir2.h @@ -60,6 +60,16 @@ typedef __uint32_t xfs_dir2_db_t; typedef xfs_off_t xfs_dir2_off_t; /* + * Counted string for file names. + */ +typedef struct xfs_name { + const uchar_t *name; + int len; +} xfs_name_t; + +extern xfs_name_t xfs_name_dotdot; + +/* * Generic directory interface routines */ extern void xfs_dir_startup(void); @@ -68,21 +78,21 @@ extern int xfs_dir_isempty(struct xfs_in extern int xfs_dir_init(struct xfs_trans *tp, struct xfs_inode *dp, struct xfs_inode *pdp); extern int xfs_dir_createname(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t inum, + xfs_name_t *name, xfs_ino_t inum, xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_lookup(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t *inum); + xfs_name_t *name, xfs_ino_t *inum); extern int xfs_dir_removename(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t ino, + xfs_name_t *name, xfs_ino_t ino, xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_replace(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t inum, + xfs_name_t *name, xfs_ino_t inum, xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_canenter(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen); + xfs_name_t *name); extern int xfs_dir_ino_validate(struct xfs_mount *mp, xfs_ino_t ino); /* Index: kern_ci/fs/xfs/xfs_mount.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_mount.h +++ kern_ci/fs/xfs/xfs_mount.h @@ -73,7 +73,7 @@ typedef int (*xfs_send_destroy_t)(struct typedef int (*xfs_send_namesp_t)(dm_eventtype_t, struct xfs_mount *, struct xfs_inode *, dm_right_t, struct xfs_inode *, dm_right_t, - char *, char *, mode_t, int, int); + const char *, const char *, mode_t, int, int); typedef int (*xfs_send_mount_t)(struct xfs_mount *, dm_right_t, char *, char *); typedef void (*xfs_send_unmount_t)(struct xfs_mount *, struct xfs_inode *, @@ -401,7 +401,7 @@ typedef struct xfs_mount { /* * Allow large block sizes to be reported to userspace programs if the - * "largeio" mount option is used. + * "largeio" mount option is used. * * If compatibility mode is specified, simply return the basic unit of=20= =20 caching * so that we don't get inefficient read/modify/write I/O from user apps. Index: kern_ci/fs/xfs/xfs_rename.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_rename.c +++ kern_ci/fs/xfs/xfs_rename.c @@ -83,17 +83,16 @@ int xfs_rename_skip, xfs_rename_nskip; */ STATIC int xfs_lock_for_rename( - xfs_inode_t *dp1, /* old (source) directory inode */ - xfs_inode_t *dp2, /* new (target) directory inode */ - bhv_vname_t *vname1,/* old entry name */ - bhv_vname_t *vname2,/* new entry name */ - xfs_inode_t **ipp1, /* inode of old entry */ - xfs_inode_t **ipp2, /* inode of new entry, if it + xfs_inode_t *dp1, /* in: old (source) directory inode */ + xfs_inode_t *dp2, /* in: new (target) directory inode */ + xfs_name_t *name2, /* in: new entry name */ + xfs_inode_t **ipp1, /* in/out: inode of old entry */ + xfs_inode_t **ipp2, /* out: inode of new entry, if it already exists, NULL otherwise. */ - xfs_inode_t **i_tab,/* array of inode returned, sorted */ - int *num_inodes) /* number of inodes in array */ + xfs_inode_t **i_tab,/* out: array of inode returned, sorted */ + int *num_inodes) /* out: number of inodes in array */ { - xfs_inode_t *ip1 =3D VNAME_TO_INODE(vname1); + xfs_inode_t *ip1; xfs_inode_t *ip2, *temp; xfs_ino_t inum1, inum2; int error; @@ -101,6 +100,7 @@ xfs_lock_for_rename( uint lock_mode; int diff_dirs =3D (dp1 !=3D dp2); + ip1 =3D *ipp1; ip2 =3D NULL; /* @@ -125,7 +125,7 @@ xfs_lock_for_rename( lock_mode =3D xfs_ilock_map_shared(dp2); } - error =3D xfs_dir_lookup_int(dp2, lock_mode, vname2, &inum2, &ip2); + error =3D xfs_dir_lookup_int(dp2, lock_mode, name2, &inum2, &ip2); if (error =3D=3D ENOENT) { /* target does not need to exist. */ inum2 =3D 0; } else if (error) { @@ -218,12 +218,13 @@ xfs_lock_for_rename( int xfs_rename( xfs_inode_t *src_dp, - bhv_vname_t *src_vname, + xfs_name_t *src_name, + xfs_inode_t *src_ip, xfs_inode_t *target_dp, - bhv_vname_t *target_vname) + xfs_name_t *target_name) { xfs_trans_t *tp; - xfs_inode_t *src_ip, *target_ip; + xfs_inode_t *target_ip; xfs_mount_t *mp =3D src_dp->i_mount; int new_parent; /* moving to a new dir */ int src_is_directory; /* src_name is a directory */ @@ -237,10 +238,6 @@ xfs_rename( int spaceres; int target_link_zero =3D 0; int num_inodes; - char *src_name =3D VNAME(src_vname); - char *target_name =3D VNAME(target_vname); - int src_namelen =3D VNAMELEN(src_vname); - int target_namelen =3D VNAMELEN(target_vname); xfs_itrace_entry(src_dp); xfs_itrace_entry(target_dp); @@ -250,7 +247,7 @@ xfs_rename( error =3D XFS_SEND_NAMESP(mp, DM_EVENT_RENAME, src_dp, DM_RIGHT_NULL, target_dp, DM_RIGHT_NULL, - src_name, target_name, + src_name->name, target_name->name, 0, 0, 0); if (error) { return error; @@ -267,9 +264,8 @@ xfs_rename( * does not exist in the source directory. */ tp =3D NULL; - error =3D xfs_lock_for_rename(src_dp, target_dp, src_vname, - target_vname, &src_ip, &target_ip, inodes, - &num_inodes); + error =3D xfs_lock_for_rename(src_dp, target_dp, target_name, + &src_ip, &target_ip, inodes, &num_inodes); if (error) { /* @@ -316,7 +312,7 @@ xfs_rename( XFS_BMAP_INIT(&free_list, &first_block); tp =3D xfs_trans_alloc(mp, XFS_TRANS_RENAME); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - spaceres =3D XFS_RENAME_SPACE_RES(mp, target_namelen); + spaceres =3D XFS_RENAME_SPACE_RES(mp, target_name->len); error =3D xfs_trans_reserve(tp, spaceres, XFS_RENAME_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_RENAME_LOG_COUNT); if (error =3D=3D ENOSPC) { @@ -375,8 +371,7 @@ xfs_rename( * fit before actually inserting it. */ if (spaceres =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, target_dp, target_name, - target_namelen))) + (error =3D xfs_dir_canenter(tp, target_dp, target_name))) goto error_return; /* * If target does not exist and the rename crosses @@ -384,7 +379,7 @@ xfs_rename( * to account for the ".." reference from the new entry. */ error =3D xfs_dir_createname(tp, target_dp, target_name, - target_namelen, src_ip->i_ino, + src_ip->i_ino, &first_block, &free_list, spaceres); if (error =3D=3D ENOSPC) goto error_return; @@ -424,7 +419,7 @@ xfs_rename( * name at the destination directory, remove it first. */ error =3D xfs_dir_replace(tp, target_dp, target_name, - target_namelen, src_ip->i_ino, + src_ip->i_ino, &first_block, &free_list, spaceres); if (error) goto abort_return; @@ -461,7 +456,8 @@ xfs_rename( * Rewrite the ".." entry to point to the new * directory. */ - error =3D xfs_dir_replace(tp, src_ip, "..", 2, target_dp->i_ino, + error =3D xfs_dir_replace(tp, src_ip, &xfs_name_dotdot, + target_dp->i_ino, &first_block, &free_list, spaceres); ASSERT(error !=3D EEXIST); if (error) @@ -497,7 +493,7 @@ xfs_rename( goto abort_return; } - error =3D xfs_dir_removename(tp, src_dp, src_name, src_namelen, + error =3D xfs_dir_removename(tp, src_dp, src_name, src_ip->i_ino, &first_block, &free_list, spaceres); if (error) goto abort_return; @@ -583,7 +579,7 @@ std_return: (void) XFS_SEND_NAMESP (mp, DM_EVENT_POSTRENAME, src_dp, DM_RIGHT_NULL, target_dp, DM_RIGHT_NULL, - src_name, target_name, + src_name->name, target_name->name, 0, error, 0); } return error; Index: kern_ci/fs/xfs/xfs_utils.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_utils.c +++ kern_ci/fs/xfs/xfs_utils.c @@ -45,7 +45,7 @@ int xfs_dir_lookup_int( xfs_inode_t *dp, uint lock_mode, - bhv_vname_t *dentry, + xfs_name_t *name, xfs_ino_t *inum, xfs_inode_t **ipp) { @@ -53,7 +53,7 @@ xfs_dir_lookup_int( xfs_itrace_entry(dp); - error =3D xfs_dir_lookup(NULL, dp, VNAME(dentry), VNAMELEN(dentry), inum); + error =3D xfs_dir_lookup(NULL, dp, name, inum); if (!error) { /* * Unlock the directory. We do this because we can't Index: kern_ci/fs/xfs/xfs_utils.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_utils.h +++ kern_ci/fs/xfs/xfs_utils.h @@ -21,7 +21,7 @@ #define IRELE(ip) VN_RELE(XFS_ITOV(ip)) #define IHOLD(ip) VN_HOLD(XFS_ITOV(ip)) -extern int xfs_dir_lookup_int (xfs_inode_t *, uint, bhv_vname_t *,=20=20 xfs_ino_t *, +extern int xfs_dir_lookup_int (xfs_inode_t *, uint, xfs_name_t *,=20=20 xfs_ino_t *, xfs_inode_t **); extern int xfs_truncate_file (xfs_mount_t *, xfs_inode_t *); extern int xfs_dir_ialloc (xfs_trans_t **, xfs_inode_t *, mode_t,=20=20 xfs_nlink_t, Index: kern_ci/fs/xfs/xfs_vnodeops.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_vnodeops.c +++ kern_ci/fs/xfs/xfs_vnodeops.c @@ -1762,7 +1762,7 @@ xfs_inactive( int xfs_lookup( xfs_inode_t *dp, - bhv_vname_t *dentry, + xfs_name_t *name, xfs_inode_t **ipp) { xfs_inode_t *ip; @@ -1776,7 +1776,7 @@ xfs_lookup( return XFS_ERROR(EIO); lock_mode =3D xfs_ilock_map_shared(dp); - error =3D xfs_dir_lookup_int(dp, lock_mode, dentry, &e_inum, &ip); + error =3D xfs_dir_lookup_int(dp, lock_mode, name, &e_inum, &ip); if (!error) { *ipp =3D ip; xfs_itrace_ref(ip); @@ -1788,13 +1788,12 @@ xfs_lookup( int xfs_create( xfs_inode_t *dp, - bhv_vname_t *dentry, + xfs_name_t *name, mode_t mode, xfs_dev_t rdev, xfs_inode_t **ipp, cred_t *credp) { - char *name =3D VNAME(dentry); xfs_mount_t *mp =3D dp->i_mount; xfs_inode_t *ip; xfs_trans_t *tp; @@ -1808,17 +1807,14 @@ xfs_create( xfs_prid_t prid; struct xfs_dquot *udqp, *gdqp; uint resblks; - int namelen; ASSERT(!*ipp); xfs_itrace_entry(dp); - namelen =3D VNAMELEN(dentry); - if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_CREATE, dp, DM_RIGHT_NULL, NULL, - DM_RIGHT_NULL, name, NULL, + DM_RIGHT_NULL, name->name, NULL, mode, 0, 0); if (error) @@ -1850,7 +1846,7 @@ xfs_create( tp =3D xfs_trans_alloc(mp, XFS_TRANS_CREATE); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - resblks =3D XFS_CREATE_SPACE_RES(mp, namelen); + resblks =3D XFS_CREATE_SPACE_RES(mp, name->len); /* * Initially assume that the file does not exist and * reserve the resources for that case. If that is not @@ -1883,7 +1879,7 @@ xfs_create( if (error) goto error_return; - if (resblks =3D=3D 0 && (error =3D xfs_dir_canenter(tp, dp, name, namelen= ))) + if (resblks =3D=3D 0 && (error =3D xfs_dir_canenter(tp, dp, name))) goto error_return; error =3D xfs_dir_ialloc(&tp, dp, mode, 1, rdev, credp, prid, resblks > 0, @@ -1913,7 +1909,7 @@ xfs_create( xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL); unlock_dp_on_error =3D B_FALSE; - error =3D xfs_dir_createname(tp, dp, name, namelen, ip->i_ino, + error =3D xfs_dir_createname(tp, dp, name, ip->i_ino, &first_block, &free_list, resblks ? resblks - XFS_IALLOC_SPACE_RES(mp) : 0); if (error) { @@ -1974,7 +1970,7 @@ std_return: (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTCREATE, dp, DM_RIGHT_NULL, *ipp ? ip : NULL, - DM_RIGHT_NULL, name, NULL, + DM_RIGHT_NULL, name->name, NULL, mode, error, 0); } return error; @@ -2266,12 +2262,10 @@ int remove_which_error_return =3D 0; int xfs_remove( xfs_inode_t *dp, - bhv_vname_t *dentry) + xfs_name_t *name, + xfs_inode_t *ip) { - char *name =3D VNAME(dentry); xfs_mount_t *mp =3D dp->i_mount; - xfs_inode_t *ip =3D VNAME_TO_INODE(dentry); - int namelen =3D VNAMELEN(dentry); xfs_trans_t *tp =3D NULL; int error =3D 0; xfs_bmap_free_t free_list; @@ -2287,9 +2281,9 @@ xfs_remove( return XFS_ERROR(EIO); if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { - error =3D XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, - DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - name, NULL, ip->i_d.di_mode, 0, 0); + error =3D XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, DM_RIGHT_NULL, + NULL, DM_RIGHT_NULL, name->name, NULL, + ip->i_d.di_mode, 0, 0); if (error) return error; } @@ -2374,7 +2368,7 @@ xfs_remove( * Entry must exist since we did a lookup in xfs_lock_dir_and_entry. */ XFS_BMAP_INIT(&free_list, &first_block); - error =3D xfs_dir_removename(tp, dp, name, namelen, ip->i_ino, + error =3D xfs_dir_removename(tp, dp, name, ip->i_ino, &first_block, &free_list, 0); if (error) { ASSERT(error !=3D ENOENT); @@ -2442,7 +2436,7 @@ xfs_remove( (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - name, NULL, ip->i_d.di_mode, error, 0); + name->name, NULL, ip->i_d.di_mode, error, 0); } return error; @@ -2472,7 +2466,7 @@ int xfs_link( xfs_inode_t *tdp, xfs_inode_t *sip, - bhv_vname_t *dentry) + xfs_name_t *target_name) { xfs_mount_t *mp =3D tdp->i_mount; xfs_trans_t *tp; @@ -2483,13 +2477,10 @@ xfs_link( int cancel_flags; int committed; int resblks; - char *target_name =3D VNAME(dentry); - int target_namelen; xfs_itrace_entry(tdp); xfs_itrace_entry(sip); - target_namelen =3D VNAMELEN(dentry); ASSERT(!S_ISDIR(sip->i_d.di_mode)); if (XFS_FORCED_SHUTDOWN(mp)) @@ -2499,7 +2490,7 @@ xfs_link( error =3D XFS_SEND_NAMESP(mp, DM_EVENT_LINK, tdp, DM_RIGHT_NULL, sip, DM_RIGHT_NULL, - target_name, NULL, 0, 0, 0); + target_name->name, NULL, 0, 0, 0); if (error) return error; } @@ -2514,7 +2505,7 @@ xfs_link( tp =3D xfs_trans_alloc(mp, XFS_TRANS_LINK); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - resblks =3D XFS_LINK_SPACE_RES(mp, target_namelen); + resblks =3D XFS_LINK_SPACE_RES(mp, target_name->len); error =3D xfs_trans_reserve(tp, resblks, XFS_LINK_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_LINK_LOG_COUNT); if (error =3D=3D ENOSPC) { @@ -2567,12 +2558,12 @@ xfs_link( } if (resblks =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, tdp, target_name, target_namelen))) + (error =3D xfs_dir_canenter(tp, tdp, target_name))) goto error_return; XFS_BMAP_INIT(&free_list, &first_block); - error =3D xfs_dir_createname(tp, tdp, target_name, target_namelen, + error =3D xfs_dir_createname(tp, tdp, target_name, sip->i_ino, &first_block, &free_list, resblks); if (error) @@ -2610,7 +2601,7 @@ std_return: (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTLINK, tdp, DM_RIGHT_NULL, sip, DM_RIGHT_NULL, - target_name, NULL, 0, error, 0); + target_name->name, NULL, 0, error, 0); } return error; @@ -2627,13 +2618,11 @@ std_return: int xfs_mkdir( xfs_inode_t *dp, - bhv_vname_t *dentry, + xfs_name_t *dir_name, mode_t mode, xfs_inode_t **ipp, cred_t *credp) { - char *dir_name =3D VNAME(dentry); - int dir_namelen =3D VNAMELEN(dentry); xfs_mount_t *mp =3D dp->i_mount; xfs_inode_t *cdp; /* inode of created dir */ xfs_trans_t *tp; @@ -2657,7 +2646,7 @@ xfs_mkdir( if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_CREATE, dp, DM_RIGHT_NULL, NULL, - DM_RIGHT_NULL, dir_name, NULL, + DM_RIGHT_NULL, dir_name->name, NULL, mode, 0, 0); if (error) return error; @@ -2686,7 +2675,7 @@ xfs_mkdir( tp =3D xfs_trans_alloc(mp, XFS_TRANS_MKDIR); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - resblks =3D XFS_MKDIR_SPACE_RES(mp, dir_namelen); + resblks =3D XFS_MKDIR_SPACE_RES(mp, dir_name->len); error =3D xfs_trans_reserve(tp, resblks, XFS_MKDIR_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_MKDIR_LOG_COUNT); if (error =3D=3D ENOSPC) { @@ -2719,7 +2708,7 @@ xfs_mkdir( goto error_return; if (resblks =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, dp, dir_name, dir_namelen))) + (error =3D xfs_dir_canenter(tp, dp, dir_name))) goto error_return; /* * create the directory inode. @@ -2748,7 +2737,7 @@ xfs_mkdir( XFS_BMAP_INIT(&free_list, &first_block); - error =3D xfs_dir_createname(tp, dp, dir_name, dir_namelen, cdp->i_ino, + error =3D xfs_dir_createname(tp, dp, dir_name, cdp->i_ino, &first_block, &free_list, resblks ? resblks - XFS_IALLOC_SPACE_RES(mp) : 0); if (error) { @@ -2815,7 +2804,7 @@ std_return: dp, DM_RIGHT_NULL, created ? cdp : NULL, DM_RIGHT_NULL, - dir_name, NULL, + dir_name->name, NULL, mode, error, 0); } return error; @@ -2839,13 +2828,11 @@ std_return: int xfs_rmdir( xfs_inode_t *dp, - bhv_vname_t *dentry) + xfs_name_t *name, + xfs_inode_t *cdp) { bhv_vnode_t *dir_vp =3D XFS_ITOV(dp); - char *name =3D VNAME(dentry); - int namelen =3D VNAMELEN(dentry); xfs_mount_t *mp =3D dp->i_mount; - xfs_inode_t *cdp =3D VNAME_TO_INODE(dentry); xfs_trans_t *tp; int error; xfs_bmap_free_t free_list; @@ -2863,8 +2850,8 @@ xfs_rmdir( if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, DM_RIGHT_NULL, - NULL, DM_RIGHT_NULL, - name, NULL, cdp->i_d.di_mode, 0, 0); + NULL, DM_RIGHT_NULL, name->name, + NULL, cdp->i_d.di_mode, 0, 0); if (error) return XFS_ERROR(error); } @@ -2958,7 +2945,7 @@ xfs_rmdir( goto error_return; } - error =3D xfs_dir_removename(tp, dp, name, namelen, cdp->i_ino, + error =3D xfs_dir_removename(tp, dp, name, cdp->i_ino, &first_block, &free_list, resblks); if (error) goto error1; @@ -3038,7 +3025,7 @@ xfs_rmdir( (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - name, NULL, cdp->i_d.di_mode, + name->name, NULL, cdp->i_d.di_mode, error, 0); } return error; @@ -3056,7 +3043,7 @@ xfs_rmdir( int xfs_symlink( xfs_inode_t *dp, - bhv_vname_t *dentry, + xfs_name_t *link_name, char *target_path, mode_t mode, xfs_inode_t **ipp, @@ -3084,8 +3071,6 @@ xfs_symlink( xfs_prid_t prid; struct xfs_dquot *udqp, *gdqp; uint resblks; - char *link_name =3D VNAME(dentry); - int link_namelen; *ipp =3D NULL; error =3D 0; @@ -3097,8 +3082,6 @@ xfs_symlink( if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); - link_namelen =3D VNAMELEN(dentry); - /* * Check component lengths of the target path name. */ @@ -3134,7 +3117,7 @@ xfs_symlink( if (DM_EVENT_ENABLED(dp, DM_EVENT_SYMLINK)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_SYMLINK, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - link_name, target_path, 0, 0, 0); + link_name->name, target_path, 0, 0, 0); if (error) return error; } @@ -3166,7 +3149,7 @@ xfs_symlink( fs_blocks =3D 0; else fs_blocks =3D XFS_B_TO_FSB(mp, pathlen); - resblks =3D XFS_SYMLINK_SPACE_RES(mp, link_namelen, fs_blocks); + resblks =3D XFS_SYMLINK_SPACE_RES(mp, link_name->len, fs_blocks); error =3D xfs_trans_reserve(tp, resblks, XFS_SYMLINK_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_SYMLINK_LOG_COUNT); if (error =3D=3D ENOSPC && fs_blocks =3D=3D 0) { @@ -3201,7 +3184,7 @@ xfs_symlink( * Check for ability to enter directory entry, if no space reserved. */ if (resblks =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, dp, link_name, link_namelen))) + (error =3D xfs_dir_canenter(tp, dp, link_name))) goto error_return; /* * Initialize the bmap freelist prior to calling either @@ -3293,7 +3276,7 @@ xfs_symlink( /* * Create the directory entry for the symlink. */ - error =3D xfs_dir_createname(tp, dp, link_name, link_namelen, ip->i_ino, + error =3D xfs_dir_createname(tp, dp, link_name, ip->i_ino, &first_block, &free_list, resblks); if (error) goto error1; @@ -3338,8 +3321,8 @@ std_return: (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTSYMLINK, dp, DM_RIGHT_NULL, error ? NULL : ip, - DM_RIGHT_NULL, link_name, target_path, - 0, error, 0); + DM_RIGHT_NULL, link_name->name, + target_path, 0, error, 0); } if (!error) Index: kern_ci/fs/xfs/xfs_vnodeops.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_vnodeops.h +++ kern_ci/fs/xfs/xfs_vnodeops.h @@ -12,7 +12,7 @@ struct pipe_inode_info; struct uio; struct xfs_inode; struct xfs_iomap; - +struct xfs_name; int xfs_open(struct xfs_inode *ip); int xfs_getattr(struct xfs_inode *ip, struct bhv_vattr *vap, int flags); @@ -23,19 +23,21 @@ int xfs_fsync(struct xfs_inode *ip, int xfs_off_t stop); int xfs_release(struct xfs_inode *ip); int xfs_inactive(struct xfs_inode *ip); -int xfs_lookup(struct xfs_inode *dp, bhv_vname_t *dentry, +int xfs_lookup(struct xfs_inode *dp, struct xfs_name *name, struct xfs_inode **ipp); -int xfs_create(struct xfs_inode *dp, bhv_vname_t *dentry, mode_t mode, +int xfs_create(struct xfs_inode *dp, struct xfs_name *name, mode_t mode, xfs_dev_t rdev, struct xfs_inode **ipp, struct cred *credp); -int xfs_remove(struct xfs_inode *dp, bhv_vname_t *dentry); +int xfs_remove(struct xfs_inode *dp, struct xfs_name *name, + struct xfs_inode *ip); int xfs_link(struct xfs_inode *tdp, struct xfs_inode *sip, - bhv_vname_t *dentry); -int xfs_mkdir(struct xfs_inode *dp, bhv_vname_t *dentry, + struct xfs_name *target_name); +int xfs_mkdir(struct xfs_inode *dp, struct xfs_name *dir_name, mode_t mode, struct xfs_inode **ipp, struct cred *credp); -int xfs_rmdir(struct xfs_inode *dp, bhv_vname_t *dentry); +int xfs_rmdir(struct xfs_inode *dp, struct xfs_name *name, + struct xfs_inode *cdp); int xfs_readdir(struct xfs_inode *dp, void *dirent, size_t bufsize, xfs_off_t *offset, filldir_t filldir); -int xfs_symlink(struct xfs_inode *dp, bhv_vname_t *dentry, +int xfs_symlink(struct xfs_inode *dp, struct xfs_name *link_name, char *target_path, mode_t mode, struct xfs_inode **ipp, struct cred *credp); int xfs_inode_flush(struct xfs_inode *ip, int flags); @@ -44,8 +46,9 @@ int xfs_reclaim(struct xfs_inode *ip); int xfs_change_file_space(struct xfs_inode *ip, int cmd, xfs_flock64_t *bf, xfs_off_t offset, struct cred *credp, int attr_flags); -int xfs_rename(struct xfs_inode *src_dp, bhv_vname_t *src_vname, - struct xfs_inode *target_dp, bhv_vname_t *target_vname); +int xfs_rename(struct xfs_inode *src_dp, struct xfs_name *src_name, + struct xfs_inode *src_ip, struct xfs_inode *target_dp, + struct xfs_name *target_name); int xfs_attr_get(struct xfs_inode *ip, const char *name, char *value, int *valuelenp, int flags, cred_t *cred); int xfs_attr_set(struct xfs_inode *dp, const char *name, char *value, ------------PNYoZ3ZdOW1QI4qtNDrlw5 Content-Disposition: attachment; filename=remove_bhv_vname.patch Content-Type: text/x-patch; name=remove_bhv_vname.patch Content-Transfer-Encoding: Quoted-Printable --- fs/xfs/dmapi/xfs_dm.c | 8 +-- fs/xfs/linux-2.6/xfs_export.c | 5 -- fs/xfs/linux-2.6/xfs_iops.c | 51 ++++++++++++++++------ fs/xfs/linux-2.6/xfs_vnode.h | 8 --- fs/xfs/xfs_dir2.c | 46 +++++++++---------- fs/xfs/xfs_dir2.h | 20 ++++++-- fs/xfs/xfs_mount.h | 4 - fs/xfs/xfs_rename.c | 54 ++++++++++------------- fs/xfs/xfs_utils.c | 4 - fs/xfs/xfs_utils.h | 2=20 fs/xfs/xfs_vnodeops.c | 97 +++++++++++++++++--------------------= ----- fs/xfs/xfs_vnodeops.h | 23 +++++---- 12 files changed, 162 insertions(+), 160 deletions(-) Index: kern_ci/fs/xfs/dmapi/xfs_dm.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/dmapi/xfs_dm.c +++ kern_ci/fs/xfs/dmapi/xfs_dm.c @@ -245,7 +245,7 @@ xfs_copyin_attrname( size_t len; =20 strcpy(to->dan_chars, dmattr_prefix); -=20=20=20=20=20=20=20=20 + len =3D strnlen_user((char __user *)from, DM_ATTR_NAME_SIZE); if (len =3D=3D 0) error =3D EFAULT; @@ -3172,8 +3172,8 @@ xfs_dm_send_namesp_event( dm_right_t vp1_right, xfs_inode_t *ip2, dm_right_t vp2_right, - char *name1, - char *name2, + const char *name1, + const char *name2, mode_t mode, int retcode, int flags) @@ -3182,7 +3182,7 @@ xfs_dm_send_namesp_event( return -dm_send_namesp_event(event, mp ? mp->m_super : NULL, ip1->i_vnode, vp1_right, ip2 ? ip2->i_vnode : NULL, vp2_right, - name1, name2, + (char *)name1, (char *)name2, mode, retcode, flags); } =20 Index: kern_ci/fs/xfs/linux-2.6/xfs_export.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_export.c +++ kern_ci/fs/xfs/linux-2.6/xfs_export.c @@ -22,6 +22,7 @@ #include "xfs_trans.h" #include "xfs_sb.h" #include "xfs_ag.h" +#include "xfs_dir2.h" #include "xfs_dmapi.h" #include "xfs_mount.h" #include "xfs_export.h" @@ -30,8 +31,6 @@ #include "xfs_inode.h" #include "xfs_vfsops.h" =20 -static struct dentry dotdot =3D { .d_name.name =3D "..", .d_name.len =3D 2= , }; - /* * Note that we only accept fileids which are long enough rather than allow * the parent generation number to default to zero. XFS considers zero a @@ -216,7 +215,7 @@ xfs_fs_get_parent( struct xfs_inode *cip; struct dentry *parent; =20 - error =3D xfs_lookup(XFS_I(child->d_inode), &dotdot, &cip); + error =3D xfs_lookup(XFS_I(child->d_inode), &xfs_name_dotdot, &cip); if (unlikely(error)) return ERR_PTR(-error); =20 Index: kern_ci/fs/xfs/linux-2.6/xfs_iops.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_iops.c +++ kern_ci/fs/xfs/linux-2.6/xfs_iops.c @@ -239,6 +239,16 @@ xfs_init_security( return error; } =20 +static inline struct xfs_name * +xfs_dentry_name( + struct xfs_name *namep, + struct dentry *dentry) +{ + namep->name =3D dentry->d_name.name; + namep->len =3D dentry->d_name.len; + return namep; +} + STATIC void xfs_cleanup_inode( struct inode *dir, @@ -246,20 +256,19 @@ xfs_cleanup_inode( struct dentry *dentry, int mode) { - struct dentry teardown =3D {}; + struct xfs_name name; =20 /* Oh, the horror. * If we can't add the ACL or we fail in * xfs_init_security we must back out. * ENOSPC can hit here, among other things. */ - teardown.d_inode =3D inode; - teardown.d_name =3D dentry->d_name; + xfs_dentry_name(&name, dentry); =20 if (S_ISDIR(mode)) - xfs_rmdir(XFS_I(dir), &teardown); + xfs_rmdir(XFS_I(dir), &name, XFS_I(inode)); else - xfs_remove(XFS_I(dir), &teardown); + xfs_remove(XFS_I(dir), &name, XFS_I(inode)); iput(inode); } =20 @@ -273,6 +282,7 @@ xfs_vn_mknod( struct inode *inode; struct xfs_inode *ip =3D NULL; xfs_acl_t *default_acl =3D NULL; + struct xfs_name name; attrexists_t test_default_acl =3D _ACL_DEFAULT_EXISTS; int error; =20 @@ -293,6 +303,8 @@ xfs_vn_mknod( } } =20 + xfs_dentry_name(&name, dentry); + if (IS_POSIXACL(dir) && !default_acl) mode &=3D ~current->fs->umask; =20 @@ -303,10 +315,10 @@ xfs_vn_mknod( case S_IFSOCK: rdev =3D sysv_encode_dev(rdev); case S_IFREG: - error =3D xfs_create(XFS_I(dir), dentry, mode, rdev, &ip, NULL); + error =3D xfs_create(XFS_I(dir), &name, mode, rdev, &ip, NULL); break; case S_IFDIR: - error =3D xfs_mkdir(XFS_I(dir), dentry, mode, &ip, NULL); + error =3D xfs_mkdir(XFS_I(dir), &name, mode, &ip, NULL); break; default: error =3D EINVAL; @@ -371,12 +383,13 @@ xfs_vn_lookup( struct nameidata *nd) { struct xfs_inode *cip; + struct xfs_name name; int error; =20 if (dentry->d_name.len >=3D MAXNAMELEN) return ERR_PTR(-ENAMETOOLONG); =20 - error =3D xfs_lookup(XFS_I(dir), dentry, &cip); + error =3D xfs_lookup(XFS_I(dir), xfs_dentry_name(&name, dentry), &cip); if (unlikely(error)) { if (unlikely(error !=3D ENOENT)) return ERR_PTR(-error); @@ -394,12 +407,14 @@ xfs_vn_link( struct dentry *dentry) { struct inode *inode; /* inode of guy being linked to */ + struct xfs_name name; int error; =20 inode =3D old_dentry->d_inode; =20 igrab(inode); - error =3D xfs_link(XFS_I(dir), XFS_I(inode), dentry); + error =3D xfs_link(XFS_I(dir), XFS_I(inode), + xfs_dentry_name(&name, dentry)); if (unlikely(error)) { iput(inode); return -error; @@ -417,11 +432,13 @@ xfs_vn_unlink( struct dentry *dentry) { struct inode *inode; + struct xfs_name name; int error; =20 inode =3D dentry->d_inode; =20 - error =3D xfs_remove(XFS_I(dir), dentry); + error =3D xfs_remove(XFS_I(dir), xfs_dentry_name(&name, dentry), + XFS_I(inode)); if (likely(!error)) { xfs_validate_fields(dir); /* size needs update */ xfs_validate_fields(inode); @@ -437,14 +454,15 @@ xfs_vn_symlink( { struct inode *inode; struct xfs_inode *cip =3D NULL; + struct xfs_name name; int error; mode_t mode; =20 mode =3D S_IFLNK | (irix_symlink_mode ? 0777 & ~current->fs->umask : S_IRWXUGO); =20 - error =3D xfs_symlink(XFS_I(dir), dentry, (char *)symname, mode, - &cip, NULL); + error =3D xfs_symlink(XFS_I(dir), xfs_dentry_name(&name, dentry), + (char *)symname, mode, &cip, NULL); if (unlikely(error)) goto out; =20 @@ -471,9 +489,11 @@ xfs_vn_rmdir( struct dentry *dentry) { struct inode *inode =3D dentry->d_inode; + struct xfs_name name; int error; =20 - error =3D xfs_rmdir(XFS_I(dir), dentry); + error =3D xfs_rmdir(XFS_I(dir), xfs_dentry_name(&name, dentry), + XFS_I(inode)); if (likely(!error)) { xfs_validate_fields(inode); xfs_validate_fields(dir); @@ -489,9 +509,12 @@ xfs_vn_rename( struct dentry *ndentry) { struct inode *new_inode =3D ndentry->d_inode; + struct xfs_name oname, nname; int error; =20 - error =3D xfs_rename(XFS_I(odir), odentry, XFS_I(ndir), ndentry); + error =3D xfs_rename(XFS_I(odir), xfs_dentry_name(&oname, odentry), + XFS_I(odentry->d_inode), XFS_I(ndir), + xfs_dentry_name(&nname, ndentry)); if (likely(!error)) { if (new_inode) xfs_validate_fields(new_inode); Index: kern_ci/fs/xfs/linux-2.6/xfs_vnode.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_vnode.h +++ kern_ci/fs/xfs/linux-2.6/xfs_vnode.h @@ -23,7 +23,6 @@ struct bhv_vattr; struct xfs_iomap; struct attrlist_cursor_kern; =20 -typedef struct dentry bhv_vname_t; typedef __u64 bhv_vnumber_t; typedef struct inode bhv_vnode_t; =20 @@ -211,13 +210,6 @@ static inline bhv_vnode_t *vn_grab(bhv_v } =20 /* - * Vname handling macros. - */ -#define VNAME(dentry) ((char *) (dentry)->d_name.name) -#define VNAMELEN(dentry) ((dentry)->d_name.len) -#define VNAME_TO_INODE(dentry) (XFS_I((dentry)->d_inode)) - -/* * Dealing with bad inodes */ static inline int VN_BAD(bhv_vnode_t *vp) Index: kern_ci/fs/xfs/xfs_dir2.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -44,6 +44,7 @@ #include "xfs_error.h" #include "xfs_vnodeops.h" =20 +xfs_name_t xfs_name_dotdot =3D {"..", 2}; =20 void xfs_dir_mount( @@ -146,8 +147,7 @@ int xfs_dir_createname( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, + xfs_name_t *name, xfs_ino_t inum, /* new entry inode number */ xfs_fsblock_t *first, /* bmap's firstblock */ xfs_bmap_free_t *flist, /* bmap's freeblock list */ @@ -162,9 +162,9 @@ xfs_dir_createname( return rval; XFS_STATS_INC(xs_dir_create); =20 - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D inum; args.dp =3D dp; args.firstblock =3D first; @@ -197,8 +197,7 @@ int xfs_dir_lookup( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, + xfs_name_t *name, xfs_ino_t *inum) /* out: inode number */ { xfs_da_args_t args; @@ -208,9 +207,9 @@ xfs_dir_lookup( ASSERT((dp->i_d.di_mode & S_IFMT) =3D=3D S_IFDIR); XFS_STATS_INC(xs_dir_lookup); =20 - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D 0; args.dp =3D dp; args.firstblock =3D NULL; @@ -247,8 +246,7 @@ int xfs_dir_removename( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, + xfs_name_t *name, xfs_ino_t ino, xfs_fsblock_t *first, /* bmap's firstblock */ xfs_bmap_free_t *flist, /* bmap's freeblock list */ @@ -261,9 +259,9 @@ xfs_dir_removename( ASSERT((dp->i_d.di_mode & S_IFMT) =3D=3D S_IFDIR); XFS_STATS_INC(xs_dir_remove); =20 - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D ino; args.dp =3D dp; args.firstblock =3D first; @@ -329,8 +327,7 @@ int xfs_dir_replace( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, /* name of entry to replace */ - int namelen, + xfs_name_t *name, /* name of entry to replace */ xfs_ino_t inum, /* new inode number */ xfs_fsblock_t *first, /* bmap's firstblock */ xfs_bmap_free_t *flist, /* bmap's freeblock list */ @@ -345,9 +342,9 @@ xfs_dir_replace( if ((rval =3D xfs_dir_ino_validate(tp->t_mountp, inum))) return rval; =20 - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D inum; args.dp =3D dp; args.firstblock =3D first; @@ -379,8 +376,7 @@ int xfs_dir_canenter( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, /* name of entry to add */ - int namelen) + xfs_name_t *name) /* name of entry to add */ { xfs_da_args_t args; int rval; @@ -388,9 +384,9 @@ xfs_dir_canenter( =20 ASSERT((dp->i_d.di_mode & S_IFMT) =3D=3D S_IFDIR); =20 - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D 0; args.dp =3D dp; args.firstblock =3D NULL; Index: kern_ci/fs/xfs/xfs_dir2.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_dir2.h +++ kern_ci/fs/xfs/xfs_dir2.h @@ -60,6 +60,16 @@ typedef __uint32_t xfs_dir2_db_t; typedef xfs_off_t xfs_dir2_off_t; =20 /* + * Counted string for file names. + */ +typedef struct xfs_name { + const uchar_t *name; + int len; +} xfs_name_t; + +extern xfs_name_t xfs_name_dotdot; + +/* * Generic directory interface routines */ extern void xfs_dir_startup(void); @@ -68,21 +78,21 @@ extern int xfs_dir_isempty(struct xfs_in extern int xfs_dir_init(struct xfs_trans *tp, struct xfs_inode *dp, struct xfs_inode *pdp); extern int xfs_dir_createname(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t inum, + xfs_name_t *name, xfs_ino_t inum, xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_lookup(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t *inum); + xfs_name_t *name, xfs_ino_t *inum); extern int xfs_dir_removename(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t ino, + xfs_name_t *name, xfs_ino_t ino, xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_replace(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t inum, + xfs_name_t *name, xfs_ino_t inum, xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_canenter(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen); + xfs_name_t *name); extern int xfs_dir_ino_validate(struct xfs_mount *mp, xfs_ino_t ino); =20 /* Index: kern_ci/fs/xfs/xfs_mount.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_mount.h +++ kern_ci/fs/xfs/xfs_mount.h @@ -73,7 +73,7 @@ typedef int (*xfs_send_destroy_t)(struct typedef int (*xfs_send_namesp_t)(dm_eventtype_t, struct xfs_mount *, struct xfs_inode *, dm_right_t, struct xfs_inode *, dm_right_t, - char *, char *, mode_t, int, int); + const char *, const char *, mode_t, int, int); typedef int (*xfs_send_mount_t)(struct xfs_mount *, dm_right_t, char *, char *); typedef void (*xfs_send_unmount_t)(struct xfs_mount *, struct xfs_inode *, @@ -401,7 +401,7 @@ typedef struct xfs_mount { =20 /* * Allow large block sizes to be reported to userspace programs if the - * "largeio" mount option is used.=20 + * "largeio" mount option is used. * * If compatibility mode is specified, simply return the basic unit of cac= hing * so that we don't get inefficient read/modify/write I/O from user apps. Index: kern_ci/fs/xfs/xfs_rename.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_rename.c +++ kern_ci/fs/xfs/xfs_rename.c @@ -83,17 +83,16 @@ int xfs_rename_skip, xfs_rename_nskip; */ STATIC int xfs_lock_for_rename( - xfs_inode_t *dp1, /* old (source) directory inode */ - xfs_inode_t *dp2, /* new (target) directory inode */ - bhv_vname_t *vname1,/* old entry name */ - bhv_vname_t *vname2,/* new entry name */ - xfs_inode_t **ipp1, /* inode of old entry */ - xfs_inode_t **ipp2, /* inode of new entry, if it + xfs_inode_t *dp1, /* in: old (source) directory inode */ + xfs_inode_t *dp2, /* in: new (target) directory inode */ + xfs_name_t *name2, /* in: new entry name */ + xfs_inode_t **ipp1, /* in/out: inode of old entry */ + xfs_inode_t **ipp2, /* out: inode of new entry, if it already exists, NULL otherwise. */ - xfs_inode_t **i_tab,/* array of inode returned, sorted */ - int *num_inodes) /* number of inodes in array */ + xfs_inode_t **i_tab,/* out: array of inode returned, sorted */ + int *num_inodes) /* out: number of inodes in array */ { - xfs_inode_t *ip1 =3D VNAME_TO_INODE(vname1); + xfs_inode_t *ip1; xfs_inode_t *ip2, *temp; xfs_ino_t inum1, inum2; int error; @@ -101,6 +100,7 @@ xfs_lock_for_rename( uint lock_mode; int diff_dirs =3D (dp1 !=3D dp2); =20 + ip1 =3D *ipp1; ip2 =3D NULL; =20 /* @@ -125,7 +125,7 @@ xfs_lock_for_rename( lock_mode =3D xfs_ilock_map_shared(dp2); } =20 - error =3D xfs_dir_lookup_int(dp2, lock_mode, vname2, &inum2, &ip2); + error =3D xfs_dir_lookup_int(dp2, lock_mode, name2, &inum2, &ip2); if (error =3D=3D ENOENT) { /* target does not need to exist. */ inum2 =3D 0; } else if (error) { @@ -218,12 +218,13 @@ xfs_lock_for_rename( int xfs_rename( xfs_inode_t *src_dp, - bhv_vname_t *src_vname, + xfs_name_t *src_name, + xfs_inode_t *src_ip, xfs_inode_t *target_dp, - bhv_vname_t *target_vname) + xfs_name_t *target_name) { xfs_trans_t *tp; - xfs_inode_t *src_ip, *target_ip; + xfs_inode_t *target_ip; xfs_mount_t *mp =3D src_dp->i_mount; int new_parent; /* moving to a new dir */ int src_is_directory; /* src_name is a directory */ @@ -237,10 +238,6 @@ xfs_rename( int spaceres; int target_link_zero =3D 0; int num_inodes; - char *src_name =3D VNAME(src_vname); - char *target_name =3D VNAME(target_vname); - int src_namelen =3D VNAMELEN(src_vname); - int target_namelen =3D VNAMELEN(target_vname); =20 xfs_itrace_entry(src_dp); xfs_itrace_entry(target_dp); @@ -250,7 +247,7 @@ xfs_rename( error =3D XFS_SEND_NAMESP(mp, DM_EVENT_RENAME, src_dp, DM_RIGHT_NULL, target_dp, DM_RIGHT_NULL, - src_name, target_name, + src_name->name, target_name->name, 0, 0, 0); if (error) { return error; @@ -267,9 +264,8 @@ xfs_rename( * does not exist in the source directory. */ tp =3D NULL; - error =3D xfs_lock_for_rename(src_dp, target_dp, src_vname, - target_vname, &src_ip, &target_ip, inodes, - &num_inodes); + error =3D xfs_lock_for_rename(src_dp, target_dp, target_name, + &src_ip, &target_ip, inodes, &num_inodes); =20 if (error) { /* @@ -316,7 +312,7 @@ xfs_rename( XFS_BMAP_INIT(&free_list, &first_block); tp =3D xfs_trans_alloc(mp, XFS_TRANS_RENAME); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - spaceres =3D XFS_RENAME_SPACE_RES(mp, target_namelen); + spaceres =3D XFS_RENAME_SPACE_RES(mp, target_name->len); error =3D xfs_trans_reserve(tp, spaceres, XFS_RENAME_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_RENAME_LOG_COUNT); if (error =3D=3D ENOSPC) { @@ -375,8 +371,7 @@ xfs_rename( * fit before actually inserting it. */ if (spaceres =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, target_dp, target_name, - target_namelen))) + (error =3D xfs_dir_canenter(tp, target_dp, target_name))) goto error_return; /* * If target does not exist and the rename crosses @@ -384,7 +379,7 @@ xfs_rename( * to account for the ".." reference from the new entry. */ error =3D xfs_dir_createname(tp, target_dp, target_name, - target_namelen, src_ip->i_ino, + src_ip->i_ino, &first_block, &free_list, spaceres); if (error =3D=3D ENOSPC) goto error_return; @@ -424,7 +419,7 @@ xfs_rename( * name at the destination directory, remove it first. */ error =3D xfs_dir_replace(tp, target_dp, target_name, - target_namelen, src_ip->i_ino, + src_ip->i_ino, &first_block, &free_list, spaceres); if (error) goto abort_return; @@ -461,7 +456,8 @@ xfs_rename( * Rewrite the ".." entry to point to the new * directory. */ - error =3D xfs_dir_replace(tp, src_ip, "..", 2, target_dp->i_ino, + error =3D xfs_dir_replace(tp, src_ip, &xfs_name_dotdot, + target_dp->i_ino, &first_block, &free_list, spaceres); ASSERT(error !=3D EEXIST); if (error) @@ -497,7 +493,7 @@ xfs_rename( goto abort_return; } =20 - error =3D xfs_dir_removename(tp, src_dp, src_name, src_namelen, + error =3D xfs_dir_removename(tp, src_dp, src_name, src_ip->i_ino, &first_block, &free_list, spaceres); if (error) goto abort_return; @@ -583,7 +579,7 @@ std_return: (void) XFS_SEND_NAMESP (mp, DM_EVENT_POSTRENAME, src_dp, DM_RIGHT_NULL, target_dp, DM_RIGHT_NULL, - src_name, target_name, + src_name->name, target_name->name, 0, error, 0); } return error; Index: kern_ci/fs/xfs/xfs_utils.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_utils.c +++ kern_ci/fs/xfs/xfs_utils.c @@ -45,7 +45,7 @@ int xfs_dir_lookup_int( xfs_inode_t *dp, uint lock_mode, - bhv_vname_t *dentry, + xfs_name_t *name, xfs_ino_t *inum, xfs_inode_t **ipp) { @@ -53,7 +53,7 @@ xfs_dir_lookup_int( =20 xfs_itrace_entry(dp); =20 - error =3D xfs_dir_lookup(NULL, dp, VNAME(dentry), VNAMELEN(dentry), inum); + error =3D xfs_dir_lookup(NULL, dp, name, inum); if (!error) { /* * Unlock the directory. We do this because we can't Index: kern_ci/fs/xfs/xfs_utils.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_utils.h +++ kern_ci/fs/xfs/xfs_utils.h @@ -21,7 +21,7 @@ #define IRELE(ip) VN_RELE(XFS_ITOV(ip)) #define IHOLD(ip) VN_HOLD(XFS_ITOV(ip)) =20 -extern int xfs_dir_lookup_int (xfs_inode_t *, uint, bhv_vname_t *, xfs_ino= _t *, +extern int xfs_dir_lookup_int (xfs_inode_t *, uint, xfs_name_t *, xfs_ino_= t *, xfs_inode_t **); extern int xfs_truncate_file (xfs_mount_t *, xfs_inode_t *); extern int xfs_dir_ialloc (xfs_trans_t **, xfs_inode_t *, mode_t, xfs_nlin= k_t, Index: kern_ci/fs/xfs/xfs_vnodeops.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_vnodeops.c +++ kern_ci/fs/xfs/xfs_vnodeops.c @@ -1762,7 +1762,7 @@ xfs_inactive( int xfs_lookup( xfs_inode_t *dp, - bhv_vname_t *dentry, + xfs_name_t *name, xfs_inode_t **ipp) { xfs_inode_t *ip; @@ -1776,7 +1776,7 @@ xfs_lookup( return XFS_ERROR(EIO); =20 lock_mode =3D xfs_ilock_map_shared(dp); - error =3D xfs_dir_lookup_int(dp, lock_mode, dentry, &e_inum, &ip); + error =3D xfs_dir_lookup_int(dp, lock_mode, name, &e_inum, &ip); if (!error) { *ipp =3D ip; xfs_itrace_ref(ip); @@ -1788,13 +1788,12 @@ xfs_lookup( int xfs_create( xfs_inode_t *dp, - bhv_vname_t *dentry, + xfs_name_t *name, mode_t mode, xfs_dev_t rdev, xfs_inode_t **ipp, cred_t *credp) { - char *name =3D VNAME(dentry); xfs_mount_t *mp =3D dp->i_mount; xfs_inode_t *ip; xfs_trans_t *tp; @@ -1808,17 +1807,14 @@ xfs_create( xfs_prid_t prid; struct xfs_dquot *udqp, *gdqp; uint resblks; - int namelen; =20 ASSERT(!*ipp); xfs_itrace_entry(dp); =20 - namelen =3D VNAMELEN(dentry); - if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_CREATE, dp, DM_RIGHT_NULL, NULL, - DM_RIGHT_NULL, name, NULL, + DM_RIGHT_NULL, name->name, NULL, mode, 0, 0); =20 if (error) @@ -1850,7 +1846,7 @@ xfs_create( =20 tp =3D xfs_trans_alloc(mp, XFS_TRANS_CREATE); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - resblks =3D XFS_CREATE_SPACE_RES(mp, namelen); + resblks =3D XFS_CREATE_SPACE_RES(mp, name->len); /* * Initially assume that the file does not exist and * reserve the resources for that case. If that is not @@ -1883,7 +1879,7 @@ xfs_create( if (error) goto error_return; =20 - if (resblks =3D=3D 0 && (error =3D xfs_dir_canenter(tp, dp, name, namelen= ))) + if (resblks =3D=3D 0 && (error =3D xfs_dir_canenter(tp, dp, name))) goto error_return; error =3D xfs_dir_ialloc(&tp, dp, mode, 1, rdev, credp, prid, resblks > 0, @@ -1913,7 +1909,7 @@ xfs_create( xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL); unlock_dp_on_error =3D B_FALSE; =20 - error =3D xfs_dir_createname(tp, dp, name, namelen, ip->i_ino, + error =3D xfs_dir_createname(tp, dp, name, ip->i_ino, &first_block, &free_list, resblks ? resblks - XFS_IALLOC_SPACE_RES(mp) : 0); if (error) { @@ -1974,7 +1970,7 @@ std_return: (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTCREATE, dp, DM_RIGHT_NULL, *ipp ? ip : NULL, - DM_RIGHT_NULL, name, NULL, + DM_RIGHT_NULL, name->name, NULL, mode, error, 0); } return error; @@ -2266,12 +2262,10 @@ int remove_which_error_return =3D 0; int xfs_remove( xfs_inode_t *dp, - bhv_vname_t *dentry) + xfs_name_t *name, + xfs_inode_t *ip) { - char *name =3D VNAME(dentry); xfs_mount_t *mp =3D dp->i_mount; - xfs_inode_t *ip =3D VNAME_TO_INODE(dentry); - int namelen =3D VNAMELEN(dentry); xfs_trans_t *tp =3D NULL; int error =3D 0; xfs_bmap_free_t free_list; @@ -2287,9 +2281,9 @@ xfs_remove( return XFS_ERROR(EIO); =20 if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { - error =3D XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, - DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - name, NULL, ip->i_d.di_mode, 0, 0); + error =3D XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, DM_RIGHT_NULL, + NULL, DM_RIGHT_NULL, name->name, NULL, + ip->i_d.di_mode, 0, 0); if (error) return error; } @@ -2374,7 +2368,7 @@ xfs_remove( * Entry must exist since we did a lookup in xfs_lock_dir_and_entry. */ XFS_BMAP_INIT(&free_list, &first_block); - error =3D xfs_dir_removename(tp, dp, name, namelen, ip->i_ino, + error =3D xfs_dir_removename(tp, dp, name, ip->i_ino, &first_block, &free_list, 0); if (error) { ASSERT(error !=3D ENOENT); @@ -2442,7 +2436,7 @@ xfs_remove( (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - name, NULL, ip->i_d.di_mode, error, 0); + name->name, NULL, ip->i_d.di_mode, error, 0); } return error; =20 @@ -2472,7 +2466,7 @@ int xfs_link( xfs_inode_t *tdp, xfs_inode_t *sip, - bhv_vname_t *dentry) + xfs_name_t *target_name) { xfs_mount_t *mp =3D tdp->i_mount; xfs_trans_t *tp; @@ -2483,13 +2477,10 @@ xfs_link( int cancel_flags; int committed; int resblks; - char *target_name =3D VNAME(dentry); - int target_namelen; =20 xfs_itrace_entry(tdp); xfs_itrace_entry(sip); =20 - target_namelen =3D VNAMELEN(dentry); ASSERT(!S_ISDIR(sip->i_d.di_mode)); =20 if (XFS_FORCED_SHUTDOWN(mp)) @@ -2499,7 +2490,7 @@ xfs_link( error =3D XFS_SEND_NAMESP(mp, DM_EVENT_LINK, tdp, DM_RIGHT_NULL, sip, DM_RIGHT_NULL, - target_name, NULL, 0, 0, 0); + target_name->name, NULL, 0, 0, 0); if (error) return error; } @@ -2514,7 +2505,7 @@ xfs_link( =20 tp =3D xfs_trans_alloc(mp, XFS_TRANS_LINK); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - resblks =3D XFS_LINK_SPACE_RES(mp, target_namelen); + resblks =3D XFS_LINK_SPACE_RES(mp, target_name->len); error =3D xfs_trans_reserve(tp, resblks, XFS_LINK_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_LINK_LOG_COUNT); if (error =3D=3D ENOSPC) { @@ -2567,12 +2558,12 @@ xfs_link( } =20 if (resblks =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, tdp, target_name, target_namelen))) + (error =3D xfs_dir_canenter(tp, tdp, target_name))) goto error_return; =20 XFS_BMAP_INIT(&free_list, &first_block); =20 - error =3D xfs_dir_createname(tp, tdp, target_name, target_namelen, + error =3D xfs_dir_createname(tp, tdp, target_name, sip->i_ino, &first_block, &free_list, resblks); if (error) @@ -2610,7 +2601,7 @@ std_return: (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTLINK, tdp, DM_RIGHT_NULL, sip, DM_RIGHT_NULL, - target_name, NULL, 0, error, 0); + target_name->name, NULL, 0, error, 0); } return error; =20 @@ -2627,13 +2618,11 @@ std_return: int xfs_mkdir( xfs_inode_t *dp, - bhv_vname_t *dentry, + xfs_name_t *dir_name, mode_t mode, xfs_inode_t **ipp, cred_t *credp) { - char *dir_name =3D VNAME(dentry); - int dir_namelen =3D VNAMELEN(dentry); xfs_mount_t *mp =3D dp->i_mount; xfs_inode_t *cdp; /* inode of created dir */ xfs_trans_t *tp; @@ -2657,7 +2646,7 @@ xfs_mkdir( if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_CREATE, dp, DM_RIGHT_NULL, NULL, - DM_RIGHT_NULL, dir_name, NULL, + DM_RIGHT_NULL, dir_name->name, NULL, mode, 0, 0); if (error) return error; @@ -2686,7 +2675,7 @@ xfs_mkdir( =20 tp =3D xfs_trans_alloc(mp, XFS_TRANS_MKDIR); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - resblks =3D XFS_MKDIR_SPACE_RES(mp, dir_namelen); + resblks =3D XFS_MKDIR_SPACE_RES(mp, dir_name->len); error =3D xfs_trans_reserve(tp, resblks, XFS_MKDIR_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_MKDIR_LOG_COUNT); if (error =3D=3D ENOSPC) { @@ -2719,7 +2708,7 @@ xfs_mkdir( goto error_return; =20 if (resblks =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, dp, dir_name, dir_namelen))) + (error =3D xfs_dir_canenter(tp, dp, dir_name))) goto error_return; /* * create the directory inode. @@ -2748,7 +2737,7 @@ xfs_mkdir( =20 XFS_BMAP_INIT(&free_list, &first_block); =20 - error =3D xfs_dir_createname(tp, dp, dir_name, dir_namelen, cdp->i_ino, + error =3D xfs_dir_createname(tp, dp, dir_name, cdp->i_ino, &first_block, &free_list, resblks ? resblks - XFS_IALLOC_SPACE_RES(mp) : 0); if (error) { @@ -2815,7 +2804,7 @@ std_return: dp, DM_RIGHT_NULL, created ? cdp : NULL, DM_RIGHT_NULL, - dir_name, NULL, + dir_name->name, NULL, mode, error, 0); } return error; @@ -2839,13 +2828,11 @@ std_return: int xfs_rmdir( xfs_inode_t *dp, - bhv_vname_t *dentry) + xfs_name_t *name, + xfs_inode_t *cdp) { bhv_vnode_t *dir_vp =3D XFS_ITOV(dp); - char *name =3D VNAME(dentry); - int namelen =3D VNAMELEN(dentry); xfs_mount_t *mp =3D dp->i_mount; - xfs_inode_t *cdp =3D VNAME_TO_INODE(dentry); xfs_trans_t *tp; int error; xfs_bmap_free_t free_list; @@ -2863,8 +2850,8 @@ xfs_rmdir( if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, DM_RIGHT_NULL, - NULL, DM_RIGHT_NULL, - name, NULL, cdp->i_d.di_mode, 0, 0); + NULL, DM_RIGHT_NULL, name->name, + NULL, cdp->i_d.di_mode, 0, 0); if (error) return XFS_ERROR(error); } @@ -2958,7 +2945,7 @@ xfs_rmdir( goto error_return; } =20 - error =3D xfs_dir_removename(tp, dp, name, namelen, cdp->i_ino, + error =3D xfs_dir_removename(tp, dp, name, cdp->i_ino, &first_block, &free_list, resblks); if (error) goto error1; @@ -3038,7 +3025,7 @@ xfs_rmdir( (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - name, NULL, cdp->i_d.di_mode, + name->name, NULL, cdp->i_d.di_mode, error, 0); } return error; @@ -3056,7 +3043,7 @@ xfs_rmdir( int xfs_symlink( xfs_inode_t *dp, - bhv_vname_t *dentry, + xfs_name_t *link_name, char *target_path, mode_t mode, xfs_inode_t **ipp, @@ -3084,8 +3071,6 @@ xfs_symlink( xfs_prid_t prid; struct xfs_dquot *udqp, *gdqp; uint resblks; - char *link_name =3D VNAME(dentry); - int link_namelen; =20 *ipp =3D NULL; error =3D 0; @@ -3097,8 +3082,6 @@ xfs_symlink( if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); =20 - link_namelen =3D VNAMELEN(dentry); - /* * Check component lengths of the target path name. */ @@ -3134,7 +3117,7 @@ xfs_symlink( if (DM_EVENT_ENABLED(dp, DM_EVENT_SYMLINK)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_SYMLINK, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - link_name, target_path, 0, 0, 0); + link_name->name, target_path, 0, 0, 0); if (error) return error; } @@ -3166,7 +3149,7 @@ xfs_symlink( fs_blocks =3D 0; else fs_blocks =3D XFS_B_TO_FSB(mp, pathlen); - resblks =3D XFS_SYMLINK_SPACE_RES(mp, link_namelen, fs_blocks); + resblks =3D XFS_SYMLINK_SPACE_RES(mp, link_name->len, fs_blocks); error =3D xfs_trans_reserve(tp, resblks, XFS_SYMLINK_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_SYMLINK_LOG_COUNT); if (error =3D=3D ENOSPC && fs_blocks =3D=3D 0) { @@ -3201,7 +3184,7 @@ xfs_symlink( * Check for ability to enter directory entry, if no space reserved. */ if (resblks =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, dp, link_name, link_namelen))) + (error =3D xfs_dir_canenter(tp, dp, link_name))) goto error_return; /* * Initialize the bmap freelist prior to calling either @@ -3293,7 +3276,7 @@ xfs_symlink( /* * Create the directory entry for the symlink. */ - error =3D xfs_dir_createname(tp, dp, link_name, link_namelen, ip->i_ino, + error =3D xfs_dir_createname(tp, dp, link_name, ip->i_ino, &first_block, &free_list, resblks); if (error) goto error1; @@ -3338,8 +3321,8 @@ std_return: (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTSYMLINK, dp, DM_RIGHT_NULL, error ? NULL : ip, - DM_RIGHT_NULL, link_name, target_path, - 0, error, 0); + DM_RIGHT_NULL, link_name->name, + target_path, 0, error, 0); } =20 if (!error) Index: kern_ci/fs/xfs/xfs_vnodeops.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_vnodeops.h +++ kern_ci/fs/xfs/xfs_vnodeops.h @@ -12,7 +12,7 @@ struct pipe_inode_info; struct uio; struct xfs_inode; struct xfs_iomap; - +struct xfs_name; =20 int xfs_open(struct xfs_inode *ip); int xfs_getattr(struct xfs_inode *ip, struct bhv_vattr *vap, int flags); @@ -23,19 +23,21 @@ int xfs_fsync(struct xfs_inode *ip, int=20 xfs_off_t stop); int xfs_release(struct xfs_inode *ip); int xfs_inactive(struct xfs_inode *ip); -int xfs_lookup(struct xfs_inode *dp, bhv_vname_t *dentry, +int xfs_lookup(struct xfs_inode *dp, struct xfs_name *name, struct xfs_inode **ipp); -int xfs_create(struct xfs_inode *dp, bhv_vname_t *dentry, mode_t mode, +int xfs_create(struct xfs_inode *dp, struct xfs_name *name, mode_t mode, xfs_dev_t rdev, struct xfs_inode **ipp, struct cred *credp); -int xfs_remove(struct xfs_inode *dp, bhv_vname_t *dentry); +int xfs_remove(struct xfs_inode *dp, struct xfs_name *name, + struct xfs_inode *ip); int xfs_link(struct xfs_inode *tdp, struct xfs_inode *sip, - bhv_vname_t *dentry); -int xfs_mkdir(struct xfs_inode *dp, bhv_vname_t *dentry, + struct xfs_name *target_name); +int xfs_mkdir(struct xfs_inode *dp, struct xfs_name *dir_name, mode_t mode, struct xfs_inode **ipp, struct cred *credp); -int xfs_rmdir(struct xfs_inode *dp, bhv_vname_t *dentry); +int xfs_rmdir(struct xfs_inode *dp, struct xfs_name *name, + struct xfs_inode *cdp); int xfs_readdir(struct xfs_inode *dp, void *dirent, size_t bufsize, xfs_off_t *offset, filldir_t filldir); -int xfs_symlink(struct xfs_inode *dp, bhv_vname_t *dentry, +int xfs_symlink(struct xfs_inode *dp, struct xfs_name *link_name, char *target_path, mode_t mode, struct xfs_inode **ipp, struct cred *credp); int xfs_inode_flush(struct xfs_inode *ip, int flags); @@ -44,8 +46,9 @@ int xfs_reclaim(struct xfs_inode *ip); int xfs_change_file_space(struct xfs_inode *ip, int cmd, xfs_flock64_t *bf, xfs_off_t offset, struct cred *credp, int attr_flags); -int xfs_rename(struct xfs_inode *src_dp, bhv_vname_t *src_vname, - struct xfs_inode *target_dp, bhv_vname_t *target_vname); +int xfs_rename(struct xfs_inode *src_dp, struct xfs_name *src_name, + struct xfs_inode *src_ip, struct xfs_inode *target_dp, + struct xfs_name *target_name); int xfs_attr_get(struct xfs_inode *ip, const char *name, char *value, int *valuelenp, int flags, cred_t *cred); int xfs_attr_set(struct xfs_inode *dp, const char *name, char *value, ------------PNYoZ3ZdOW1QI4qtNDrlw5-- From owner-xfs@oss.sgi.com Mon Apr 7 21:50:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 21:50:08 -0700 (PDT) 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 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 m384nweo005819 for ; Mon, 7 Apr 2008 21:50:00 -0700 X-ASG-Debug-ID: 1207630234-7b1801670000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ext.agami.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BFB3A963791 for ; Mon, 7 Apr 2008 21:50:34 -0700 (PDT) Received: from ext.agami.com (64.221.212.177.ptr.us.xo.net [64.221.212.177]) by cuda.sgi.com with ESMTP id K37pTpQKesyyIFCh for ; Mon, 07 Apr 2008 21:50:34 -0700 (PDT) Received: from agami.com (mail [192.168.168.5]) by ext.agami.com (8.12.5/8.12.5) with ESMTP id m381rwwB015475 for ; Mon, 7 Apr 2008 18:53:58 -0700 Received: from mx1.agami.com (mx1.agami.com [10.123.10.30]) by agami.com (8.12.11/8.12.11) with ESMTP id m381rw8N027773 for ; Mon, 7 Apr 2008 18:53:58 -0700 Received: from [10.123.4.142] ([10.123.4.142]) by mx1.agami.com with Microsoft SMTPSVC(6.0.3790.1830); Mon, 7 Apr 2008 18:54:21 -0700 Message-ID: <47FAD04D.5080308@agami.com> Date: Mon, 07 Apr 2008 18:54:21 -0700 From: Michael Nishimoto User-Agent: Mail/News 1.5.0.4 (X11/20060629) MIME-Version: 1.0 To: XFS Mailing List X-ASG-Orig-Subj: inconsistent xfs log record Subject: inconsistent xfs log record Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 08 Apr 2008 01:54:21.0367 (UTC) FILETIME=[76A3C470:01C8991B] X-Barracuda-Connect: 64.221.212.177.ptr.us.xo.net[64.221.212.177] X-Barracuda-Start-Time: 1207630236 X-Barracuda-Bayes: INNOCENT GLOBAL 0.3170 1.0000 -0.2777 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.18 X-Barracuda-Spam-Status: No, SCORE=-0.18 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47162 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15251 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: miken@agami.com Precedence: bulk X-list: xfs I've just finished analyzing an xfs filesystem which won't recover. An inconsistent log record has 332 log operations but the num_logop field in the record header says 333 log operations. The result is that xfs recovery complains with "bad clientid" because recovery eventually attempts to decode garbage. The log record really has 332 log ops (I counted!). Looking through xlog_write(), I don't see any way that record_cnt can be bumped without also writing out a log operation. Does this issue ring a bell with anyone? Michael From owner-xfs@oss.sgi.com Mon Apr 7 21:51:15 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 21:51:23 -0700 (PDT) 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.0 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 m384pAQ8006478 for ; Mon, 7 Apr 2008 21:51:14 -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 OAA25811; Tue, 8 Apr 2008 14:51:41 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 957F758C4C0F; Tue, 8 Apr 2008 14:51:41 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 980014 - xfsqa 185 shouldn't have uninitialised variables in the golden output Message-Id: <20080408045141.957F758C4C0F@chook.melbourne.sgi.com> Date: Tue, 8 Apr 2008 14:51:41 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15252 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs xfsqa 185 shouldn't have uninitialised variables in the golden output Kill the output of uninitialised values when punching a hole. This prevents the test from passing on just about everything. Date: Tue Apr 8 14:51:19 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/xfs-cmds Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:30762a xfstests/185.out - 1.2 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/185.out.diff?r1=text&tr1=1.2&r2=text&tr2=1.1&f=h xfstests/dmapi/src/suite1/cmd/probe_punch_xfsctl_hole.c - 1.2 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/dmapi/src/suite1/probe_punch_xfsctl_hole.c.diff?r1=text&tr1=1.2&r2=text&tr2=1.1&f=h - remove roffp and rlenp output for punch operations. From owner-xfs@oss.sgi.com Mon Apr 7 22:13:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 22:13:12 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_47 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 m385CvmS009243 for ; Mon, 7 Apr 2008 22:13:01 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA26148; Tue, 8 Apr 2008 15:13:27 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m385DPsT125452296; Tue, 8 Apr 2008 15:13:26 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m385DOG1125609009; Tue, 8 Apr 2008 15:13:24 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 8 Apr 2008 15:13:24 +1000 From: David Chinner To: Barry Naujok Cc: "xfs@oss.sgi.com" , xfs-dev Subject: Re: [REVIEW] cleanup - remove bhv_vname_t Message-ID: <20080408051324.GW108924158@sgi.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15253 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Tue, Apr 08, 2008 at 02:50:17PM +1000, Barry Naujok wrote: > +static inline struct xfs_name * > +xfs_dentry_name( > + struct xfs_name *namep, > + struct dentry *dentry) > +{ > + namep->name = dentry->d_name.name; > + namep->len = dentry->d_name.len; > + return namep; > +} xfs_dentry_to_name() > @@ -246,20 +256,19 @@ xfs_cleanup_inode( > struct dentry *dentry, > int mode) > { > - struct dentry teardown = {}; > + struct xfs_name name; I'd leave the variable name as 'teardown'. ie. + struct xfs_name teardown; > @@ -371,12 +383,13 @@ xfs_vn_lookup( > struct nameidata *nd) > { > struct xfs_inode *cip; > + struct xfs_name name; > int error; > > if (dentry->d_name.len >= MAXNAMELEN) > return ERR_PTR(-ENAMETOOLONG); > > - error = xfs_lookup(XFS_I(dir), dentry, &cip); > + error = xfs_lookup(XFS_I(dir), xfs_dentry_name(&name, dentry), &cip); I'd prefer this to be separate operations: + xfs_dentry_to_name(&name, dentry); + error = xfs_lookup(XFS_I(dir), &name, &cip); that way it's clear that we're passing name down the stack.... Same for all the others.... > @@ -489,9 +509,12 @@ xfs_vn_rename( > struct dentry *ndentry) > { > struct inode *new_inode = ndentry->d_inode; > + struct xfs_name oname, nname; + struct xfs_name oname; + struct xfs_name nname; ...... > - args.hashval = xfs_da_hashname(name, namelen); > + args.name = name->name; > + args.namelen = name->len; > + args.hashval = xfs_da_hashname(name->name, name->len); Seems like future work would be to drive the xfs_name_t further into these leaf functions.... > @@ -83,17 +83,16 @@ int xfs_rename_skip, xfs_rename_nskip; > */ > STATIC int > xfs_lock_for_rename( > - xfs_inode_t *dp1, /* old (source) directory inode */ > - xfs_inode_t *dp2, /* new (target) directory inode */ > - bhv_vname_t *vname1,/* old entry name */ > - bhv_vname_t *vname2,/* new entry name */ > - xfs_inode_t **ipp1, /* inode of old entry */ > - xfs_inode_t **ipp2, /* inode of new entry, if it > + xfs_inode_t *dp1, /* in: old (source) directory inode */ > + xfs_inode_t *dp2, /* in: new (target) directory inode */ > + xfs_name_t *name2, /* in: new entry name */ > + xfs_inode_t **ipp1, /* in/out: inode of old entry */ > + xfs_inode_t **ipp2, /* out: inode of new entry, if it > already exists, NULL otherwise. */ > - xfs_inode_t **i_tab,/* array of inode returned, sorted */ > - int *num_inodes) /* number of inodes in array */ > + xfs_inode_t **i_tab,/* out: array of inode returned, sorted */ > + int *num_inodes) /* out: number of inodes in array */ > { > - xfs_inode_t *ip1 = VNAME_TO_INODE(vname1); > + xfs_inode_t *ip1; > xfs_inode_t *ip2, *temp; > xfs_ino_t inum1, inum2; > int error; > @@ -101,6 +100,7 @@ xfs_lock_for_rename( > uint lock_mode; > int diff_dirs = (dp1 != dp2); > > + ip1 = *ipp1; > ip2 = NULL; ASSERT(ip1); ..... > * Initially assume that the file does not exist and > * reserve the resources for that case. If that is not > @@ -1883,7 +1879,7 @@ xfs_create( > if (error) > goto error_return; > > - if (resblks == 0 && (error = xfs_dir_canenter(tp, dp, name, > namelen))) > + if (resblks == 0 && (error = xfs_dir_canenter(tp, dp, name))) > goto error_return; If you're touching lines like that, you should restructure it at the same time to match accepted style more closely. if (!resblks) { error = xfs_dir_canenter(tp, dp, name); if (error) goto error_return; } > @@ -2567,12 +2558,12 @@ xfs_link( > } > > if (resblks == 0 && > - (error = xfs_dir_canenter(tp, tdp, target_name, target_namelen))) > + (error = xfs_dir_canenter(tp, tdp, target_name))) > goto error_return; Same again. > @@ -2719,7 +2708,7 @@ xfs_mkdir( > goto error_return; > > if (resblks == 0 && > - (error = xfs_dir_canenter(tp, dp, dir_name, dir_namelen))) > + (error = xfs_dir_canenter(tp, dp, dir_name))) > goto error_return; more! > @@ -3201,7 +3184,7 @@ xfs_symlink( > * Check for ability to enter directory entry, if no space reserved. > */ > if (resblks == 0 && > - (error = xfs_dir_canenter(tp, dp, link_name, link_namelen))) > + (error = xfs_dir_canenter(tp, dp, link_name))) > goto error_return; how many times do we do almost the same thing? :P Looks pretty good, otherwise.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 7 22:19:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 22:20:04 -0700 (PDT) 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=BAYES_20,J_CHICKENPOX_45, RCVD_IN_BL_SPAMCOP_NET,RCVD_IN_PSBL 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 m385JuQ0010725 for ; Mon, 7 Apr 2008 22:19:57 -0700 X-ASG-Debug-ID: 1207632034-7e6b02680000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtpauth21.prod.mesa1.secureserver.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id 9E7AD965772 for ; Mon, 7 Apr 2008 22:20:34 -0700 (PDT) Received: from smtpauth21.prod.mesa1.secureserver.net (smtpauth21.prod.mesa1.secureserver.net [64.202.165.38]) by cuda.sgi.com with SMTP id Ua0QEsucdFZIrLCa for ; Mon, 07 Apr 2008 22:20:34 -0700 (PDT) Received: (qmail 30331 invoked from network); 8 Apr 2008 05:20:33 -0000 Received: from unknown (208.51.187.12) by smtpauth21.prod.mesa1.secureserver.net (64.202.165.38) with ESMTP; 08 Apr 2008 05:20:33 -0000 X-ASG-Orig-Subj: Lost+found Subject: Lost+found From: Jeffrey Sandel To: xfs@oss.sgi.com Content-Type: text/plain Date: Mon, 07 Apr 2008 22:20:33 -0700 Message-Id: <1207632033.11530.10.camel@localhost.localdomain> Mime-Version: 1.0 X-Mailer: Evolution 2.12.1 (2.12.1-3.fc8) Content-Transfer-Encoding: 7bit X-Barracuda-Connect: smtpauth21.prod.mesa1.secureserver.net[64.202.165.38] X-Barracuda-Start-Time: 1207632034 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0007 1.0000 -2.0162 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.1, rules version 3.1.47164 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15254 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: webmaster@javainbaja.com Precedence: bulk X-list: xfs Recently I ran xfs_repair due to a firmware upgrade on an unmounted disk. The repair recovered the data but moved it to the lost+found directory. How do I recover file names and ownership? Thanks! Jeffrey Sandel From owner-xfs@oss.sgi.com Mon Apr 7 22:53:05 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 22:53:12 -0700 (PDT) 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 m385r3H3015566 for ; Mon, 7 Apr 2008 22:53:05 -0700 X-ASG-Debug-ID: 1207634021-640401480000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp.getmail.no (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D1C2A75DF69 for ; Mon, 7 Apr 2008 22:53:41 -0700 (PDT) Received: from smtp.getmail.no (smtp.getmail.no [84.208.20.33]) by cuda.sgi.com with ESMTP id HIWtfuTHmUJsgaPp for ; Mon, 07 Apr 2008 22:53:41 -0700 (PDT) Received: from pmxchannel-daemon.no-osl-m323-srv-009-z2.isp.get.no by no-osl-m323-srv-009-z2.isp.get.no (Sun Java System Messaging Server 6.2-7.05 (built Sep 5 2006)) id <0JYZ0070FSDGF000@no-osl-m323-srv-009-z2.isp.get.no> for xfs@oss.sgi.com; Tue, 08 Apr 2008 07:53:40 +0200 (CEST) Received: from smtp.getmail.no ([10.5.16.1]) by no-osl-m323-srv-009-z2.isp.get.no (Sun Java System Messaging Server 6.2-7.05 (built Sep 5 2006)) with ESMTP id <0JYZ00AWNSCPDD90@no-osl-m323-srv-009-z2.isp.get.no> for xfs@oss.sgi.com; Tue, 08 Apr 2008 07:53:13 +0200 (CEST) Received: from localhost ([84.215.109.218]) by no-osl-m323-srv-009-z1.isp.get.no (Sun Java System Messaging Server 6.2-7.05 (built Sep 5 2006)) with ESMTP id <0JYZ002KFSCP8RA0@no-osl-m323-srv-009-z1.isp.get.no> for xfs@oss.sgi.com; Tue, 08 Apr 2008 07:53:13 +0200 (CEST) Received: from thor by localhost with local (Exim 4.69 #1 (Debian)) id 1Jj6ld-0007qI-9W; Tue, 08 Apr 2008 07:53:13 +0200 Date: Tue, 08 Apr 2008 07:53:13 +0200 From: Thor Kristoffersen X-ASG-Orig-Subj: Re: Does XFS prevent disk spindown? Subject: Re: Does XFS prevent disk spindown? In-reply-to: <20080407215855.GE108924158@sgi.com> To: David Chinner Cc: Timothy Shimmin , xfs@oss.sgi.com Message-id: MIME-version: 1.0 Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7BIT References: <20080401003005.GJ103491721@sgi.com> <47F1CF6D.2040103@sandeen.net> <47F9735E.8020900@sgi.com> <20080407215855.GE108924158@sgi.com> User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.1 (gnu/linux) X-Barracuda-Connect: smtp.getmail.no[84.208.20.33] X-Barracuda-Start-Time: 1207634021 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=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47165 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15255 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: thorkr@gmail.com Precedence: bulk X-list: xfs David Chinner writes: >> > What does 'xfs_logprint -t' show in these "idle" states >> > after these writes? >> >> xfs_logprint produces output like the one shown below, so it does indeed >> look like it's writing to the journal. But why should it need to keep >> writing to the journal when there have been no updates to any files on that >> partition recently? > > Are you using lazy-count=1? (i.e. output of 'xfs_info ', please). Looks like I am: meta-data=/dev/sda3 isize=256 agcount=4, agsize=42676171 blks = sectsz=512 attr=2 data = bsize=4096 blocks=170704681, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 log =internal bsize=4096 blocks=32768, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 Is that what's causing it? I have never specified any lazy-count option when I created or mounted the filesystem. I didn't even know it existed. Thor From owner-xfs@oss.sgi.com Mon Apr 7 23:38:23 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 23:38:30 -0700 (PDT) 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_47 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 m386cKKe022988 for ; Mon, 7 Apr 2008 23:38:23 -0700 X-ASG-Debug-ID: 1207636737-526a02a80000-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 279C69669CA for ; Mon, 7 Apr 2008 23:38:57 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id apA9M5DO2dSQN4VG for ; Mon, 07 Apr 2008 23:38:57 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jj7TK-0002aP-Oy; Tue, 08 Apr 2008 06:38:22 +0000 Date: Tue, 8 Apr 2008 02:38:22 -0400 From: Christoph Hellwig To: Barry Naujok Cc: "xfs@oss.sgi.com" , xfs-dev X-ASG-Orig-Subj: Re: [REVIEW] cleanup - remove bhv_vname_t Subject: Re: [REVIEW] cleanup - remove bhv_vname_t Message-ID: <20080408063822.GA21876@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.17 (2007-11-01) 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: 1207636738 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.1, rules version 3.1.47170 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15256 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Tue, Apr 08, 2008 at 02:50:17PM +1000, Barry Naujok wrote: > - > + What's this? both lines look empty. > return -dm_send_namesp_event(event, mp ? mp->m_super : NULL, > ip1->i_vnode, vp1_right, > ip2 ? ip2->i_vnode : NULL, vp2_right, > - name1, name2, > + (char *)name1, (char *)name2, please change dm_send_namesp_event to take a const char aswell. > +static inline struct xfs_name * > +xfs_dentry_name( > + struct xfs_name *namep, > + struct dentry *dentry) > +{ > + namep->name = dentry->d_name.name; > + namep->len = dentry->d_name.len; > + return namep; > +} As mentioned in my comment to the CI series: shouldn't you just use a struct qstr instead of adding a new struct xfs_name? Also please don't add inline for this. > +xfs_name_t xfs_name_dotdot = {"..", 2}; const? > + args.name = name->name; > + args.namelen = name->len; > + args.hashval = xfs_da_hashname(name->name, name->len); What about just putting a pointer to the xfs_name/qstr into args? > /* > + * Counted string for file names. > + */ > +typedef struct xfs_name { > + const uchar_t *name; > + int len; > +} xfs_name_t; Please try to avoid the typedef for newly added types. From owner-xfs@oss.sgi.com Mon Apr 7 23:48:54 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 07 Apr 2008 23:49:00 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_47 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 m386mmmc024801 for ; Mon, 7 Apr 2008 23:48:52 -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 QAA28174; Tue, 8 Apr 2008 16:49:17 +1000 Date: Tue, 08 Apr 2008 16:50:26 +1000 To: "Christoph Hellwig" Subject: Re: [REVIEW] cleanup - remove bhv_vname_t From: "Barry Naujok" Organization: SGI Cc: "xfs@oss.sgi.com" , xfs-dev Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080408063822.GA21876@infradead.org> Message-ID: In-Reply-To: <20080408063822.GA21876@infradead.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m386msmc024815 X-archive-position: 15257 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Tue, 08 Apr 2008 16:38:22 +1000, Christoph Hellwig wrote: > On Tue, Apr 08, 2008 at 02:50:17PM +1000, Barry Naujok wrote: >> - >> + > > What's this? both lines look empty. The first had a tab, my editor automatically cleans whitespace from the end of lines. Two cases of that in this patch. >> return -dm_send_namesp_event(event, mp ? mp->m_super : NULL, >> ip1->i_vnode, vp1_right, >> ip2 ? ip2->i_vnode : NULL, vp2_right, >> - name1, name2, >> + (char *)name1, (char *)name2, > > please change dm_send_namesp_event to take a const char aswell. Noooo :) >> +static inline struct xfs_name * >> +xfs_dentry_name( >> + struct xfs_name *namep, >> + struct dentry *dentry) >> +{ >> + namep->name = dentry->d_name.name; >> + namep->len = dentry->d_name.len; >> + return namep; >> +} > > As mentioned in my comment to the CI series: shouldn't you just use > a struct qstr instead of adding a new struct xfs_name? Keeping a clean line between fs/xfs and fs/xfs/linux-2.6. > Also please don't add inline for this. >> +xfs_name_t xfs_name_dotdot = {"..", 2}; > > const? I should change all calls using xfs_name to use const xfs_name? >> + args.name = name->name; >> + args.namelen = name->len; >> + args.hashval = xfs_da_hashname(name->name, name->len); > > What about just putting a pointer to the xfs_name/qstr into args? As Dave said, for another cleanup patch :) From owner-xfs@oss.sgi.com Tue Apr 8 00:36:49 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 00:36:59 -0700 (PDT) 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.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42, J_CHICKENPOX_45,J_CHICKENPOX_47,J_CHICKENPOX_65 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 m387af7l005554 for ; Tue, 8 Apr 2008 00:36: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 RAA29080; Tue, 8 Apr 2008 17:37:18 +1000 Date: Tue, 08 Apr 2008 17:38:39 +1000 To: "xfs@oss.sgi.com" Subject: [REVIEW #2] cleanup - remove bhv_vname_t From: "Barry Naujok" Organization: SGI Cc: xfs-dev Content-Type: multipart/mixed; boundary=----------mTJiuIKRrFB793e0LEPxBc MIME-Version: 1.0 Message-ID: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15258 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs ------------mTJiuIKRrFB793e0LEPxBc Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 Content-Transfer-Encoding: Quoted-Printable Most of the comments by Dave and Christoph have been implemented. I cleaned up the calls to xfs_dir_canenter in xfs_vnodeops.c and=20=20 xfs_rename.c but I'm not sure of the "preferred" way of doing this: add resblks to xfs_dir_canenter, or the following xfs_dir_check_canenter() wrapper in xfs_dir2.h. Putting xfs_name in xfs_da_args will involve a much bigger patch (all the attr code is affected too). Unresolved comments: "const" xfs_name_dotdot; --- fs/dmapi/dmapi_event.c | 4 - fs/dmapi/dmapi_kern.h | 4 - fs/xfs/dmapi/xfs_dm.c | 6 +- fs/xfs/linux-2.6/xfs_export.c | 5 - fs/xfs/linux-2.6/xfs_iops.c | 55 +++++++++++++++------ fs/xfs/linux-2.6/xfs_vnode.h | 8 --- fs/xfs/xfs_dir2.c | 57 ++++++++-------------- fs/xfs/xfs_dir2.h | 29 +++++++++-- fs/xfs/xfs_mount.h | 4 - fs/xfs/xfs_rename.c | 58 ++++++++++------------ fs/xfs/xfs_utils.c | 4 - fs/xfs/xfs_utils.h | 4 - fs/xfs/xfs_vnodeops.c | 108=20=20 +++++++++++++++++------------------------- fs/xfs/xfs_vnodeops.h | 25 +++++---- 14 files changed, 191 insertions(+), 180 deletions(-) Index: kern_ci/fs/dmapi/dmapi_event.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/dmapi/dmapi_event.c +++ kern_ci/fs/dmapi/dmapi_event.c @@ -622,8 +622,8 @@ dm_send_namesp_event( dm_right_t vp1_right, struct inode *ip2, dm_right_t vp2_right, - char *name1, - char *name2, + const char *name1, + const char *name2, mode_t mode, int retcode, int flags) Index: kern_ci/fs/dmapi/dmapi_kern.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/dmapi/dmapi_kern.h +++ kern_ci/fs/dmapi/dmapi_kern.h @@ -119,8 +119,8 @@ int dm_send_namesp_event( dm_right_t vp1_right, struct inode *ip2, dm_right_t vp2_right, - char *name1, - char *name2, + const char *name1, + const char *name2, mode_t mode, int retcode, int flags); Index: kern_ci/fs/xfs/dmapi/xfs_dm.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/dmapi/xfs_dm.c +++ kern_ci/fs/xfs/dmapi/xfs_dm.c @@ -245,7 +245,7 @@ xfs_copyin_attrname( size_t len; strcpy(to->dan_chars, dmattr_prefix); - + len =3D strnlen_user((char __user *)from, DM_ATTR_NAME_SIZE); if (len =3D=3D 0) error =3D EFAULT; @@ -3172,8 +3172,8 @@ xfs_dm_send_namesp_event( dm_right_t vp1_right, xfs_inode_t *ip2, dm_right_t vp2_right, - char *name1, - char *name2, + const char *name1, + const char *name2, mode_t mode, int retcode, int flags) Index: kern_ci/fs/xfs/linux-2.6/xfs_export.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_export.c +++ kern_ci/fs/xfs/linux-2.6/xfs_export.c @@ -22,6 +22,7 @@ #include "xfs_trans.h" #include "xfs_sb.h" #include "xfs_ag.h" +#include "xfs_dir2.h" #include "xfs_dmapi.h" #include "xfs_mount.h" #include "xfs_export.h" @@ -30,8 +31,6 @@ #include "xfs_inode.h" #include "xfs_vfsops.h" -static struct dentry dotdot =3D { .d_name.name =3D "..", .d_name.len =3D 2= , }; - /* * Note that we only accept fileids which are long enough rather than=20= =20 allow * the parent generation number to default to zero. XFS considers zero a @@ -216,7 +215,7 @@ xfs_fs_get_parent( struct xfs_inode *cip; struct dentry *parent; - error =3D xfs_lookup(XFS_I(child->d_inode), &dotdot, &cip); + error =3D xfs_lookup(XFS_I(child->d_inode), &xfs_name_dotdot, &cip); if (unlikely(error)) return ERR_PTR(-error); Index: kern_ci/fs/xfs/linux-2.6/xfs_iops.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_iops.c +++ kern_ci/fs/xfs/linux-2.6/xfs_iops.c @@ -239,6 +239,15 @@ xfs_init_security( return error; } +static void +xfs_dentry_to_name( + struct xfs_name *namep, + struct dentry *dentry) +{ + namep->name =3D dentry->d_name.name; + namep->len =3D dentry->d_name.len; +} + STATIC void xfs_cleanup_inode( struct inode *dir, @@ -246,20 +255,19 @@ xfs_cleanup_inode( struct dentry *dentry, int mode) { - struct dentry teardown =3D {}; + struct xfs_name teardown; /* Oh, the horror. * If we can't add the ACL or we fail in * xfs_init_security we must back out. * ENOSPC can hit here, among other things. */ - teardown.d_inode =3D inode; - teardown.d_name =3D dentry->d_name; + xfs_dentry_to_name(&teardown, dentry); if (S_ISDIR(mode)) - xfs_rmdir(XFS_I(dir), &teardown); + xfs_rmdir(XFS_I(dir), &teardown, XFS_I(inode)); else - xfs_remove(XFS_I(dir), &teardown); + xfs_remove(XFS_I(dir), &teardown, XFS_I(inode)); iput(inode); } @@ -273,6 +281,7 @@ xfs_vn_mknod( struct inode *inode; struct xfs_inode *ip =3D NULL; xfs_acl_t *default_acl =3D NULL; + struct xfs_name name; attrexists_t test_default_acl =3D _ACL_DEFAULT_EXISTS; int error; @@ -293,6 +302,8 @@ xfs_vn_mknod( } } + xfs_dentry_to_name(&name, dentry); + if (IS_POSIXACL(dir) && !default_acl) mode &=3D ~current->fs->umask; @@ -303,10 +314,10 @@ xfs_vn_mknod( case S_IFSOCK: rdev =3D sysv_encode_dev(rdev); case S_IFREG: - error =3D xfs_create(XFS_I(dir), dentry, mode, rdev, &ip, NULL); + error =3D xfs_create(XFS_I(dir), &name, mode, rdev, &ip, NULL); break; case S_IFDIR: - error =3D xfs_mkdir(XFS_I(dir), dentry, mode, &ip, NULL); + error =3D xfs_mkdir(XFS_I(dir), &name, mode, &ip, NULL); break; default: error =3D EINVAL; @@ -371,12 +382,14 @@ xfs_vn_lookup( struct nameidata *nd) { struct xfs_inode *cip; + struct xfs_name name; int error; if (dentry->d_name.len >=3D MAXNAMELEN) return ERR_PTR(-ENAMETOOLONG); - error =3D xfs_lookup(XFS_I(dir), dentry, &cip); + xfs_dentry_to_name(&name, dentry); + error =3D xfs_lookup(XFS_I(dir), &name, &cip); if (unlikely(error)) { if (unlikely(error !=3D ENOENT)) return ERR_PTR(-error); @@ -394,12 +407,14 @@ xfs_vn_link( struct dentry *dentry) { struct inode *inode; /* inode of guy being linked to */ + struct xfs_name name; int error; inode =3D old_dentry->d_inode; + xfs_dentry_to_name(&name, dentry); igrab(inode); - error =3D xfs_link(XFS_I(dir), XFS_I(inode), dentry); + error =3D xfs_link(XFS_I(dir), XFS_I(inode), &name); if (unlikely(error)) { iput(inode); return -error; @@ -417,11 +432,13 @@ xfs_vn_unlink( struct dentry *dentry) { struct inode *inode; + struct xfs_name name; int error; inode =3D dentry->d_inode; + xfs_dentry_to_name(&name, dentry); - error =3D xfs_remove(XFS_I(dir), dentry); + error =3D xfs_remove(XFS_I(dir), &name, XFS_I(inode)); if (likely(!error)) { xfs_validate_fields(dir); /* size needs update */ xfs_validate_fields(inode); @@ -437,14 +454,15 @@ xfs_vn_symlink( { struct inode *inode; struct xfs_inode *cip =3D NULL; + struct xfs_name name; int error; mode_t mode; mode =3D S_IFLNK | (irix_symlink_mode ? 0777 & ~current->fs->umask : S_IRWXUGO); + xfs_dentry_to_name(&name, dentry); - error =3D xfs_symlink(XFS_I(dir), dentry, (char *)symname, mode, - &cip, NULL); + error =3D xfs_symlink(XFS_I(dir), &name, symname, mode, &cip, NULL); if (unlikely(error)) goto out; @@ -471,9 +489,12 @@ xfs_vn_rmdir( struct dentry *dentry) { struct inode *inode =3D dentry->d_inode; + struct xfs_name name; int error; - error =3D xfs_rmdir(XFS_I(dir), dentry); + xfs_dentry_to_name(&name, dentry); + + error =3D xfs_rmdir(XFS_I(dir), &name, XFS_I(inode)); if (likely(!error)) { xfs_validate_fields(inode); xfs_validate_fields(dir); @@ -489,9 +510,15 @@ xfs_vn_rename( struct dentry *ndentry) { struct inode *new_inode =3D ndentry->d_inode; + struct xfs_name oname; + struct xfs_name nname; int error; - error =3D xfs_rename(XFS_I(odir), odentry, XFS_I(ndir), ndentry); + xfs_dentry_to_name(&oname, odentry); + xfs_dentry_to_name(&nname, ndentry); + + error =3D xfs_rename(XFS_I(odir), &oname, XFS_I(odentry->d_inode), + XFS_I(ndir), &nname); if (likely(!error)) { if (new_inode) xfs_validate_fields(new_inode); Index: kern_ci/fs/xfs/linux-2.6/xfs_vnode.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_vnode.h +++ kern_ci/fs/xfs/linux-2.6/xfs_vnode.h @@ -23,7 +23,6 @@ struct bhv_vattr; struct xfs_iomap; struct attrlist_cursor_kern; -typedef struct dentry bhv_vname_t; typedef __u64 bhv_vnumber_t; typedef struct inode bhv_vnode_t; @@ -211,13 +210,6 @@ static inline bhv_vnode_t *vn_grab(bhv_v } /* - * Vname handling macros. - */ -#define VNAME(dentry) ((char *) (dentry)->d_name.name) -#define VNAMELEN(dentry) ((dentry)->d_name.len) -#define VNAME_TO_INODE(dentry) (XFS_I((dentry)->d_inode)) - -/* * Dealing with bad inodes */ static inline int VN_BAD(bhv_vnode_t *vp) Index: kern_ci/fs/xfs/xfs_dir2.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -44,6 +44,7 @@ #include "xfs_error.h" #include "xfs_vnodeops.h" +struct xfs_name xfs_name_dotdot =3D {"..", 2}; void xfs_dir_mount( @@ -146,8 +147,7 @@ int xfs_dir_createname( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, + struct xfs_name *name, xfs_ino_t inum, /* new entry inode number */ xfs_fsblock_t *first, /* bmap's firstblock */ xfs_bmap_free_t *flist, /* bmap's freeblock list */ @@ -162,9 +162,9 @@ xfs_dir_createname( return rval; XFS_STATS_INC(xs_dir_create); - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D inum; args.dp =3D dp; args.firstblock =3D first; @@ -197,8 +197,7 @@ int xfs_dir_lookup( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, + struct xfs_name *name, xfs_ino_t *inum) /* out: inode number */ { xfs_da_args_t args; @@ -207,18 +206,14 @@ xfs_dir_lookup( ASSERT((dp->i_d.di_mode & S_IFMT) =3D=3D S_IFDIR); XFS_STATS_INC(xs_dir_lookup); + memset(&args, 0, sizeof(xfs_da_args_t)); - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); - args.inumber =3D 0; + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.dp =3D dp; - args.firstblock =3D NULL; - args.flist =3D NULL; - args.total =3D 0; args.whichfork =3D XFS_DATA_FORK; args.trans =3D tp; - args.justcheck =3D args.addname =3D 0; args.oknoent =3D 1; if (dp->i_d.di_format =3D=3D XFS_DINODE_FMT_LOCAL) @@ -247,8 +242,7 @@ int xfs_dir_removename( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, + struct xfs_name *name, xfs_ino_t ino, xfs_fsblock_t *first, /* bmap's firstblock */ xfs_bmap_free_t *flist, /* bmap's freeblock list */ @@ -261,9 +255,9 @@ xfs_dir_removename( ASSERT((dp->i_d.di_mode & S_IFMT) =3D=3D S_IFDIR); XFS_STATS_INC(xs_dir_remove); - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D ino; args.dp =3D dp; args.firstblock =3D first; @@ -329,8 +323,7 @@ int xfs_dir_replace( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, /* name of entry to replace */ - int namelen, + struct xfs_name *name, /* name of entry to replace */ xfs_ino_t inum, /* new inode number */ xfs_fsblock_t *first, /* bmap's firstblock */ xfs_bmap_free_t *flist, /* bmap's freeblock list */ @@ -345,9 +338,9 @@ xfs_dir_replace( if ((rval =3D xfs_dir_ino_validate(tp->t_mountp, inum))) return rval; - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D inum; args.dp =3D dp; args.firstblock =3D first; @@ -379,23 +372,19 @@ int xfs_dir_canenter( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, /* name of entry to add */ - int namelen) + struct xfs_name *name) /* name of entry to add */ { xfs_da_args_t args; int rval; int v; /* type-checking value */ ASSERT((dp->i_d.di_mode & S_IFMT) =3D=3D S_IFDIR); + memset(&args, 0, sizeof(xfs_da_args_t)); - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); - args.inumber =3D 0; + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.dp =3D dp; - args.firstblock =3D NULL; - args.flist =3D NULL; - args.total =3D 0; args.whichfork =3D XFS_DATA_FORK; args.trans =3D tp; args.justcheck =3D args.addname =3D args.oknoent =3D 1; Index: kern_ci/fs/xfs/xfs_dir2.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_dir2.h +++ kern_ci/fs/xfs/xfs_dir2.h @@ -60,6 +60,16 @@ typedef __uint32_t xfs_dir2_db_t; typedef xfs_off_t xfs_dir2_off_t; /* + * Counted string for file names. + */ +struct xfs_name { + const char *name; + int len; +}; + +extern struct xfs_name xfs_name_dotdot; + +/* * Generic directory interface routines */ extern void xfs_dir_startup(void); @@ -68,23 +78,32 @@ extern int xfs_dir_isempty(struct xfs_in extern int xfs_dir_init(struct xfs_trans *tp, struct xfs_inode *dp, struct xfs_inode *pdp); extern int xfs_dir_createname(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t inum, + struct xfs_name *name, xfs_ino_t inum, xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_lookup(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t *inum); + struct xfs_name *name, xfs_ino_t *inum); extern int xfs_dir_removename(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t ino, + struct xfs_name *name, xfs_ino_t ino, xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_replace(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t inum, + struct xfs_name *name, xfs_ino_t inum, xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_canenter(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen); + struct xfs_name *name); extern int xfs_dir_ino_validate(struct xfs_mount *mp, xfs_ino_t ino); +static inline int +xfs_dir_check_canenter(uint resblks, struct xfs_trans *tp, + struct xfs_inode *dp, struct xfs_name *name) +{ + if (resblks) + return 0; + return xfs_dir_canenter(tp, dp, name);; +} + /* * Utility routines for v2 directories. */ Index: kern_ci/fs/xfs/xfs_mount.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_mount.h +++ kern_ci/fs/xfs/xfs_mount.h @@ -73,7 +73,7 @@ typedef int (*xfs_send_destroy_t)(struct typedef int (*xfs_send_namesp_t)(dm_eventtype_t, struct xfs_mount *, struct xfs_inode *, dm_right_t, struct xfs_inode *, dm_right_t, - char *, char *, mode_t, int, int); + const char *, const char *, mode_t, int, int); typedef int (*xfs_send_mount_t)(struct xfs_mount *, dm_right_t, char *, char *); typedef void (*xfs_send_unmount_t)(struct xfs_mount *, struct xfs_inode *, @@ -401,7 +401,7 @@ typedef struct xfs_mount { /* * Allow large block sizes to be reported to userspace programs if the - * "largeio" mount option is used. + * "largeio" mount option is used. * * If compatibility mode is specified, simply return the basic unit of=20= =20 caching * so that we don't get inefficient read/modify/write I/O from user apps. Index: kern_ci/fs/xfs/xfs_rename.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_rename.c +++ kern_ci/fs/xfs/xfs_rename.c @@ -83,17 +83,16 @@ int xfs_rename_skip, xfs_rename_nskip; */ STATIC int xfs_lock_for_rename( - xfs_inode_t *dp1, /* old (source) directory inode */ - xfs_inode_t *dp2, /* new (target) directory inode */ - bhv_vname_t *vname1,/* old entry name */ - bhv_vname_t *vname2,/* new entry name */ - xfs_inode_t **ipp1, /* inode of old entry */ - xfs_inode_t **ipp2, /* inode of new entry, if it + xfs_inode_t *dp1, /* in: old (source) directory inode */ + xfs_inode_t *dp2, /* in: new (target) directory inode */ + struct xfs_name *name2, /* in: new entry name */ + xfs_inode_t **ipp1, /* in/out: inode of old entry */ + xfs_inode_t **ipp2, /* out: inode of new entry, if it already exists, NULL otherwise. */ - xfs_inode_t **i_tab,/* array of inode returned, sorted */ - int *num_inodes) /* number of inodes in array */ + xfs_inode_t **i_tab,/* out: array of inode returned, sorted */ + int *num_inodes) /* out: number of inodes in array */ { - xfs_inode_t *ip1 =3D VNAME_TO_INODE(vname1); + xfs_inode_t *ip1; xfs_inode_t *ip2, *temp; xfs_ino_t inum1, inum2; int error; @@ -101,7 +100,9 @@ xfs_lock_for_rename( uint lock_mode; int diff_dirs =3D (dp1 !=3D dp2); + ip1 =3D *ipp1; ip2 =3D NULL; + ASSERT(ip1); /* * First, find out the current inums of the entries so that we @@ -125,7 +126,7 @@ xfs_lock_for_rename( lock_mode =3D xfs_ilock_map_shared(dp2); } - error =3D xfs_dir_lookup_int(dp2, lock_mode, vname2, &inum2, &ip2); + error =3D xfs_dir_lookup_int(dp2, lock_mode, name2, &inum2, &ip2); if (error =3D=3D ENOENT) { /* target does not need to exist. */ inum2 =3D 0; } else if (error) { @@ -218,12 +219,13 @@ xfs_lock_for_rename( int xfs_rename( xfs_inode_t *src_dp, - bhv_vname_t *src_vname, + struct xfs_name *src_name, + xfs_inode_t *src_ip, xfs_inode_t *target_dp, - bhv_vname_t *target_vname) + struct xfs_name *target_name) { xfs_trans_t *tp; - xfs_inode_t *src_ip, *target_ip; + xfs_inode_t *target_ip; xfs_mount_t *mp =3D src_dp->i_mount; int new_parent; /* moving to a new dir */ int src_is_directory; /* src_name is a directory */ @@ -237,10 +239,6 @@ xfs_rename( int spaceres; int target_link_zero =3D 0; int num_inodes; - char *src_name =3D VNAME(src_vname); - char *target_name =3D VNAME(target_vname); - int src_namelen =3D VNAMELEN(src_vname); - int target_namelen =3D VNAMELEN(target_vname); xfs_itrace_entry(src_dp); xfs_itrace_entry(target_dp); @@ -250,7 +248,7 @@ xfs_rename( error =3D XFS_SEND_NAMESP(mp, DM_EVENT_RENAME, src_dp, DM_RIGHT_NULL, target_dp, DM_RIGHT_NULL, - src_name, target_name, + src_name->name, target_name->name, 0, 0, 0); if (error) { return error; @@ -267,9 +265,8 @@ xfs_rename( * does not exist in the source directory. */ tp =3D NULL; - error =3D xfs_lock_for_rename(src_dp, target_dp, src_vname, - target_vname, &src_ip, &target_ip, inodes, - &num_inodes); + error =3D xfs_lock_for_rename(src_dp, target_dp, target_name, + &src_ip, &target_ip, inodes, &num_inodes); if (error) { /* @@ -316,7 +313,7 @@ xfs_rename( XFS_BMAP_INIT(&free_list, &first_block); tp =3D xfs_trans_alloc(mp, XFS_TRANS_RENAME); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - spaceres =3D XFS_RENAME_SPACE_RES(mp, target_namelen); + spaceres =3D XFS_RENAME_SPACE_RES(mp, target_name->len); error =3D xfs_trans_reserve(tp, spaceres, XFS_RENAME_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_RENAME_LOG_COUNT); if (error =3D=3D ENOSPC) { @@ -374,9 +371,9 @@ xfs_rename( * If there's no space reservation, check the entry will * fit before actually inserting it. */ - if (spaceres =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, target_dp, target_name, - target_namelen))) + error =3D xfs_dir_check_canenter(spaceres, tp, target_dp, + target_name); + if (error) goto error_return; /* * If target does not exist and the rename crosses @@ -384,7 +381,7 @@ xfs_rename( * to account for the ".." reference from the new entry. */ error =3D xfs_dir_createname(tp, target_dp, target_name, - target_namelen, src_ip->i_ino, + src_ip->i_ino, &first_block, &free_list, spaceres); if (error =3D=3D ENOSPC) goto error_return; @@ -424,7 +421,7 @@ xfs_rename( * name at the destination directory, remove it first. */ error =3D xfs_dir_replace(tp, target_dp, target_name, - target_namelen, src_ip->i_ino, + src_ip->i_ino, &first_block, &free_list, spaceres); if (error) goto abort_return; @@ -461,7 +458,8 @@ xfs_rename( * Rewrite the ".." entry to point to the new * directory. */ - error =3D xfs_dir_replace(tp, src_ip, "..", 2, target_dp->i_ino, + error =3D xfs_dir_replace(tp, src_ip, &xfs_name_dotdot, + target_dp->i_ino, &first_block, &free_list, spaceres); ASSERT(error !=3D EEXIST); if (error) @@ -497,7 +495,7 @@ xfs_rename( goto abort_return; } - error =3D xfs_dir_removename(tp, src_dp, src_name, src_namelen, + error =3D xfs_dir_removename(tp, src_dp, src_name, src_ip->i_ino, &first_block, &free_list, spaceres); if (error) goto abort_return; @@ -583,7 +581,7 @@ std_return: (void) XFS_SEND_NAMESP (mp, DM_EVENT_POSTRENAME, src_dp, DM_RIGHT_NULL, target_dp, DM_RIGHT_NULL, - src_name, target_name, + src_name->name, target_name->name, 0, error, 0); } return error; Index: kern_ci/fs/xfs/xfs_utils.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_utils.c +++ kern_ci/fs/xfs/xfs_utils.c @@ -45,7 +45,7 @@ int xfs_dir_lookup_int( xfs_inode_t *dp, uint lock_mode, - bhv_vname_t *dentry, + struct xfs_name *name, xfs_ino_t *inum, xfs_inode_t **ipp) { @@ -53,7 +53,7 @@ xfs_dir_lookup_int( xfs_itrace_entry(dp); - error =3D xfs_dir_lookup(NULL, dp, VNAME(dentry), VNAMELEN(dentry), inum); + error =3D xfs_dir_lookup(NULL, dp, name, inum); if (!error) { /* * Unlock the directory. We do this because we can't Index: kern_ci/fs/xfs/xfs_utils.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_utils.h +++ kern_ci/fs/xfs/xfs_utils.h @@ -21,8 +21,8 @@ #define IRELE(ip) VN_RELE(XFS_ITOV(ip)) #define IHOLD(ip) VN_HOLD(XFS_ITOV(ip)) -extern int xfs_dir_lookup_int (xfs_inode_t *, uint, bhv_vname_t *,=20=20 xfs_ino_t *, - xfs_inode_t **); +extern int xfs_dir_lookup_int (xfs_inode_t *, uint, struct xfs_name *, + xfs_ino_t *, xfs_inode_t **); extern int xfs_truncate_file (xfs_mount_t *, xfs_inode_t *); extern int xfs_dir_ialloc (xfs_trans_t **, xfs_inode_t *, mode_t,=20=20 xfs_nlink_t, xfs_dev_t, cred_t *, prid_t, int, Index: kern_ci/fs/xfs/xfs_vnodeops.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_vnodeops.c +++ kern_ci/fs/xfs/xfs_vnodeops.c @@ -1762,7 +1762,7 @@ xfs_inactive( int xfs_lookup( xfs_inode_t *dp, - bhv_vname_t *dentry, + struct xfs_name *name, xfs_inode_t **ipp) { xfs_inode_t *ip; @@ -1776,7 +1776,7 @@ xfs_lookup( return XFS_ERROR(EIO); lock_mode =3D xfs_ilock_map_shared(dp); - error =3D xfs_dir_lookup_int(dp, lock_mode, dentry, &e_inum, &ip); + error =3D xfs_dir_lookup_int(dp, lock_mode, name, &e_inum, &ip); if (!error) { *ipp =3D ip; xfs_itrace_ref(ip); @@ -1788,13 +1788,12 @@ xfs_lookup( int xfs_create( xfs_inode_t *dp, - bhv_vname_t *dentry, + struct xfs_name *name, mode_t mode, xfs_dev_t rdev, xfs_inode_t **ipp, cred_t *credp) { - char *name =3D VNAME(dentry); xfs_mount_t *mp =3D dp->i_mount; xfs_inode_t *ip; xfs_trans_t *tp; @@ -1808,17 +1807,14 @@ xfs_create( xfs_prid_t prid; struct xfs_dquot *udqp, *gdqp; uint resblks; - int namelen; ASSERT(!*ipp); xfs_itrace_entry(dp); - namelen =3D VNAMELEN(dentry); - if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_CREATE, dp, DM_RIGHT_NULL, NULL, - DM_RIGHT_NULL, name, NULL, + DM_RIGHT_NULL, name->name, NULL, mode, 0, 0); if (error) @@ -1850,7 +1846,7 @@ xfs_create( tp =3D xfs_trans_alloc(mp, XFS_TRANS_CREATE); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - resblks =3D XFS_CREATE_SPACE_RES(mp, namelen); + resblks =3D XFS_CREATE_SPACE_RES(mp, name->len); /* * Initially assume that the file does not exist and * reserve the resources for that case. If that is not @@ -1883,7 +1879,8 @@ xfs_create( if (error) goto error_return; - if (resblks =3D=3D 0 && (error =3D xfs_dir_canenter(tp, dp, name, namelen= ))) + error =3D xfs_dir_check_canenter(resblks, tp, dp, name); + if (error) goto error_return; error =3D xfs_dir_ialloc(&tp, dp, mode, 1, rdev, credp, prid, resblks > 0, @@ -1913,7 +1910,7 @@ xfs_create( xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL); unlock_dp_on_error =3D B_FALSE; - error =3D xfs_dir_createname(tp, dp, name, namelen, ip->i_ino, + error =3D xfs_dir_createname(tp, dp, name, ip->i_ino, &first_block, &free_list, resblks ? resblks - XFS_IALLOC_SPACE_RES(mp) : 0); if (error) { @@ -1974,7 +1971,7 @@ std_return: (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTCREATE, dp, DM_RIGHT_NULL, *ipp ? ip : NULL, - DM_RIGHT_NULL, name, NULL, + DM_RIGHT_NULL, name->name, NULL, mode, error, 0); } return error; @@ -2266,12 +2263,10 @@ int remove_which_error_return =3D 0; int xfs_remove( xfs_inode_t *dp, - bhv_vname_t *dentry) + struct xfs_name *name, + xfs_inode_t *ip) { - char *name =3D VNAME(dentry); xfs_mount_t *mp =3D dp->i_mount; - xfs_inode_t *ip =3D VNAME_TO_INODE(dentry); - int namelen =3D VNAMELEN(dentry); xfs_trans_t *tp =3D NULL; int error =3D 0; xfs_bmap_free_t free_list; @@ -2287,9 +2282,9 @@ xfs_remove( return XFS_ERROR(EIO); if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { - error =3D XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, - DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - name, NULL, ip->i_d.di_mode, 0, 0); + error =3D XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, DM_RIGHT_NULL, + NULL, DM_RIGHT_NULL, name->name, NULL, + ip->i_d.di_mode, 0, 0); if (error) return error; } @@ -2374,7 +2369,7 @@ xfs_remove( * Entry must exist since we did a lookup in xfs_lock_dir_and_entry. */ XFS_BMAP_INIT(&free_list, &first_block); - error =3D xfs_dir_removename(tp, dp, name, namelen, ip->i_ino, + error =3D xfs_dir_removename(tp, dp, name, ip->i_ino, &first_block, &free_list, 0); if (error) { ASSERT(error !=3D ENOENT); @@ -2442,7 +2437,7 @@ xfs_remove( (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - name, NULL, ip->i_d.di_mode, error, 0); + name->name, NULL, ip->i_d.di_mode, error, 0); } return error; @@ -2472,7 +2467,7 @@ int xfs_link( xfs_inode_t *tdp, xfs_inode_t *sip, - bhv_vname_t *dentry) + struct xfs_name *target_name) { xfs_mount_t *mp =3D tdp->i_mount; xfs_trans_t *tp; @@ -2483,13 +2478,10 @@ xfs_link( int cancel_flags; int committed; int resblks; - char *target_name =3D VNAME(dentry); - int target_namelen; xfs_itrace_entry(tdp); xfs_itrace_entry(sip); - target_namelen =3D VNAMELEN(dentry); ASSERT(!S_ISDIR(sip->i_d.di_mode)); if (XFS_FORCED_SHUTDOWN(mp)) @@ -2499,7 +2491,7 @@ xfs_link( error =3D XFS_SEND_NAMESP(mp, DM_EVENT_LINK, tdp, DM_RIGHT_NULL, sip, DM_RIGHT_NULL, - target_name, NULL, 0, 0, 0); + target_name->name, NULL, 0, 0, 0); if (error) return error; } @@ -2514,7 +2506,7 @@ xfs_link( tp =3D xfs_trans_alloc(mp, XFS_TRANS_LINK); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - resblks =3D XFS_LINK_SPACE_RES(mp, target_namelen); + resblks =3D XFS_LINK_SPACE_RES(mp, target_name->len); error =3D xfs_trans_reserve(tp, resblks, XFS_LINK_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_LINK_LOG_COUNT); if (error =3D=3D ENOSPC) { @@ -2566,13 +2558,13 @@ xfs_link( goto error_return; } - if (resblks =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, tdp, target_name, target_namelen))) + error =3D xfs_dir_check_canenter(resblks, tp, tdp, target_name); + if (error) goto error_return; XFS_BMAP_INIT(&free_list, &first_block); - error =3D xfs_dir_createname(tp, tdp, target_name, target_namelen, + error =3D xfs_dir_createname(tp, tdp, target_name, sip->i_ino, &first_block, &free_list, resblks); if (error) @@ -2610,7 +2602,7 @@ std_return: (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTLINK, tdp, DM_RIGHT_NULL, sip, DM_RIGHT_NULL, - target_name, NULL, 0, error, 0); + target_name->name, NULL, 0, error, 0); } return error; @@ -2627,13 +2619,11 @@ std_return: int xfs_mkdir( xfs_inode_t *dp, - bhv_vname_t *dentry, + struct xfs_name *dir_name, mode_t mode, xfs_inode_t **ipp, cred_t *credp) { - char *dir_name =3D VNAME(dentry); - int dir_namelen =3D VNAMELEN(dentry); xfs_mount_t *mp =3D dp->i_mount; xfs_inode_t *cdp; /* inode of created dir */ xfs_trans_t *tp; @@ -2657,7 +2647,7 @@ xfs_mkdir( if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_CREATE, dp, DM_RIGHT_NULL, NULL, - DM_RIGHT_NULL, dir_name, NULL, + DM_RIGHT_NULL, dir_name->name, NULL, mode, 0, 0); if (error) return error; @@ -2686,7 +2676,7 @@ xfs_mkdir( tp =3D xfs_trans_alloc(mp, XFS_TRANS_MKDIR); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - resblks =3D XFS_MKDIR_SPACE_RES(mp, dir_namelen); + resblks =3D XFS_MKDIR_SPACE_RES(mp, dir_name->len); error =3D xfs_trans_reserve(tp, resblks, XFS_MKDIR_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_MKDIR_LOG_COUNT); if (error =3D=3D ENOSPC) { @@ -2718,8 +2708,8 @@ xfs_mkdir( if (error) goto error_return; - if (resblks =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, dp, dir_name, dir_namelen))) + error =3D xfs_dir_check_canenter(resblks, tp, dp, dir_name); + if (error) goto error_return; /* * create the directory inode. @@ -2748,7 +2738,7 @@ xfs_mkdir( XFS_BMAP_INIT(&free_list, &first_block); - error =3D xfs_dir_createname(tp, dp, dir_name, dir_namelen, cdp->i_ino, + error =3D xfs_dir_createname(tp, dp, dir_name, cdp->i_ino, &first_block, &free_list, resblks ? resblks - XFS_IALLOC_SPACE_RES(mp) : 0); if (error) { @@ -2815,7 +2805,7 @@ std_return: dp, DM_RIGHT_NULL, created ? cdp : NULL, DM_RIGHT_NULL, - dir_name, NULL, + dir_name->name, NULL, mode, error, 0); } return error; @@ -2839,13 +2829,11 @@ std_return: int xfs_rmdir( xfs_inode_t *dp, - bhv_vname_t *dentry) + struct xfs_name *name, + xfs_inode_t *cdp) { bhv_vnode_t *dir_vp =3D XFS_ITOV(dp); - char *name =3D VNAME(dentry); - int namelen =3D VNAMELEN(dentry); xfs_mount_t *mp =3D dp->i_mount; - xfs_inode_t *cdp =3D VNAME_TO_INODE(dentry); xfs_trans_t *tp; int error; xfs_bmap_free_t free_list; @@ -2863,8 +2851,8 @@ xfs_rmdir( if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, DM_RIGHT_NULL, - NULL, DM_RIGHT_NULL, - name, NULL, cdp->i_d.di_mode, 0, 0); + NULL, DM_RIGHT_NULL, name->name, + NULL, cdp->i_d.di_mode, 0, 0); if (error) return XFS_ERROR(error); } @@ -2958,7 +2946,7 @@ xfs_rmdir( goto error_return; } - error =3D xfs_dir_removename(tp, dp, name, namelen, cdp->i_ino, + error =3D xfs_dir_removename(tp, dp, name, cdp->i_ino, &first_block, &free_list, resblks); if (error) goto error1; @@ -3038,7 +3026,7 @@ xfs_rmdir( (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - name, NULL, cdp->i_d.di_mode, + name->name, NULL, cdp->i_d.di_mode, error, 0); } return error; @@ -3056,8 +3044,8 @@ xfs_rmdir( int xfs_symlink( xfs_inode_t *dp, - bhv_vname_t *dentry, - char *target_path, + struct xfs_name *link_name, + const char *target_path, mode_t mode, xfs_inode_t **ipp, cred_t *credp) @@ -3077,15 +3065,13 @@ xfs_symlink( int nmaps; xfs_bmbt_irec_t mval[SYMLINK_MAPS]; xfs_daddr_t d; - char *cur_chunk; + const char *cur_chunk; int byte_cnt; int n; xfs_buf_t *bp; xfs_prid_t prid; struct xfs_dquot *udqp, *gdqp; uint resblks; - char *link_name =3D VNAME(dentry); - int link_namelen; *ipp =3D NULL; error =3D 0; @@ -3097,8 +3083,6 @@ xfs_symlink( if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); - link_namelen =3D VNAMELEN(dentry); - /* * Check component lengths of the target path name. */ @@ -3134,7 +3118,7 @@ xfs_symlink( if (DM_EVENT_ENABLED(dp, DM_EVENT_SYMLINK)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_SYMLINK, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - link_name, target_path, 0, 0, 0); + link_name->name, target_path, 0, 0, 0); if (error) return error; } @@ -3166,7 +3150,7 @@ xfs_symlink( fs_blocks =3D 0; else fs_blocks =3D XFS_B_TO_FSB(mp, pathlen); - resblks =3D XFS_SYMLINK_SPACE_RES(mp, link_namelen, fs_blocks); + resblks =3D XFS_SYMLINK_SPACE_RES(mp, link_name->len, fs_blocks); error =3D xfs_trans_reserve(tp, resblks, XFS_SYMLINK_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_SYMLINK_LOG_COUNT); if (error =3D=3D ENOSPC && fs_blocks =3D=3D 0) { @@ -3200,8 +3184,8 @@ xfs_symlink( /* * Check for ability to enter directory entry, if no space reserved. */ - if (resblks =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, dp, link_name, link_namelen))) + error =3D xfs_dir_check_canenter(resblks, tp, dp, link_name); + if (error) goto error_return; /* * Initialize the bmap freelist prior to calling either @@ -3293,7 +3277,7 @@ xfs_symlink( /* * Create the directory entry for the symlink. */ - error =3D xfs_dir_createname(tp, dp, link_name, link_namelen, ip->i_ino, + error =3D xfs_dir_createname(tp, dp, link_name, ip->i_ino, &first_block, &free_list, resblks); if (error) goto error1; @@ -3338,8 +3322,8 @@ std_return: (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTSYMLINK, dp, DM_RIGHT_NULL, error ? NULL : ip, - DM_RIGHT_NULL, link_name, target_path, - 0, error, 0); + DM_RIGHT_NULL, link_name->name, + target_path, 0, error, 0); } if (!error) Index: kern_ci/fs/xfs/xfs_vnodeops.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_vnodeops.h +++ kern_ci/fs/xfs/xfs_vnodeops.h @@ -12,7 +12,7 @@ struct pipe_inode_info; struct uio; struct xfs_inode; struct xfs_iomap; - +struct xfs_name; int xfs_open(struct xfs_inode *ip); int xfs_getattr(struct xfs_inode *ip, struct bhv_vattr *vap, int flags); @@ -23,20 +23,22 @@ int xfs_fsync(struct xfs_inode *ip, int xfs_off_t stop); int xfs_release(struct xfs_inode *ip); int xfs_inactive(struct xfs_inode *ip); -int xfs_lookup(struct xfs_inode *dp, bhv_vname_t *dentry, +int xfs_lookup(struct xfs_inode *dp, struct xfs_name *name, struct xfs_inode **ipp); -int xfs_create(struct xfs_inode *dp, bhv_vname_t *dentry, mode_t mode, +int xfs_create(struct xfs_inode *dp, struct xfs_name *name, mode_t mode, xfs_dev_t rdev, struct xfs_inode **ipp, struct cred *credp); -int xfs_remove(struct xfs_inode *dp, bhv_vname_t *dentry); +int xfs_remove(struct xfs_inode *dp, struct xfs_name *name, + struct xfs_inode *ip); int xfs_link(struct xfs_inode *tdp, struct xfs_inode *sip, - bhv_vname_t *dentry); -int xfs_mkdir(struct xfs_inode *dp, bhv_vname_t *dentry, + struct xfs_name *target_name); +int xfs_mkdir(struct xfs_inode *dp, struct xfs_name *dir_name, mode_t mode, struct xfs_inode **ipp, struct cred *credp); -int xfs_rmdir(struct xfs_inode *dp, bhv_vname_t *dentry); +int xfs_rmdir(struct xfs_inode *dp, struct xfs_name *name, + struct xfs_inode *cdp); int xfs_readdir(struct xfs_inode *dp, void *dirent, size_t bufsize, xfs_off_t *offset, filldir_t filldir); -int xfs_symlink(struct xfs_inode *dp, bhv_vname_t *dentry, - char *target_path, mode_t mode, struct xfs_inode **ipp, +int xfs_symlink(struct xfs_inode *dp, struct xfs_name *link_name, + const char *target_path, mode_t mode, struct xfs_inode **ipp, struct cred *credp); int xfs_inode_flush(struct xfs_inode *ip, int flags); int xfs_set_dmattrs(struct xfs_inode *ip, u_int evmask, u_int16_t state); @@ -44,8 +46,9 @@ int xfs_reclaim(struct xfs_inode *ip); int xfs_change_file_space(struct xfs_inode *ip, int cmd, xfs_flock64_t *bf, xfs_off_t offset, struct cred *credp, int attr_flags); -int xfs_rename(struct xfs_inode *src_dp, bhv_vname_t *src_vname, - struct xfs_inode *target_dp, bhv_vname_t *target_vname); +int xfs_rename(struct xfs_inode *src_dp, struct xfs_name *src_name, + struct xfs_inode *src_ip, struct xfs_inode *target_dp, + struct xfs_name *target_name); int xfs_attr_get(struct xfs_inode *ip, const char *name, char *value, int *valuelenp, int flags, cred_t *cred); int xfs_attr_set(struct xfs_inode *dp, const char *name, char *value, ------------mTJiuIKRrFB793e0LEPxBc Content-Disposition: attachment; filename=remove_bhv_vname.patch Content-Type: text/x-patch; name=remove_bhv_vname.patch Content-Transfer-Encoding: Quoted-Printable --- fs/dmapi/dmapi_event.c | 4 - fs/dmapi/dmapi_kern.h | 4 - fs/xfs/dmapi/xfs_dm.c | 6 +- fs/xfs/linux-2.6/xfs_export.c | 5 - fs/xfs/linux-2.6/xfs_iops.c | 55 +++++++++++++++------ fs/xfs/linux-2.6/xfs_vnode.h | 8 --- fs/xfs/xfs_dir2.c | 57 ++++++++-------------- fs/xfs/xfs_dir2.h | 29 +++++++++-- fs/xfs/xfs_mount.h | 4 - fs/xfs/xfs_rename.c | 58 ++++++++++------------ fs/xfs/xfs_utils.c | 4 - fs/xfs/xfs_utils.h | 4 - fs/xfs/xfs_vnodeops.c | 108 +++++++++++++++++--------------------= ----- fs/xfs/xfs_vnodeops.h | 25 +++++---- 14 files changed, 191 insertions(+), 180 deletions(-) Index: kern_ci/fs/dmapi/dmapi_event.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/dmapi/dmapi_event.c +++ kern_ci/fs/dmapi/dmapi_event.c @@ -622,8 +622,8 @@ dm_send_namesp_event( dm_right_t vp1_right, struct inode *ip2, dm_right_t vp2_right, - char *name1, - char *name2, + const char *name1, + const char *name2, mode_t mode, int retcode, int flags) Index: kern_ci/fs/dmapi/dmapi_kern.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/dmapi/dmapi_kern.h +++ kern_ci/fs/dmapi/dmapi_kern.h @@ -119,8 +119,8 @@ int dm_send_namesp_event( dm_right_t vp1_right, struct inode *ip2, dm_right_t vp2_right, - char *name1, - char *name2, + const char *name1, + const char *name2, mode_t mode, int retcode, int flags); Index: kern_ci/fs/xfs/dmapi/xfs_dm.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/dmapi/xfs_dm.c +++ kern_ci/fs/xfs/dmapi/xfs_dm.c @@ -245,7 +245,7 @@ xfs_copyin_attrname( size_t len; =20 strcpy(to->dan_chars, dmattr_prefix); -=20=20=20=20=20=20=20=20 + len =3D strnlen_user((char __user *)from, DM_ATTR_NAME_SIZE); if (len =3D=3D 0) error =3D EFAULT; @@ -3172,8 +3172,8 @@ xfs_dm_send_namesp_event( dm_right_t vp1_right, xfs_inode_t *ip2, dm_right_t vp2_right, - char *name1, - char *name2, + const char *name1, + const char *name2, mode_t mode, int retcode, int flags) Index: kern_ci/fs/xfs/linux-2.6/xfs_export.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_export.c +++ kern_ci/fs/xfs/linux-2.6/xfs_export.c @@ -22,6 +22,7 @@ #include "xfs_trans.h" #include "xfs_sb.h" #include "xfs_ag.h" +#include "xfs_dir2.h" #include "xfs_dmapi.h" #include "xfs_mount.h" #include "xfs_export.h" @@ -30,8 +31,6 @@ #include "xfs_inode.h" #include "xfs_vfsops.h" =20 -static struct dentry dotdot =3D { .d_name.name =3D "..", .d_name.len =3D 2= , }; - /* * Note that we only accept fileids which are long enough rather than allow * the parent generation number to default to zero. XFS considers zero a @@ -216,7 +215,7 @@ xfs_fs_get_parent( struct xfs_inode *cip; struct dentry *parent; =20 - error =3D xfs_lookup(XFS_I(child->d_inode), &dotdot, &cip); + error =3D xfs_lookup(XFS_I(child->d_inode), &xfs_name_dotdot, &cip); if (unlikely(error)) return ERR_PTR(-error); =20 Index: kern_ci/fs/xfs/linux-2.6/xfs_iops.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_iops.c +++ kern_ci/fs/xfs/linux-2.6/xfs_iops.c @@ -239,6 +239,15 @@ xfs_init_security( return error; } =20 +static void +xfs_dentry_to_name( + struct xfs_name *namep, + struct dentry *dentry) +{ + namep->name =3D dentry->d_name.name; + namep->len =3D dentry->d_name.len; +} + STATIC void xfs_cleanup_inode( struct inode *dir, @@ -246,20 +255,19 @@ xfs_cleanup_inode( struct dentry *dentry, int mode) { - struct dentry teardown =3D {}; + struct xfs_name teardown; =20 /* Oh, the horror. * If we can't add the ACL or we fail in * xfs_init_security we must back out. * ENOSPC can hit here, among other things. */ - teardown.d_inode =3D inode; - teardown.d_name =3D dentry->d_name; + xfs_dentry_to_name(&teardown, dentry); =20 if (S_ISDIR(mode)) - xfs_rmdir(XFS_I(dir), &teardown); + xfs_rmdir(XFS_I(dir), &teardown, XFS_I(inode)); else - xfs_remove(XFS_I(dir), &teardown); + xfs_remove(XFS_I(dir), &teardown, XFS_I(inode)); iput(inode); } =20 @@ -273,6 +281,7 @@ xfs_vn_mknod( struct inode *inode; struct xfs_inode *ip =3D NULL; xfs_acl_t *default_acl =3D NULL; + struct xfs_name name; attrexists_t test_default_acl =3D _ACL_DEFAULT_EXISTS; int error; =20 @@ -293,6 +302,8 @@ xfs_vn_mknod( } } =20 + xfs_dentry_to_name(&name, dentry); + if (IS_POSIXACL(dir) && !default_acl) mode &=3D ~current->fs->umask; =20 @@ -303,10 +314,10 @@ xfs_vn_mknod( case S_IFSOCK: rdev =3D sysv_encode_dev(rdev); case S_IFREG: - error =3D xfs_create(XFS_I(dir), dentry, mode, rdev, &ip, NULL); + error =3D xfs_create(XFS_I(dir), &name, mode, rdev, &ip, NULL); break; case S_IFDIR: - error =3D xfs_mkdir(XFS_I(dir), dentry, mode, &ip, NULL); + error =3D xfs_mkdir(XFS_I(dir), &name, mode, &ip, NULL); break; default: error =3D EINVAL; @@ -371,12 +382,14 @@ xfs_vn_lookup( struct nameidata *nd) { struct xfs_inode *cip; + struct xfs_name name; int error; =20 if (dentry->d_name.len >=3D MAXNAMELEN) return ERR_PTR(-ENAMETOOLONG); =20 - error =3D xfs_lookup(XFS_I(dir), dentry, &cip); + xfs_dentry_to_name(&name, dentry); + error =3D xfs_lookup(XFS_I(dir), &name, &cip); if (unlikely(error)) { if (unlikely(error !=3D ENOENT)) return ERR_PTR(-error); @@ -394,12 +407,14 @@ xfs_vn_link( struct dentry *dentry) { struct inode *inode; /* inode of guy being linked to */ + struct xfs_name name; int error; =20 inode =3D old_dentry->d_inode; + xfs_dentry_to_name(&name, dentry); =20 igrab(inode); - error =3D xfs_link(XFS_I(dir), XFS_I(inode), dentry); + error =3D xfs_link(XFS_I(dir), XFS_I(inode), &name); if (unlikely(error)) { iput(inode); return -error; @@ -417,11 +432,13 @@ xfs_vn_unlink( struct dentry *dentry) { struct inode *inode; + struct xfs_name name; int error; =20 inode =3D dentry->d_inode; + xfs_dentry_to_name(&name, dentry); =20 - error =3D xfs_remove(XFS_I(dir), dentry); + error =3D xfs_remove(XFS_I(dir), &name, XFS_I(inode)); if (likely(!error)) { xfs_validate_fields(dir); /* size needs update */ xfs_validate_fields(inode); @@ -437,14 +454,15 @@ xfs_vn_symlink( { struct inode *inode; struct xfs_inode *cip =3D NULL; + struct xfs_name name; int error; mode_t mode; =20 mode =3D S_IFLNK | (irix_symlink_mode ? 0777 & ~current->fs->umask : S_IRWXUGO); + xfs_dentry_to_name(&name, dentry); =20 - error =3D xfs_symlink(XFS_I(dir), dentry, (char *)symname, mode, - &cip, NULL); + error =3D xfs_symlink(XFS_I(dir), &name, symname, mode, &cip, NULL); if (unlikely(error)) goto out; =20 @@ -471,9 +489,12 @@ xfs_vn_rmdir( struct dentry *dentry) { struct inode *inode =3D dentry->d_inode; + struct xfs_name name; int error; =20 - error =3D xfs_rmdir(XFS_I(dir), dentry); + xfs_dentry_to_name(&name, dentry); + + error =3D xfs_rmdir(XFS_I(dir), &name, XFS_I(inode)); if (likely(!error)) { xfs_validate_fields(inode); xfs_validate_fields(dir); @@ -489,9 +510,15 @@ xfs_vn_rename( struct dentry *ndentry) { struct inode *new_inode =3D ndentry->d_inode; + struct xfs_name oname; + struct xfs_name nname; int error; =20 - error =3D xfs_rename(XFS_I(odir), odentry, XFS_I(ndir), ndentry); + xfs_dentry_to_name(&oname, odentry); + xfs_dentry_to_name(&nname, ndentry); + + error =3D xfs_rename(XFS_I(odir), &oname, XFS_I(odentry->d_inode), + XFS_I(ndir), &nname); if (likely(!error)) { if (new_inode) xfs_validate_fields(new_inode); Index: kern_ci/fs/xfs/linux-2.6/xfs_vnode.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_vnode.h +++ kern_ci/fs/xfs/linux-2.6/xfs_vnode.h @@ -23,7 +23,6 @@ struct bhv_vattr; struct xfs_iomap; struct attrlist_cursor_kern; =20 -typedef struct dentry bhv_vname_t; typedef __u64 bhv_vnumber_t; typedef struct inode bhv_vnode_t; =20 @@ -211,13 +210,6 @@ static inline bhv_vnode_t *vn_grab(bhv_v } =20 /* - * Vname handling macros. - */ -#define VNAME(dentry) ((char *) (dentry)->d_name.name) -#define VNAMELEN(dentry) ((dentry)->d_name.len) -#define VNAME_TO_INODE(dentry) (XFS_I((dentry)->d_inode)) - -/* * Dealing with bad inodes */ static inline int VN_BAD(bhv_vnode_t *vp) Index: kern_ci/fs/xfs/xfs_dir2.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -44,6 +44,7 @@ #include "xfs_error.h" #include "xfs_vnodeops.h" =20 +struct xfs_name xfs_name_dotdot =3D {"..", 2}; =20 void xfs_dir_mount( @@ -146,8 +147,7 @@ int xfs_dir_createname( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, + struct xfs_name *name, xfs_ino_t inum, /* new entry inode number */ xfs_fsblock_t *first, /* bmap's firstblock */ xfs_bmap_free_t *flist, /* bmap's freeblock list */ @@ -162,9 +162,9 @@ xfs_dir_createname( return rval; XFS_STATS_INC(xs_dir_create); =20 - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D inum; args.dp =3D dp; args.firstblock =3D first; @@ -197,8 +197,7 @@ int xfs_dir_lookup( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, + struct xfs_name *name, xfs_ino_t *inum) /* out: inode number */ { xfs_da_args_t args; @@ -207,18 +206,14 @@ xfs_dir_lookup( =20 ASSERT((dp->i_d.di_mode & S_IFMT) =3D=3D S_IFDIR); XFS_STATS_INC(xs_dir_lookup); + memset(&args, 0, sizeof(xfs_da_args_t)); =20 - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); - args.inumber =3D 0; + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.dp =3D dp; - args.firstblock =3D NULL; - args.flist =3D NULL; - args.total =3D 0; args.whichfork =3D XFS_DATA_FORK; args.trans =3D tp; - args.justcheck =3D args.addname =3D 0; args.oknoent =3D 1; =20 if (dp->i_d.di_format =3D=3D XFS_DINODE_FMT_LOCAL) @@ -247,8 +242,7 @@ int xfs_dir_removename( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, + struct xfs_name *name, xfs_ino_t ino, xfs_fsblock_t *first, /* bmap's firstblock */ xfs_bmap_free_t *flist, /* bmap's freeblock list */ @@ -261,9 +255,9 @@ xfs_dir_removename( ASSERT((dp->i_d.di_mode & S_IFMT) =3D=3D S_IFDIR); XFS_STATS_INC(xs_dir_remove); =20 - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D ino; args.dp =3D dp; args.firstblock =3D first; @@ -329,8 +323,7 @@ int xfs_dir_replace( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, /* name of entry to replace */ - int namelen, + struct xfs_name *name, /* name of entry to replace */ xfs_ino_t inum, /* new inode number */ xfs_fsblock_t *first, /* bmap's firstblock */ xfs_bmap_free_t *flist, /* bmap's freeblock list */ @@ -345,9 +338,9 @@ xfs_dir_replace( if ((rval =3D xfs_dir_ino_validate(tp->t_mountp, inum))) return rval; =20 - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D inum; args.dp =3D dp; args.firstblock =3D first; @@ -379,23 +372,19 @@ int xfs_dir_canenter( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, /* name of entry to add */ - int namelen) + struct xfs_name *name) /* name of entry to add */ { xfs_da_args_t args; int rval; int v; /* type-checking value */ =20 ASSERT((dp->i_d.di_mode & S_IFMT) =3D=3D S_IFDIR); + memset(&args, 0, sizeof(xfs_da_args_t)); =20 - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); - args.inumber =3D 0; + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.dp =3D dp; - args.firstblock =3D NULL; - args.flist =3D NULL; - args.total =3D 0; args.whichfork =3D XFS_DATA_FORK; args.trans =3D tp; args.justcheck =3D args.addname =3D args.oknoent =3D 1; Index: kern_ci/fs/xfs/xfs_dir2.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_dir2.h +++ kern_ci/fs/xfs/xfs_dir2.h @@ -60,6 +60,16 @@ typedef __uint32_t xfs_dir2_db_t; typedef xfs_off_t xfs_dir2_off_t; =20 /* + * Counted string for file names. + */ +struct xfs_name { + const char *name; + int len; +}; + +extern struct xfs_name xfs_name_dotdot; + +/* * Generic directory interface routines */ extern void xfs_dir_startup(void); @@ -68,23 +78,32 @@ extern int xfs_dir_isempty(struct xfs_in extern int xfs_dir_init(struct xfs_trans *tp, struct xfs_inode *dp, struct xfs_inode *pdp); extern int xfs_dir_createname(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t inum, + struct xfs_name *name, xfs_ino_t inum, xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_lookup(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t *inum); + struct xfs_name *name, xfs_ino_t *inum); extern int xfs_dir_removename(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t ino, + struct xfs_name *name, xfs_ino_t ino, xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_replace(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t inum, + struct xfs_name *name, xfs_ino_t inum, xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_canenter(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen); + struct xfs_name *name); extern int xfs_dir_ino_validate(struct xfs_mount *mp, xfs_ino_t ino); =20 +static inline int +xfs_dir_check_canenter(uint resblks, struct xfs_trans *tp, + struct xfs_inode *dp, struct xfs_name *name) +{ + if (resblks) + return 0; + return xfs_dir_canenter(tp, dp, name);; +} + /* * Utility routines for v2 directories. */ Index: kern_ci/fs/xfs/xfs_mount.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_mount.h +++ kern_ci/fs/xfs/xfs_mount.h @@ -73,7 +73,7 @@ typedef int (*xfs_send_destroy_t)(struct typedef int (*xfs_send_namesp_t)(dm_eventtype_t, struct xfs_mount *, struct xfs_inode *, dm_right_t, struct xfs_inode *, dm_right_t, - char *, char *, mode_t, int, int); + const char *, const char *, mode_t, int, int); typedef int (*xfs_send_mount_t)(struct xfs_mount *, dm_right_t, char *, char *); typedef void (*xfs_send_unmount_t)(struct xfs_mount *, struct xfs_inode *, @@ -401,7 +401,7 @@ typedef struct xfs_mount { =20 /* * Allow large block sizes to be reported to userspace programs if the - * "largeio" mount option is used.=20 + * "largeio" mount option is used. * * If compatibility mode is specified, simply return the basic unit of cac= hing * so that we don't get inefficient read/modify/write I/O from user apps. Index: kern_ci/fs/xfs/xfs_rename.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_rename.c +++ kern_ci/fs/xfs/xfs_rename.c @@ -83,17 +83,16 @@ int xfs_rename_skip, xfs_rename_nskip; */ STATIC int xfs_lock_for_rename( - xfs_inode_t *dp1, /* old (source) directory inode */ - xfs_inode_t *dp2, /* new (target) directory inode */ - bhv_vname_t *vname1,/* old entry name */ - bhv_vname_t *vname2,/* new entry name */ - xfs_inode_t **ipp1, /* inode of old entry */ - xfs_inode_t **ipp2, /* inode of new entry, if it + xfs_inode_t *dp1, /* in: old (source) directory inode */ + xfs_inode_t *dp2, /* in: new (target) directory inode */ + struct xfs_name *name2, /* in: new entry name */ + xfs_inode_t **ipp1, /* in/out: inode of old entry */ + xfs_inode_t **ipp2, /* out: inode of new entry, if it already exists, NULL otherwise. */ - xfs_inode_t **i_tab,/* array of inode returned, sorted */ - int *num_inodes) /* number of inodes in array */ + xfs_inode_t **i_tab,/* out: array of inode returned, sorted */ + int *num_inodes) /* out: number of inodes in array */ { - xfs_inode_t *ip1 =3D VNAME_TO_INODE(vname1); + xfs_inode_t *ip1; xfs_inode_t *ip2, *temp; xfs_ino_t inum1, inum2; int error; @@ -101,7 +100,9 @@ xfs_lock_for_rename( uint lock_mode; int diff_dirs =3D (dp1 !=3D dp2); =20 + ip1 =3D *ipp1; ip2 =3D NULL; + ASSERT(ip1); =20 /* * First, find out the current inums of the entries so that we @@ -125,7 +126,7 @@ xfs_lock_for_rename( lock_mode =3D xfs_ilock_map_shared(dp2); } =20 - error =3D xfs_dir_lookup_int(dp2, lock_mode, vname2, &inum2, &ip2); + error =3D xfs_dir_lookup_int(dp2, lock_mode, name2, &inum2, &ip2); if (error =3D=3D ENOENT) { /* target does not need to exist. */ inum2 =3D 0; } else if (error) { @@ -218,12 +219,13 @@ xfs_lock_for_rename( int xfs_rename( xfs_inode_t *src_dp, - bhv_vname_t *src_vname, + struct xfs_name *src_name, + xfs_inode_t *src_ip, xfs_inode_t *target_dp, - bhv_vname_t *target_vname) + struct xfs_name *target_name) { xfs_trans_t *tp; - xfs_inode_t *src_ip, *target_ip; + xfs_inode_t *target_ip; xfs_mount_t *mp =3D src_dp->i_mount; int new_parent; /* moving to a new dir */ int src_is_directory; /* src_name is a directory */ @@ -237,10 +239,6 @@ xfs_rename( int spaceres; int target_link_zero =3D 0; int num_inodes; - char *src_name =3D VNAME(src_vname); - char *target_name =3D VNAME(target_vname); - int src_namelen =3D VNAMELEN(src_vname); - int target_namelen =3D VNAMELEN(target_vname); =20 xfs_itrace_entry(src_dp); xfs_itrace_entry(target_dp); @@ -250,7 +248,7 @@ xfs_rename( error =3D XFS_SEND_NAMESP(mp, DM_EVENT_RENAME, src_dp, DM_RIGHT_NULL, target_dp, DM_RIGHT_NULL, - src_name, target_name, + src_name->name, target_name->name, 0, 0, 0); if (error) { return error; @@ -267,9 +265,8 @@ xfs_rename( * does not exist in the source directory. */ tp =3D NULL; - error =3D xfs_lock_for_rename(src_dp, target_dp, src_vname, - target_vname, &src_ip, &target_ip, inodes, - &num_inodes); + error =3D xfs_lock_for_rename(src_dp, target_dp, target_name, + &src_ip, &target_ip, inodes, &num_inodes); =20 if (error) { /* @@ -316,7 +313,7 @@ xfs_rename( XFS_BMAP_INIT(&free_list, &first_block); tp =3D xfs_trans_alloc(mp, XFS_TRANS_RENAME); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - spaceres =3D XFS_RENAME_SPACE_RES(mp, target_namelen); + spaceres =3D XFS_RENAME_SPACE_RES(mp, target_name->len); error =3D xfs_trans_reserve(tp, spaceres, XFS_RENAME_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_RENAME_LOG_COUNT); if (error =3D=3D ENOSPC) { @@ -374,9 +371,9 @@ xfs_rename( * If there's no space reservation, check the entry will * fit before actually inserting it. */ - if (spaceres =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, target_dp, target_name, - target_namelen))) + error =3D xfs_dir_check_canenter(spaceres, tp, target_dp, + target_name); + if (error) goto error_return; /* * If target does not exist and the rename crosses @@ -384,7 +381,7 @@ xfs_rename( * to account for the ".." reference from the new entry. */ error =3D xfs_dir_createname(tp, target_dp, target_name, - target_namelen, src_ip->i_ino, + src_ip->i_ino, &first_block, &free_list, spaceres); if (error =3D=3D ENOSPC) goto error_return; @@ -424,7 +421,7 @@ xfs_rename( * name at the destination directory, remove it first. */ error =3D xfs_dir_replace(tp, target_dp, target_name, - target_namelen, src_ip->i_ino, + src_ip->i_ino, &first_block, &free_list, spaceres); if (error) goto abort_return; @@ -461,7 +458,8 @@ xfs_rename( * Rewrite the ".." entry to point to the new * directory. */ - error =3D xfs_dir_replace(tp, src_ip, "..", 2, target_dp->i_ino, + error =3D xfs_dir_replace(tp, src_ip, &xfs_name_dotdot, + target_dp->i_ino, &first_block, &free_list, spaceres); ASSERT(error !=3D EEXIST); if (error) @@ -497,7 +495,7 @@ xfs_rename( goto abort_return; } =20 - error =3D xfs_dir_removename(tp, src_dp, src_name, src_namelen, + error =3D xfs_dir_removename(tp, src_dp, src_name, src_ip->i_ino, &first_block, &free_list, spaceres); if (error) goto abort_return; @@ -583,7 +581,7 @@ std_return: (void) XFS_SEND_NAMESP (mp, DM_EVENT_POSTRENAME, src_dp, DM_RIGHT_NULL, target_dp, DM_RIGHT_NULL, - src_name, target_name, + src_name->name, target_name->name, 0, error, 0); } return error; Index: kern_ci/fs/xfs/xfs_utils.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_utils.c +++ kern_ci/fs/xfs/xfs_utils.c @@ -45,7 +45,7 @@ int xfs_dir_lookup_int( xfs_inode_t *dp, uint lock_mode, - bhv_vname_t *dentry, + struct xfs_name *name, xfs_ino_t *inum, xfs_inode_t **ipp) { @@ -53,7 +53,7 @@ xfs_dir_lookup_int( =20 xfs_itrace_entry(dp); =20 - error =3D xfs_dir_lookup(NULL, dp, VNAME(dentry), VNAMELEN(dentry), inum); + error =3D xfs_dir_lookup(NULL, dp, name, inum); if (!error) { /* * Unlock the directory. We do this because we can't Index: kern_ci/fs/xfs/xfs_utils.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_utils.h +++ kern_ci/fs/xfs/xfs_utils.h @@ -21,8 +21,8 @@ #define IRELE(ip) VN_RELE(XFS_ITOV(ip)) #define IHOLD(ip) VN_HOLD(XFS_ITOV(ip)) =20 -extern int xfs_dir_lookup_int (xfs_inode_t *, uint, bhv_vname_t *, xfs_ino= _t *, - xfs_inode_t **); +extern int xfs_dir_lookup_int (xfs_inode_t *, uint, struct xfs_name *, + xfs_ino_t *, xfs_inode_t **); extern int xfs_truncate_file (xfs_mount_t *, xfs_inode_t *); extern int xfs_dir_ialloc (xfs_trans_t **, xfs_inode_t *, mode_t, xfs_nlin= k_t, xfs_dev_t, cred_t *, prid_t, int, Index: kern_ci/fs/xfs/xfs_vnodeops.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_vnodeops.c +++ kern_ci/fs/xfs/xfs_vnodeops.c @@ -1762,7 +1762,7 @@ xfs_inactive( int xfs_lookup( xfs_inode_t *dp, - bhv_vname_t *dentry, + struct xfs_name *name, xfs_inode_t **ipp) { xfs_inode_t *ip; @@ -1776,7 +1776,7 @@ xfs_lookup( return XFS_ERROR(EIO); =20 lock_mode =3D xfs_ilock_map_shared(dp); - error =3D xfs_dir_lookup_int(dp, lock_mode, dentry, &e_inum, &ip); + error =3D xfs_dir_lookup_int(dp, lock_mode, name, &e_inum, &ip); if (!error) { *ipp =3D ip; xfs_itrace_ref(ip); @@ -1788,13 +1788,12 @@ xfs_lookup( int xfs_create( xfs_inode_t *dp, - bhv_vname_t *dentry, + struct xfs_name *name, mode_t mode, xfs_dev_t rdev, xfs_inode_t **ipp, cred_t *credp) { - char *name =3D VNAME(dentry); xfs_mount_t *mp =3D dp->i_mount; xfs_inode_t *ip; xfs_trans_t *tp; @@ -1808,17 +1807,14 @@ xfs_create( xfs_prid_t prid; struct xfs_dquot *udqp, *gdqp; uint resblks; - int namelen; =20 ASSERT(!*ipp); xfs_itrace_entry(dp); =20 - namelen =3D VNAMELEN(dentry); - if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_CREATE, dp, DM_RIGHT_NULL, NULL, - DM_RIGHT_NULL, name, NULL, + DM_RIGHT_NULL, name->name, NULL, mode, 0, 0); =20 if (error) @@ -1850,7 +1846,7 @@ xfs_create( =20 tp =3D xfs_trans_alloc(mp, XFS_TRANS_CREATE); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - resblks =3D XFS_CREATE_SPACE_RES(mp, namelen); + resblks =3D XFS_CREATE_SPACE_RES(mp, name->len); /* * Initially assume that the file does not exist and * reserve the resources for that case. If that is not @@ -1883,7 +1879,8 @@ xfs_create( if (error) goto error_return; =20 - if (resblks =3D=3D 0 && (error =3D xfs_dir_canenter(tp, dp, name, namelen= ))) + error =3D xfs_dir_check_canenter(resblks, tp, dp, name); + if (error) goto error_return; error =3D xfs_dir_ialloc(&tp, dp, mode, 1, rdev, credp, prid, resblks > 0, @@ -1913,7 +1910,7 @@ xfs_create( xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL); unlock_dp_on_error =3D B_FALSE; =20 - error =3D xfs_dir_createname(tp, dp, name, namelen, ip->i_ino, + error =3D xfs_dir_createname(tp, dp, name, ip->i_ino, &first_block, &free_list, resblks ? resblks - XFS_IALLOC_SPACE_RES(mp) : 0); if (error) { @@ -1974,7 +1971,7 @@ std_return: (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTCREATE, dp, DM_RIGHT_NULL, *ipp ? ip : NULL, - DM_RIGHT_NULL, name, NULL, + DM_RIGHT_NULL, name->name, NULL, mode, error, 0); } return error; @@ -2266,12 +2263,10 @@ int remove_which_error_return =3D 0; int xfs_remove( xfs_inode_t *dp, - bhv_vname_t *dentry) + struct xfs_name *name, + xfs_inode_t *ip) { - char *name =3D VNAME(dentry); xfs_mount_t *mp =3D dp->i_mount; - xfs_inode_t *ip =3D VNAME_TO_INODE(dentry); - int namelen =3D VNAMELEN(dentry); xfs_trans_t *tp =3D NULL; int error =3D 0; xfs_bmap_free_t free_list; @@ -2287,9 +2282,9 @@ xfs_remove( return XFS_ERROR(EIO); =20 if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { - error =3D XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, - DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - name, NULL, ip->i_d.di_mode, 0, 0); + error =3D XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, DM_RIGHT_NULL, + NULL, DM_RIGHT_NULL, name->name, NULL, + ip->i_d.di_mode, 0, 0); if (error) return error; } @@ -2374,7 +2369,7 @@ xfs_remove( * Entry must exist since we did a lookup in xfs_lock_dir_and_entry. */ XFS_BMAP_INIT(&free_list, &first_block); - error =3D xfs_dir_removename(tp, dp, name, namelen, ip->i_ino, + error =3D xfs_dir_removename(tp, dp, name, ip->i_ino, &first_block, &free_list, 0); if (error) { ASSERT(error !=3D ENOENT); @@ -2442,7 +2437,7 @@ xfs_remove( (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - name, NULL, ip->i_d.di_mode, error, 0); + name->name, NULL, ip->i_d.di_mode, error, 0); } return error; =20 @@ -2472,7 +2467,7 @@ int xfs_link( xfs_inode_t *tdp, xfs_inode_t *sip, - bhv_vname_t *dentry) + struct xfs_name *target_name) { xfs_mount_t *mp =3D tdp->i_mount; xfs_trans_t *tp; @@ -2483,13 +2478,10 @@ xfs_link( int cancel_flags; int committed; int resblks; - char *target_name =3D VNAME(dentry); - int target_namelen; =20 xfs_itrace_entry(tdp); xfs_itrace_entry(sip); =20 - target_namelen =3D VNAMELEN(dentry); ASSERT(!S_ISDIR(sip->i_d.di_mode)); =20 if (XFS_FORCED_SHUTDOWN(mp)) @@ -2499,7 +2491,7 @@ xfs_link( error =3D XFS_SEND_NAMESP(mp, DM_EVENT_LINK, tdp, DM_RIGHT_NULL, sip, DM_RIGHT_NULL, - target_name, NULL, 0, 0, 0); + target_name->name, NULL, 0, 0, 0); if (error) return error; } @@ -2514,7 +2506,7 @@ xfs_link( =20 tp =3D xfs_trans_alloc(mp, XFS_TRANS_LINK); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - resblks =3D XFS_LINK_SPACE_RES(mp, target_namelen); + resblks =3D XFS_LINK_SPACE_RES(mp, target_name->len); error =3D xfs_trans_reserve(tp, resblks, XFS_LINK_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_LINK_LOG_COUNT); if (error =3D=3D ENOSPC) { @@ -2566,13 +2558,13 @@ xfs_link( goto error_return; } =20 - if (resblks =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, tdp, target_name, target_namelen))) + error =3D xfs_dir_check_canenter(resblks, tp, tdp, target_name); + if (error) goto error_return; =20 XFS_BMAP_INIT(&free_list, &first_block); =20 - error =3D xfs_dir_createname(tp, tdp, target_name, target_namelen, + error =3D xfs_dir_createname(tp, tdp, target_name, sip->i_ino, &first_block, &free_list, resblks); if (error) @@ -2610,7 +2602,7 @@ std_return: (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTLINK, tdp, DM_RIGHT_NULL, sip, DM_RIGHT_NULL, - target_name, NULL, 0, error, 0); + target_name->name, NULL, 0, error, 0); } return error; =20 @@ -2627,13 +2619,11 @@ std_return: int xfs_mkdir( xfs_inode_t *dp, - bhv_vname_t *dentry, + struct xfs_name *dir_name, mode_t mode, xfs_inode_t **ipp, cred_t *credp) { - char *dir_name =3D VNAME(dentry); - int dir_namelen =3D VNAMELEN(dentry); xfs_mount_t *mp =3D dp->i_mount; xfs_inode_t *cdp; /* inode of created dir */ xfs_trans_t *tp; @@ -2657,7 +2647,7 @@ xfs_mkdir( if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_CREATE, dp, DM_RIGHT_NULL, NULL, - DM_RIGHT_NULL, dir_name, NULL, + DM_RIGHT_NULL, dir_name->name, NULL, mode, 0, 0); if (error) return error; @@ -2686,7 +2676,7 @@ xfs_mkdir( =20 tp =3D xfs_trans_alloc(mp, XFS_TRANS_MKDIR); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - resblks =3D XFS_MKDIR_SPACE_RES(mp, dir_namelen); + resblks =3D XFS_MKDIR_SPACE_RES(mp, dir_name->len); error =3D xfs_trans_reserve(tp, resblks, XFS_MKDIR_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_MKDIR_LOG_COUNT); if (error =3D=3D ENOSPC) { @@ -2718,8 +2708,8 @@ xfs_mkdir( if (error) goto error_return; =20 - if (resblks =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, dp, dir_name, dir_namelen))) + error =3D xfs_dir_check_canenter(resblks, tp, dp, dir_name); + if (error) goto error_return; /* * create the directory inode. @@ -2748,7 +2738,7 @@ xfs_mkdir( =20 XFS_BMAP_INIT(&free_list, &first_block); =20 - error =3D xfs_dir_createname(tp, dp, dir_name, dir_namelen, cdp->i_ino, + error =3D xfs_dir_createname(tp, dp, dir_name, cdp->i_ino, &first_block, &free_list, resblks ? resblks - XFS_IALLOC_SPACE_RES(mp) : 0); if (error) { @@ -2815,7 +2805,7 @@ std_return: dp, DM_RIGHT_NULL, created ? cdp : NULL, DM_RIGHT_NULL, - dir_name, NULL, + dir_name->name, NULL, mode, error, 0); } return error; @@ -2839,13 +2829,11 @@ std_return: int xfs_rmdir( xfs_inode_t *dp, - bhv_vname_t *dentry) + struct xfs_name *name, + xfs_inode_t *cdp) { bhv_vnode_t *dir_vp =3D XFS_ITOV(dp); - char *name =3D VNAME(dentry); - int namelen =3D VNAMELEN(dentry); xfs_mount_t *mp =3D dp->i_mount; - xfs_inode_t *cdp =3D VNAME_TO_INODE(dentry); xfs_trans_t *tp; int error; xfs_bmap_free_t free_list; @@ -2863,8 +2851,8 @@ xfs_rmdir( if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, DM_RIGHT_NULL, - NULL, DM_RIGHT_NULL, - name, NULL, cdp->i_d.di_mode, 0, 0); + NULL, DM_RIGHT_NULL, name->name, + NULL, cdp->i_d.di_mode, 0, 0); if (error) return XFS_ERROR(error); } @@ -2958,7 +2946,7 @@ xfs_rmdir( goto error_return; } =20 - error =3D xfs_dir_removename(tp, dp, name, namelen, cdp->i_ino, + error =3D xfs_dir_removename(tp, dp, name, cdp->i_ino, &first_block, &free_list, resblks); if (error) goto error1; @@ -3038,7 +3026,7 @@ xfs_rmdir( (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - name, NULL, cdp->i_d.di_mode, + name->name, NULL, cdp->i_d.di_mode, error, 0); } return error; @@ -3056,8 +3044,8 @@ xfs_rmdir( int xfs_symlink( xfs_inode_t *dp, - bhv_vname_t *dentry, - char *target_path, + struct xfs_name *link_name, + const char *target_path, mode_t mode, xfs_inode_t **ipp, cred_t *credp) @@ -3077,15 +3065,13 @@ xfs_symlink( int nmaps; xfs_bmbt_irec_t mval[SYMLINK_MAPS]; xfs_daddr_t d; - char *cur_chunk; + const char *cur_chunk; int byte_cnt; int n; xfs_buf_t *bp; xfs_prid_t prid; struct xfs_dquot *udqp, *gdqp; uint resblks; - char *link_name =3D VNAME(dentry); - int link_namelen; =20 *ipp =3D NULL; error =3D 0; @@ -3097,8 +3083,6 @@ xfs_symlink( if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); =20 - link_namelen =3D VNAMELEN(dentry); - /* * Check component lengths of the target path name. */ @@ -3134,7 +3118,7 @@ xfs_symlink( if (DM_EVENT_ENABLED(dp, DM_EVENT_SYMLINK)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_SYMLINK, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - link_name, target_path, 0, 0, 0); + link_name->name, target_path, 0, 0, 0); if (error) return error; } @@ -3166,7 +3150,7 @@ xfs_symlink( fs_blocks =3D 0; else fs_blocks =3D XFS_B_TO_FSB(mp, pathlen); - resblks =3D XFS_SYMLINK_SPACE_RES(mp, link_namelen, fs_blocks); + resblks =3D XFS_SYMLINK_SPACE_RES(mp, link_name->len, fs_blocks); error =3D xfs_trans_reserve(tp, resblks, XFS_SYMLINK_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_SYMLINK_LOG_COUNT); if (error =3D=3D ENOSPC && fs_blocks =3D=3D 0) { @@ -3200,8 +3184,8 @@ xfs_symlink( /* * Check for ability to enter directory entry, if no space reserved. */ - if (resblks =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, dp, link_name, link_namelen))) + error =3D xfs_dir_check_canenter(resblks, tp, dp, link_name); + if (error) goto error_return; /* * Initialize the bmap freelist prior to calling either @@ -3293,7 +3277,7 @@ xfs_symlink( /* * Create the directory entry for the symlink. */ - error =3D xfs_dir_createname(tp, dp, link_name, link_namelen, ip->i_ino, + error =3D xfs_dir_createname(tp, dp, link_name, ip->i_ino, &first_block, &free_list, resblks); if (error) goto error1; @@ -3338,8 +3322,8 @@ std_return: (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTSYMLINK, dp, DM_RIGHT_NULL, error ? NULL : ip, - DM_RIGHT_NULL, link_name, target_path, - 0, error, 0); + DM_RIGHT_NULL, link_name->name, + target_path, 0, error, 0); } =20 if (!error) Index: kern_ci/fs/xfs/xfs_vnodeops.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_vnodeops.h +++ kern_ci/fs/xfs/xfs_vnodeops.h @@ -12,7 +12,7 @@ struct pipe_inode_info; struct uio; struct xfs_inode; struct xfs_iomap; - +struct xfs_name; =20 int xfs_open(struct xfs_inode *ip); int xfs_getattr(struct xfs_inode *ip, struct bhv_vattr *vap, int flags); @@ -23,20 +23,22 @@ int xfs_fsync(struct xfs_inode *ip, int=20 xfs_off_t stop); int xfs_release(struct xfs_inode *ip); int xfs_inactive(struct xfs_inode *ip); -int xfs_lookup(struct xfs_inode *dp, bhv_vname_t *dentry, +int xfs_lookup(struct xfs_inode *dp, struct xfs_name *name, struct xfs_inode **ipp); -int xfs_create(struct xfs_inode *dp, bhv_vname_t *dentry, mode_t mode, +int xfs_create(struct xfs_inode *dp, struct xfs_name *name, mode_t mode, xfs_dev_t rdev, struct xfs_inode **ipp, struct cred *credp); -int xfs_remove(struct xfs_inode *dp, bhv_vname_t *dentry); +int xfs_remove(struct xfs_inode *dp, struct xfs_name *name, + struct xfs_inode *ip); int xfs_link(struct xfs_inode *tdp, struct xfs_inode *sip, - bhv_vname_t *dentry); -int xfs_mkdir(struct xfs_inode *dp, bhv_vname_t *dentry, + struct xfs_name *target_name); +int xfs_mkdir(struct xfs_inode *dp, struct xfs_name *dir_name, mode_t mode, struct xfs_inode **ipp, struct cred *credp); -int xfs_rmdir(struct xfs_inode *dp, bhv_vname_t *dentry); +int xfs_rmdir(struct xfs_inode *dp, struct xfs_name *name, + struct xfs_inode *cdp); int xfs_readdir(struct xfs_inode *dp, void *dirent, size_t bufsize, xfs_off_t *offset, filldir_t filldir); -int xfs_symlink(struct xfs_inode *dp, bhv_vname_t *dentry, - char *target_path, mode_t mode, struct xfs_inode **ipp, +int xfs_symlink(struct xfs_inode *dp, struct xfs_name *link_name, + const char *target_path, mode_t mode, struct xfs_inode **ipp, struct cred *credp); int xfs_inode_flush(struct xfs_inode *ip, int flags); int xfs_set_dmattrs(struct xfs_inode *ip, u_int evmask, u_int16_t state); @@ -44,8 +46,9 @@ int xfs_reclaim(struct xfs_inode *ip); int xfs_change_file_space(struct xfs_inode *ip, int cmd, xfs_flock64_t *bf, xfs_off_t offset, struct cred *credp, int attr_flags); -int xfs_rename(struct xfs_inode *src_dp, bhv_vname_t *src_vname, - struct xfs_inode *target_dp, bhv_vname_t *target_vname); +int xfs_rename(struct xfs_inode *src_dp, struct xfs_name *src_name, + struct xfs_inode *src_ip, struct xfs_inode *target_dp, + struct xfs_name *target_name); int xfs_attr_get(struct xfs_inode *ip, const char *name, char *value, int *valuelenp, int flags, cred_t *cred); int xfs_attr_set(struct xfs_inode *dp, const char *name, char *value, ------------mTJiuIKRrFB793e0LEPxBc-- From owner-xfs@oss.sgi.com Tue Apr 8 00:41:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 00:41:10 -0700 (PDT) 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_31 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 m387f35k006545 for ; Tue, 8 Apr 2008 00:41:03 -0700 X-ASG-Debug-ID: 1207640497-1fda03bf0000-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 486DD75E889 for ; Tue, 8 Apr 2008 00:41:37 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id cS0hW3hPsBK32qOX for ; Tue, 08 Apr 2008 00:41:37 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jj8S2-00019T-B5; Tue, 08 Apr 2008 07:41:06 +0000 Date: Tue, 8 Apr 2008 03:41:06 -0400 From: Christoph Hellwig To: Barry Naujok Cc: Christoph Hellwig , "xfs@oss.sgi.com" , xfs-dev X-ASG-Orig-Subj: Re: [REVIEW] cleanup - remove bhv_vname_t Subject: Re: [REVIEW] cleanup - remove bhv_vname_t Message-ID: <20080408074106.GA3207@infradead.org> References: <20080408063822.GA21876@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207640501 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.1, rules version 3.1.47173 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15259 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Tue, Apr 08, 2008 at 04:50:26PM +1000, Barry Naujok wrote: >>> +static inline struct xfs_name * >>> +xfs_dentry_name( >>> + struct xfs_name *namep, >>> + struct dentry *dentry) >>> +{ >>> + namep->name = dentry->d_name.name; >>> + namep->len = dentry->d_name.len; >>> + return namep; >>> +} >> >> As mentioned in my comment to the CI series: shouldn't you just use >> a struct qstr instead of adding a new struct xfs_name? > > Keeping a clean line between fs/xfs and fs/xfs/linux-2.6. But this means more stack useage and more copies in every namespace related operation. I don'y yhink it's a good tradeoff. If you really care about a clear separatation add a #define or typedef for xfs_name to struct qstr. >> Also please don't add inline for this. >>> +xfs_name_t xfs_name_dotdot = {"..", 2}; >> >> const? > > I should change all calls using xfs_name to use const xfs_name? I just mean this global variable should be declared const. Then again all the xfs_name arguments are immutable, so it might be worth marking them const. From owner-xfs@oss.sgi.com Tue Apr 8 00:47:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 00:47:19 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_31 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 m387l5g2007708 for ; Tue, 8 Apr 2008 00:47:11 -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 RAA29310; Tue, 8 Apr 2008 17:47:35 +1000 Date: Tue, 08 Apr 2008 17:48:58 +1000 To: "Christoph Hellwig" Subject: Re: [REVIEW] cleanup - remove bhv_vname_t From: "Barry Naujok" Organization: SGI Cc: "xfs@oss.sgi.com" , xfs-dev Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080408063822.GA21876@infradead.org> <20080408074106.GA3207@infradead.org> Message-ID: In-Reply-To: <20080408074106.GA3207@infradead.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m387lDg2007727 X-archive-position: 15260 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Tue, 08 Apr 2008 17:41:06 +1000, Christoph Hellwig wrote: > On Tue, Apr 08, 2008 at 04:50:26PM +1000, Barry Naujok wrote: >>>> +static inline struct xfs_name * >>>> +xfs_dentry_name( >>>> + struct xfs_name *namep, >>>> + struct dentry *dentry) >>>> +{ >>>> + namep->name = dentry->d_name.name; >>>> + namep->len = dentry->d_name.len; >>>> + return namep; >>>> +} >>> >>> As mentioned in my comment to the CI series: shouldn't you just use >>> a struct qstr instead of adding a new struct xfs_name? >> >> Keeping a clean line between fs/xfs and fs/xfs/linux-2.6. > > But this means more stack useage and more copies in every namespace > related operation. I don'y yhink it's a good tradeoff. This will happen anyway for Unicode NLS support. Also, this patch doesn't increase stack usage anywhere and some have reduced stack usage. > If you really care about a clear separatation add a #define or typedef > for xfs_name to struct qstr. and qstr is platform dependant (yes, I know you said it's premature!) Barry. From owner-xfs@oss.sgi.com Tue Apr 8 01:51:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 01:51:56 -0700 (PDT) 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 m388pln3016448 for ; Tue, 8 Apr 2008 01:51:48 -0700 X-ASG-Debug-ID: 1207644745-6758027d0000-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 0C06675ECA7 for ; Tue, 8 Apr 2008 01:52:25 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id FcwGf2XfMWhEwhIn for ; Tue, 08 Apr 2008 01:52:25 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jj9YX-0005LM-Mb; Tue, 08 Apr 2008 08:51:53 +0000 Date: Tue, 8 Apr 2008 04:51:53 -0400 From: Christoph Hellwig To: Barry Naujok Cc: "xfs@oss.sgi.com" , xfs-dev X-ASG-Orig-Subj: Re: [REVIEW #2] cleanup - remove bhv_vname_t Subject: Re: [REVIEW #2] cleanup - remove bhv_vname_t Message-ID: <20080408085153.GA19699@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.17 (2007-11-01) 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: 1207644746 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.1, rules version 3.1.47179 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15261 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs > --- kern_ci.orig/fs/xfs/xfs_dir2.h > +++ kern_ci/fs/xfs/xfs_dir2.h > @@ -60,6 +60,16 @@ typedef __uint32_t xfs_dir2_db_t; > typedef xfs_off_t xfs_dir2_off_t; > > /* > + * Counted string for file names. > + */ > +struct xfs_name { > + const char *name; > + int len; > +}; > + > +extern struct xfs_name xfs_name_dotdot; I think these should be in a different header as they are used a lot outside the low-level directory code. > +static inline int > +xfs_dir_check_canenter(uint resblks, struct xfs_trans *tp, > + struct xfs_inode *dp, struct xfs_name *name) > +{ > + if (resblks) > + return 0; > + return xfs_dir_canenter(tp, dp, name);; > +} Probably makes sense to have this out of line. > STATIC int > xfs_lock_for_rename( > - xfs_inode_t *dp1, /* old (source) directory inode */ > - xfs_inode_t *dp2, /* new (target) directory inode */ > - bhv_vname_t *vname1,/* old entry name */ > - bhv_vname_t *vname2,/* new entry name */ > - xfs_inode_t **ipp1, /* inode of old entry */ > - xfs_inode_t **ipp2, /* inode of new entry, if it > + xfs_inode_t *dp1, /* in: old (source) directory inode */ > + xfs_inode_t *dp2, /* in: new (target) directory inode */ > + struct xfs_name *name2, /* in: new entry name */ > + xfs_inode_t **ipp1, /* in/out: inode of old entry */ > + xfs_inode_t **ipp2, /* out: inode of new entry, if it > already exists, NULL otherwise. */ > - xfs_inode_t **i_tab,/* array of inode returned, sorted */ > - int *num_inodes) /* number of inodes in array */ > + xfs_inode_t **i_tab,/* out: array of inode returned, sorted */ > + int *num_inodes) /* out: number of inodes in array */ This function needs some more love :) If you follow the flow *ipp1 can never be zeroed out so just pass a normal *ip1 pointer. Similarly the loop to find *ipp2 to again can be killed because we know it's there. New prototype should be something like: STATIC int xfs_lock_for_rename( + xfs_inode_t *dp1, /* in: old (source) directory inode */ + xfs_inode_t *dp2, /* in: new (target) directory inode */ + xfs_inode_t *ip1, /* in: inode of old entry */ + struct xfs_name *name2, /* in: new entry name */ + xfs_inode_t **ipp2, /* out: inode of new entry, if it already exists, NULL otherwise. */ + xfs_inode_t **i_tab,/* out: array of inode returned, sorted */ + int *num_inodes) /* out: number of inodes in array */ From owner-xfs@oss.sgi.com Tue Apr 8 03:49:20 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 03:50:30 -0700 (PDT) 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 m38AnFnY000649 for ; Tue, 8 Apr 2008 03:49:20 -0700 X-ASG-Debug-ID: 1207651793-7c2400c30000-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 C4F6D1286083 for ; Tue, 8 Apr 2008 03:49:53 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id SxGY1haGtGmLE5IT for ; Tue, 08 Apr 2008 03:49:53 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JjBNj-0002ZL-5h; Tue, 08 Apr 2008 10:48:51 +0000 Date: Tue, 8 Apr 2008 06:48:51 -0400 From: Christoph Hellwig To: Barry Naujok Cc: "xfs@oss.sgi.com" , xfs-dev X-ASG-Orig-Subj: Re: [REVIEW #2] cleanup - remove bhv_vname_t Subject: Re: [REVIEW #2] cleanup - remove bhv_vname_t Message-ID: <20080408104851.GA25647@infradead.org> References: <20080408085153.GA19699@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080408085153.GA19699@infradead.org> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207651793 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.1, rules version 3.1.47186 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15262 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Tue, Apr 08, 2008 at 04:51:53AM -0400, Christoph Hellwig wrote: > > +static inline int > > +xfs_dir_check_canenter(uint resblks, struct xfs_trans *tp, > > + struct xfs_inode *dp, struct xfs_name *name) > > +{ > > + if (resblks) > > + return 0; > > + return xfs_dir_canenter(tp, dp, name);; > > +} > > Probably makes sense to have this out of line. Actuallt this is the only caller of xfs_dir_canenter with your patch so you should merge the resblks check into xfs_dir_canenter. Please also add a comment on why we do the check. Also resblks is normally the last argument to functions, we should follow that convention here. From owner-xfs@oss.sgi.com Tue Apr 8 04:45:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 04:45:15 -0700 (PDT) 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 m38Bj6A8014833 for ; Tue, 8 Apr 2008 04:45:08 -0700 X-ASG-Debug-ID: 1207655144-6814001d0000-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 E61FB760290 for ; Tue, 8 Apr 2008 04:45:44 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 3LnLNaYIl5YGHOrW for ; Tue, 08 Apr 2008 04:45:44 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JjCGH-00009X-Kt; Tue, 08 Apr 2008 11:45:13 +0000 Date: Tue, 8 Apr 2008 07:45:13 -0400 From: Christoph Hellwig To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 0/7] XFS: case-insensitive lookup and Unicode support Subject: Re: [PATCH 0/7] XFS: case-insensitive lookup and Unicode support Message-ID: <20080408114513.GA31734@infradead.org> References: <20080402062508.017738664@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080402062508.017738664@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207655144 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.1, rules version 3.1.47188 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15264 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs btw, a little comment on how to proceed. After your xfs_name patch it would be good to get the nameops and leafn cleanup in as almost independent cleanups and then the ascii only CI but already using the complex and correct lookup method. I think unicocde will take a bit longer to sort out and getting the simpler bit in first would be helpful. From owner-xfs@oss.sgi.com Tue Apr 8 08:50:21 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 08:50:30 -0700 (PDT) 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.0 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 m38FoHwQ022540 for ; Tue, 8 Apr 2008 08:50:19 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id BAA08901; Wed, 9 Apr 2008 01:50:49 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m38FomsT126564084; Wed, 9 Apr 2008 01:50:49 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m38FohqC126564844; Wed, 9 Apr 2008 01:50:43 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 9 Apr 2008 01:50:43 +1000 From: David Chinner To: Michael Nishimoto Cc: XFS Mailing List Subject: Re: inconsistent xfs log record Message-ID: <20080408155043.GZ108924158@sgi.com> References: <47FAD04D.5080308@agami.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <47FAD04D.5080308@agami.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15265 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 07, 2008 at 06:54:21PM -0700, Michael Nishimoto wrote: > I've just finished analyzing an xfs filesystem which won't recover. > An inconsistent log record has 332 log operations but the num_logop field > in the record header says 333 log operations. The result is that xfs > recovery > complains with "bad clientid" because recovery eventually attempts to decode > garbage. > > The log record really has 332 log ops (I counted!). > > Looking through xlog_write(), I don't see any way that record_cnt can be > bumped > without also writing out a log operation. Yeah, i remember going through this a while back tracking done the same error on snapshot images (was a freeze problem) and I couldn't see how it would happen, either. Still, it's a single bit error so that's always suspicious - can you reproduce this error reliably? > Does this issue ring a bell with anyone? FWIW, I have had 2-3 failures with a "bad clientid" on a 64k page size ia64 box since I switched from 16k page size about a month ago. I haven't seen any consistent pattern to the failure yet, nor had a chance to perform any sort of triage on the problem so I can't say whether I'm seeing the same issue... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Tue Apr 8 12:30:58 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 12:31:16 -0700 (PDT) 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 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 m38JUu5F029735 for ; Tue, 8 Apr 2008 12:30:58 -0700 X-ASG-Debug-ID: 1207683093-424a00150000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ext.agami.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0CC951288641 for ; Tue, 8 Apr 2008 12:31:33 -0700 (PDT) Received: from ext.agami.com (64.221.212.177.ptr.us.xo.net [64.221.212.177]) by cuda.sgi.com with ESMTP id dlUUNUDCjQJDf2Wj for ; Tue, 08 Apr 2008 12:31:33 -0700 (PDT) Received: from agami.com (mail [192.168.168.5]) by ext.agami.com (8.12.5/8.12.5) with ESMTP id m38GEG9d008016 for ; Tue, 8 Apr 2008 09:14:16 -0700 Received: from mx1.agami.com (mx1.agami.com [10.123.10.30]) by agami.com (8.12.11/8.12.11) with ESMTP id m38GEGgY006412 for ; Tue, 8 Apr 2008 09:14:16 -0700 Received: from [127.0.0.1] ([10.123.1.239]) by mx1.agami.com with Microsoft SMTPSVC(6.0.3790.1830); Tue, 8 Apr 2008 09:14:39 -0700 Message-ID: <47FB99F9.1040703@agami.com> Date: Tue, 08 Apr 2008 09:14:49 -0700 From: Michael Nishimoto User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2) Gecko/20040804 Netscape/7.2 (ax) X-Accept-Language: en-us, en MIME-Version: 1.0 To: David Chinner CC: XFS Mailing List X-ASG-Orig-Subj: Re: inconsistent xfs log record Subject: Re: inconsistent xfs log record References: <47FAD04D.5080308@agami.com> <20080408155043.GZ108924158@sgi.com> In-Reply-To: <20080408155043.GZ108924158@sgi.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 08 Apr 2008 16:14:39.0710 (UTC) FILETIME=[A591D7E0:01C89993] X-Barracuda-Connect: 64.221.212.177.ptr.us.xo.net[64.221.212.177] X-Barracuda-Start-Time: 1207683094 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.92 X-Barracuda-Spam-Status: No, SCORE=-1.92 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47220 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15266 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: miken@agami.com Precedence: bulk X-list: xfs David Chinner wrote: > On Mon, Apr 07, 2008 at 06:54:21PM -0700, Michael Nishimoto wrote: > > I've just finished analyzing an xfs filesystem which won't recover. > > An inconsistent log record has 332 log operations but the num_logop field > > in the record header says 333 log operations. The result is that xfs > > recovery > > complains with "bad clientid" because recovery eventually attempts to > decode > > garbage. > > > > The log record really has 332 log ops (I counted!). > > > > Looking through xlog_write(), I don't see any way that record_cnt can be > > bumped > > without also writing out a log operation. > > Yeah, i remember going through this a while back tracking done the same > error on snapshot images (was a freeze problem) and I couldn't see how > it would happen, either. > > Still, it's a single bit error so that's always suspicious - can you > reproduce this error reliably? We haven't tried doing this yet, but I doubt we will because the test that found this problem is not unusual. We just pulled power while alot of activity was present. A single bit, but also off-by-one. :-) > > > Does this issue ring a bell with anyone? > > FWIW, I have had 2-3 failures with a "bad clientid" on a 64k page size ia64 > box since I switched from 16k page size about a month ago. I haven't > seen any > consistent pattern to the failure yet, nor had a chance to perform any > sort of triage on the problem so I can't say whether I'm seeing the same > issue... > > Cheers, > > Dave. > -- > Dave Chinner > Principal Engineer > SGI Australian Software Group > From owner-xfs@oss.sgi.com Tue Apr 8 14:35:56 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 14:36:03 -0700 (PDT) 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.4 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 m38LZsBn014378 for ; Tue, 8 Apr 2008 14:35:56 -0700 X-ASG-Debug-ID: 1207690591-511802890000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ext.agami.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0FC4F10790D1 for ; Tue, 8 Apr 2008 14:36:31 -0700 (PDT) Received: from ext.agami.com (64.221.212.177.ptr.us.xo.net [64.221.212.177]) by cuda.sgi.com with ESMTP id AH6PC1sWAOHqaOV0 for ; Tue, 08 Apr 2008 14:36:31 -0700 (PDT) Received: from agami.com (mail [192.168.168.5]) by ext.agami.com (8.12.5/8.12.5) with ESMTP id m38La79d020176 for ; Tue, 8 Apr 2008 14:36:08 -0700 Received: from mx1.agami.com (mx1.agami.com [10.123.10.30]) by agami.com (8.12.11/8.12.11) with ESMTP id m38La1jn029545 for ; Tue, 8 Apr 2008 14:36:03 -0700 Received: from [10.123.4.142] ([10.123.4.142]) by mx1.agami.com with Microsoft SMTPSVC(6.0.3790.1830); Tue, 8 Apr 2008 14:36:24 -0700 Message-ID: <47FBE558.1020106@agami.com> Date: Tue, 08 Apr 2008 14:36:24 -0700 From: Michael Nishimoto User-Agent: Mail/News 1.5.0.4 (X11/20060629) MIME-Version: 1.0 To: David Chinner CC: XFS Mailing List X-ASG-Orig-Subj: Re: inconsistent xfs log record Subject: Re: inconsistent xfs log record References: <47FAD04D.5080308@agami.com> <20080408155043.GZ108924158@sgi.com> In-Reply-To: <20080408155043.GZ108924158@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 08 Apr 2008 21:36:24.0425 (UTC) FILETIME=[98139590:01C899C0] X-Barracuda-Connect: 64.221.212.177.ptr.us.xo.net[64.221.212.177] X-Barracuda-Start-Time: 1207690593 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.92 X-Barracuda-Spam-Status: No, SCORE=-1.92 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47230 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15267 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: miken@agami.com Precedence: bulk X-list: xfs David Chinner wrote: > On Mon, Apr 07, 2008 at 06:54:21PM -0700, Michael Nishimoto wrote: > > I've just finished analyzing an xfs filesystem which won't recover. > > An inconsistent log record has 332 log operations but the num_logop field > > in the record header says 333 log operations. The result is that xfs > > recovery > > complains with "bad clientid" because recovery eventually attempts to > decode > > garbage. > > > > The log record really has 332 log ops (I counted!). > > > > Looking through xlog_write(), I don't see any way that record_cnt can be > > bumped > > without also writing out a log operation. > > Yeah, i remember going through this a while back tracking done the same > error on snapshot images (was a freeze problem) and I couldn't see how > it would happen, either. > > Still, it's a single bit error so that's always suspicious - can you > reproduce this error reliably? > > > Does this issue ring a bell with anyone? > > FWIW, I have had 2-3 failures with a "bad clientid" on a 64k page size ia64 > box since I switched from 16k page size about a month ago. I haven't > seen any > consistent pattern to the failure yet, nor had a chance to perform any > sort of triage on the problem so I can't say whether I'm seeing the same > issue... > > Cheers, > > Dave. > -- > Dave Chinner > Principal Engineer > SGI Australian Software Group When you saw the problem, did you also have an off-by-one or one-bit difference between num_logops and the real count? Michael From owner-xfs@oss.sgi.com Tue Apr 8 18:48:56 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 18:50:05 -0700 (PDT) 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.0 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 m391mpwJ019980 for ; Tue, 8 Apr 2008 18:48:55 -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 LAA21594; Wed, 9 Apr 2008 11:49:20 +1000 Date: Wed, 09 Apr 2008 11:53:20 +1000 To: "Christoph Hellwig" Subject: Re: [PATCH 0/7] XFS: case-insensitive lookup and Unicode support From: "Barry Naujok" Organization: SGI Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080408114513.GA31734@infradead.org> Content-Transfer-Encoding: 7bit Message-ID: In-Reply-To: <20080408114513.GA31734@infradead.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15268 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Tue, 08 Apr 2008 21:45:13 +1000, Christoph Hellwig wrote: > btw, a little comment on how to proceed. After your xfs_name patch it > would be good to get the nameops and leafn cleanup in as almost > independent cleanups and then the ascii only CI but already using the > complex and correct lookup method. I think unicocde will take a bit > longer to sort out and getting the simpler bit in first would be > helpful. Yep, that is how I was proceeding when working on the return name patch with the xfs_vn_ci_lookup code. So, it will be: 1 xfs_name 2 leafn refactor 3 nameops 4 ascii ci 5 unicode ci 6 nls With NLS, it would be very nice if the Linux VFS or some layer above always pushed UTF-8 strings down rather than handling it in the filesystems that require it (there are about half a dozen at least that I'm aware of). Barry. From owner-xfs@oss.sgi.com Tue Apr 8 19:07:52 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 19:07:59 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_45 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 m3927mxM022390 for ; Tue, 8 Apr 2008 19:07:51 -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 MAA21945; Wed, 9 Apr 2008 12:08:22 +1000 Date: Wed, 09 Apr 2008 12:12:29 +1000 To: "Jeffrey Sandel" , xfs@oss.sgi.com Subject: Re: Lost+found From: "Barry Naujok" Organization: SGI Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <1207632033.11530.10.camel@localhost.localdomain> Content-Transfer-Encoding: 7bit Message-ID: In-Reply-To: <1207632033.11530.10.camel@localhost.localdomain> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15269 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Tue, 08 Apr 2008 15:20:33 +1000, Jeffrey Sandel wrote: > Recently I ran xfs_repair due to a firmware upgrade on an unmounted > disk. The repair recovered the data but moved it to the lost+found > directory. > > How do I recover file names and ownership? The only real options you have AFAIK is the file command to try and identify what type of file it is and just manually inspecting the files. Then, you might be able to derive its filename and where it came from. Regards, Barry. From owner-xfs@oss.sgi.com Tue Apr 8 19:30:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 19:30:19 -0700 (PDT) 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.0 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 m392U6kh025683 for ; Tue, 8 Apr 2008 19:30:10 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA22339; Wed, 9 Apr 2008 12:30:40 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m392UcsT126663890; Wed, 9 Apr 2008 12:30:39 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m392Ua6V119892338; Wed, 9 Apr 2008 12:30:36 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 9 Apr 2008 12:30:36 +1000 From: David Chinner To: Michael Nishimoto Cc: XFS Mailing List Subject: Re: inconsistent xfs log record Message-ID: <20080409023036.GB108924158@sgi.com> References: <47FAD04D.5080308@agami.com> <20080408155043.GZ108924158@sgi.com> <47FBE558.1020106@agami.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <47FBE558.1020106@agami.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15270 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Tue, Apr 08, 2008 at 02:36:24PM -0700, Michael Nishimoto wrote: > David Chinner wrote: > >On Mon, Apr 07, 2008 at 06:54:21PM -0700, Michael Nishimoto wrote: > > > I've just finished analyzing an xfs filesystem which won't recover. > > > An inconsistent log record has 332 log operations but the num_logop > > field > > > in the record header says 333 log operations. The result is that xfs > > > recovery > > > complains with "bad clientid" because recovery eventually attempts to > >decode > > > garbage. > > > > > > The log record really has 332 log ops (I counted!). ..... > >FWIW, I have had 2-3 failures with a "bad clientid" on a 64k page size ia64 > >box since I switched from 16k page size about a month ago. I haven't > >seen any > >consistent pattern to the failure yet, nor had a chance to perform any > >sort of triage on the problem so I can't say whether I'm seeing the same > >issue... > > When you saw the problem, did you also have an off-by-one or one-bit > difference > between num_logops and the real count? No idea - i didn't traige it because I'd just switched over to 64k page size and had about 10 new QA failures to catalogue and record. Going back to the bug I originally raised, I see that there was a reproducable case to produce the error: $ sudo XFS_MKFS_OPTIONS="-s size=1024" ./check 139 i.e. sector size of 1k on a 64k page machine. However, that's as far as I got and i haven't revisited it yet so I can't say if there's any real correlation or not to what you've seen. It does, however, point out that there is a problem there somewhere... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Tue Apr 8 20:47:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 20:47:36 -0700 (PDT) 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.0 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 m393lLOj006986 for ; Tue, 8 Apr 2008 20:47:23 -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 NAA23557; Wed, 9 Apr 2008 13:47:52 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 05BAC58C4C0F; Wed, 9 Apr 2008 13:47:51 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 978729 - Per iclog callback chain lock Message-Id: <20080409034752.05BAC58C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 13:47:51 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15271 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Per iclog callback chain lock Rather than use the icloglock for protecting the iclog completion callback chain, use a new per-iclog lock so that walking the callback chain doesn't require holding a global lock. This reduces contention on the icloglock during transaction commit and log I/O completion by reducing the number of times we need to hold the global icloglock during these operations. Date: Wed Apr 9 13:47:24 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: lachlan@sgi.com,hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30770a fs/xfs/xfs_log.c - 1.350 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log.c.diff?r1=text&tr1=1.350&r2=text&tr2=1.349&f=h - Use a per-iclog callback chain log to reduce contention on the icloglock. fs/xfs/xfs_log_priv.h - 1.128 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log_priv.h.diff?r1=text&tr1=1.128&r2=text&tr2=1.127&f=h - Use a per-iclog callback chain log to reduce contention on the icloglock. From owner-xfs@oss.sgi.com Tue Apr 8 20:52:15 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 20:52:21 -0700 (PDT) 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.5 required=5.0 tests=AWL,BAYES_00,SUBJ_TICKET 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 m393qBfk007965 for ; Tue, 8 Apr 2008 20:52:13 -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 NAA23594; Wed, 9 Apr 2008 13:52:46 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id CC99958C4C0F; Wed, 9 Apr 2008 13:52:45 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 978729 - Remove the xlog_ticket allocator Message-Id: <20080409035245.CC99958C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 13:52:45 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15272 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Remove the xlog_ticket allocator The ticket allocator is just a simple slab implementation internal to the log. It requires the icloglock to be held when manipulating it and this contributes to contention on that lock. Just kill the entire allocator and use a memory zone instead. While there, allow us to gracefully fail allocation with ENOMEM. Date: Wed Apr 9 13:52:17 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: lachlan@sgi.com,hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30771a fs/xfs/xfsidbg.c - 1.347 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfsidbg.c.diff?r1=text&tr1=1.347&r2=text&tr2=1.346&f=h - Remove the xlog_ticket allocator and replace it with a memory zone. fs/xfs/xfs_log.c - 1.351 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log.c.diff?r1=text&tr1=1.351&r2=text&tr2=1.350&f=h - Remove the xlog_ticket allocator and replace it with a memory zone. fs/xfs/xfs_log_priv.h - 1.129 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log_priv.h.diff?r1=text&tr1=1.129&r2=text&tr2=1.128&f=h - Remove the xlog_ticket allocator and replace it with a memory zone. fs/xfs/xfs_vfsops.c - 1.558 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vfsops.c.diff?r1=text&tr1=1.558&r2=text&tr2=1.557&f=h - Remove the xlog_ticket allocator and replace it with a memory zone. From owner-xfs@oss.sgi.com Tue Apr 8 20:58:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 20:58:40 -0700 (PDT) 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.0 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 m393wLrQ009059 for ; Tue, 8 Apr 2008 20:58:24 -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 NAA23663; Wed, 9 Apr 2008 13:58:55 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id C6B3F58C4C0F; Wed, 9 Apr 2008 13:58:55 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 978729 - Reorganise xlog_t for better cacheline isolation of contention Message-Id: <20080409035855.C6B3F58C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 13:58:55 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15273 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Reorganise xlog_t for better cacheline isolation of contention To reduce contention on the log in large CPU count, separate out different parts of the xlog_t structure onto different cachelines. Move each lock onto a different cacheline along with all the members that are accessed/modified while that lock is held. Also, move the debugging code into debug code. Date: Wed Apr 9 13:58:11 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: lachlan@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30772a fs/xfs/xfs_log.c - 1.352 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log.c.diff?r1=text&tr1=1.352&r2=text&tr2=1.351&f=h - Isolate some debugging to the debug build. fs/xfs/xfs_log_priv.h - 1.130 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log_priv.h.diff?r1=text&tr1=1.130&r2=text&tr2=1.129&f=h - Reorganise xlog_t for better cacheline isolation of contention From owner-xfs@oss.sgi.com Tue Apr 8 21:00:54 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 21:01:14 -0700 (PDT) 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.0 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 m3940moI009676 for ; Tue, 8 Apr 2008 21:00:50 -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 OAA23838; Wed, 9 Apr 2008 14:01:18 +1000 To: "Christoph Hellwig" Subject: Re: [REVIEW #2] cleanup - remove bhv_vname_t From: "Barry Naujok" Organization: SGI Cc: "xfs@oss.sgi.com" , xfs-dev Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080408085153.GA19699@infradead.org> Content-Transfer-Encoding: 7bit Date: Wed, 09 Apr 2008 14:01:45 +1000 Message-ID: In-Reply-To: <20080408085153.GA19699@infradead.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15274 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Tue, 08 Apr 2008 18:51:53 +1000, Christoph Hellwig wrote: >> --- kern_ci.orig/fs/xfs/xfs_dir2.h >> +++ kern_ci/fs/xfs/xfs_dir2.h >> @@ -60,6 +60,16 @@ typedef __uint32_t xfs_dir2_db_t; >> typedef xfs_off_t xfs_dir2_off_t; >> >> /* >> + * Counted string for file names. >> + */ >> +struct xfs_name { >> + const char *name; >> + int len; >> +}; >> + >> +extern struct xfs_name xfs_name_dotdot; > > I think these should be in a different header as they are used a lot > outside the low-level directory code. xfs_types.h ? From owner-xfs@oss.sgi.com Tue Apr 8 21:02:51 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 21:03:11 -0700 (PDT) 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.0 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 m3942lHP010170 for ; Tue, 8 Apr 2008 21:02:49 -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 OAA23875; Wed, 9 Apr 2008 14:03:21 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 64CDF58C4C0F; Wed, 9 Apr 2008 14:03:21 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 979661 - Fix lock inversion in forced shutdown. Message-Id: <20080409040321.64CDF58C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 14:03:21 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15275 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Fix lock inversion in forced shutdown. Recent changes to xlog_state_release_iclog() placed the grant_lock inside the icloglock. forced unmount of the log does this the opposite way around, but does not depend on the order for correct working. Fix the inversion by changing the order locks are gained in xfs_log_force_umount(). Date: Wed Apr 9 14:02:59 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30773a fs/xfs/xfs_log.c - 1.353 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log.c.diff?r1=text&tr1=1.353&r2=text&tr2=1.352&f=h - Fix lock inversion in forced shutdown. From owner-xfs@oss.sgi.com Tue Apr 8 21:10:44 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 21:10:55 -0700 (PDT) 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.0 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 m394AdrK011496 for ; Tue, 8 Apr 2008 21:10:42 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA23970; Wed, 9 Apr 2008 14:11:16 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m394BFsT126749245; Wed, 9 Apr 2008 14:11:16 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m394BDBO126645947; Wed, 9 Apr 2008 14:11:13 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 9 Apr 2008 14:11:13 +1000 From: David Chinner To: Thor Kristoffersen Cc: David Chinner , Timothy Shimmin , xfs@oss.sgi.com Subject: [patch] Re: Does XFS prevent disk spindown? Message-ID: <20080409041113.GC108924158@sgi.com> References: <20080401003005.GJ103491721@sgi.com> <47F1CF6D.2040103@sandeen.net> <47F9735E.8020900@sgi.com> <20080407215855.GE108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15276 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Tue, Apr 08, 2008 at 07:53:13AM +0200, Thor Kristoffersen wrote: > David Chinner writes: > >> > What does 'xfs_logprint -t' show in these "idle" states > >> > after these writes? > >> > >> xfs_logprint produces output like the one shown below, so it does indeed > >> look like it's writing to the journal. But why should it need to keep > >> writing to the journal when there have been no updates to any files on that > >> partition recently? > > > > Are you using lazy-count=1? (i.e. output of 'xfs_info ', please). > > Looks like I am: > > meta-data=/dev/sda3 isize=256 agcount=4, agsize=42676171 blks > = sectsz=512 attr=2 > data = bsize=4096 blocks=170704681, imaxpct=25 > = sunit=0 swidth=0 blks > naming =version 2 bsize=4096 > log =internal bsize=4096 blocks=32768, version=2 > = sectsz=512 sunit=0 blks, lazy-count=1 > realtime =none extsz=4096 blocks=0, rtextents=0 > > Is that what's causing it? I have never specified any lazy-count option > when I created or mounted the filesystem. I didn't even know it existed. Introduced in 2.6.22, and recently was made the default mkfs config. Try the patch below. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group Remove periodic logging of in-core superblock counters. xfssyncd triggers the logging of superblock counters every 30s if the filesystem is made with lazy-count=1. This will prevent disks from idling and spinning down as there will be a log write every 30s. With the way counter recovery works for lazy-count=1, this code is unnecessary and provides no real benefit, so just remove it. Signed-off-by: Dave Chinner --- fs/xfs/linux-2.6/xfs_super.c | 3 +-- fs/xfs/linux-2.6/xfs_vfs.h | 1 - fs/xfs/xfs_vfsops.c | 10 ---------- 3 files changed, 1 insertion(+), 13 deletions(-) Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_super.c 2008-04-02 09:25:11.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_super.c 2008-04-02 10:02:25.391897032 +1000 @@ -1028,8 +1028,7 @@ xfs_sync_worker( int error; if (!(mp->m_flags & XFS_MOUNT_RDONLY)) - error = xfs_sync(mp, SYNC_FSDATA | SYNC_BDFLUSH | SYNC_ATTR | - SYNC_REFCACHE | SYNC_SUPER); + error = xfs_sync(mp, SYNC_FSDATA | SYNC_BDFLUSH | SYNC_ATTR); mp->m_sync_seq++; wake_up(&mp->m_wait_single_sync_task); } Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_vfs.h =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_vfs.h 2007-08-24 22:25:22.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_vfs.h 2008-04-02 10:02:52.596414152 +1000 @@ -49,7 +49,6 @@ typedef struct bhv_vfs_sync_work { #define SYNC_REFCACHE 0x0040 /* prune some of the nfs ref cache */ #define SYNC_REMOUNT 0x0080 /* remount readonly, no dummy LRs */ #define SYNC_IOWAIT 0x0100 /* wait for all I/O to complete */ -#define SYNC_SUPER 0x0200 /* flush superblock to disk */ /* * When remounting a filesystem read-only or freezing the filesystem, Index: 2.6.x-xfs-new/fs/xfs/xfs_vfsops.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_vfsops.c 2008-04-02 09:00:55.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_vfsops.c 2008-04-02 10:01:35.534280170 +1000 @@ -1334,18 +1334,8 @@ xfs_syncsub( } /* - * If asked, update the disk superblock with incore counter values if we - * are using non-persistent counters so that they don't get too far out - * of sync if we crash or get a forced shutdown. We don't want to force - * this to disk, just get a transaction into the iclogs.... - */ - if (flags & SYNC_SUPER) - xfs_log_sbcount(mp, 0); - - /* * Now check to see if the log needs a "dummy" transaction. */ - if (!(flags & SYNC_REMOUNT) && xfs_log_need_covered(mp)) { xfs_trans_t *tp; xfs_inode_t *ip; From owner-xfs@oss.sgi.com Tue Apr 8 21:24:49 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 21:24:56 -0700 (PDT) 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.0 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 m394Ok4J013713 for ; Tue, 8 Apr 2008 21:24:47 -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 OAA24232; Wed, 9 Apr 2008 14:25:20 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 53DE158C4C0F; Wed, 9 Apr 2008 14:25:20 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - Replace __inline with inline Message-Id: <20080409042520.53DE158C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 14:25:20 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15277 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Replace __inline with inline Remove the remaining uses of __inline in the XFS code base. Signed-off-by: Harvey Harrison Date: Wed Apr 9 14:24:55 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: harvey.harrison@gmail.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30774a fs/xfs/quota/xfs_qm_stats.h - 1.5 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_qm_stats.h.diff?r1=text&tr1=1.5&r2=text&tr2=1.4&f=h - replace __inline with inline fs/xfs/linux-2.6/xfs_cred.h - 1.25 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_cred.h.diff?r1=text&tr1=1.25&r2=text&tr2=1.24&f=h - replace __inline with inline fs/xfs/linux-2.6/xfs_stats.h - 1.15 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_stats.h.diff?r1=text&tr1=1.15&r2=text&tr2=1.14&f=h - replace __inline with inline From owner-xfs@oss.sgi.com Tue Apr 8 21:33:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 21:33:09 -0700 (PDT) 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.0 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 m394WxDu015005 for ; Tue, 8 Apr 2008 21:33:01 -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 OAA24429; Wed, 9 Apr 2008 14:33:33 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 19F9158C4C0F; Wed, 9 Apr 2008 14:33:32 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - replace remaining __FUNCTION__ occurrences Message-Id: <20080409043333.19F9158C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 14:33:32 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15278 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs replace remaining __FUNCTION__ occurrences __FUNCTION__ is gcc-specific, use __func__ Signed-off-by: Harvey Harrison Date: Wed Apr 9 14:33:03 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: harvey.harrison@gmail.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30775a fs/xfs/xfs_log.c - 1.354 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log.c.diff?r1=text&tr1=1.354&r2=text&tr2=1.353&f=h - __FUNCTION__ is gcc-specific, use __func__ fs/xfs/xfs_trans_ail.c - 1.87 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_trans_ail.c.diff?r1=text&tr1=1.87&r2=text&tr2=1.86&f=h - __FUNCTION__ is gcc-specific, use __func__ fs/xfs/xfs_log_recover.c - 1.337 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log_recover.c.diff?r1=text&tr1=1.337&r2=text&tr2=1.336&f=h - __FUNCTION__ is gcc-specific, use __func__ fs/xfs/xfs_bmap_btree.c - 1.169 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_bmap_btree.c.diff?r1=text&tr1=1.169&r2=text&tr2=1.168&f=h - __FUNCTION__ is gcc-specific, use __func__ fs/xfs/xfs_alloc.c - 1.190 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_alloc.c.diff?r1=text&tr1=1.190&r2=text&tr2=1.189&f=h - __FUNCTION__ is gcc-specific, use __func__ fs/xfs/xfs_bmap.h - 1.103 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_bmap.h.diff?r1=text&tr1=1.103&r2=text&tr2=1.102&f=h - __FUNCTION__ is gcc-specific, use __func__ fs/xfs/xfs_bmap.c - 1.388 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_bmap.c.diff?r1=text&tr1=1.388&r2=text&tr2=1.387&f=h - __FUNCTION__ is gcc-specific, use __func__ fs/xfs/linux-2.6/xfs_vnode.h - 1.147 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_vnode.h.diff?r1=text&tr1=1.147&r2=text&tr2=1.146&f=h - __FUNCTION__ is gcc-specific, use __func__ fs/xfs/linux-2.6/xfs_super.c - 1.412 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.412&r2=text&tr2=1.411&f=h - __FUNCTION__ is gcc-specific, use __func__ fs/xfs/linux-2.6/xfs_buf.c - 1.253 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_buf.c.diff?r1=text&tr1=1.253&r2=text&tr2=1.252&f=h - __FUNCTION__ is gcc-specific, use __func__ fs/xfs/linux-2.6/kmem.c - 1.12 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/kmem.c.diff?r1=text&tr1=1.12&r2=text&tr2=1.11&f=h - __FUNCTION__ is gcc-specific, use __func__ fs/xfs/xfs_filestream.c - 1.5 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_filestream.c.diff?r1=text&tr1=1.5&r2=text&tr2=1.4&f=h - __FUNCTION__ is gcc-specific, use __func__ From owner-xfs@oss.sgi.com Tue Apr 8 21:37:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 21:37:44 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_51 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 m394bX9o015812 for ; Tue, 8 Apr 2008 21:37:36 -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 OAA24500; Wed, 9 Apr 2008 14:38:07 +1000 Message-ID: <47FC482F.7090408@sgi.com> Date: Wed, 09 Apr 2008 14:38:07 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Michael Nishimoto CC: XFS Mailing List Subject: Re: inconsistent xfs log record References: <47FAD04D.5080308@agami.com> In-Reply-To: <47FAD04D.5080308@agami.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15279 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Michael Nishimoto wrote: > I've just finished analyzing an xfs filesystem which won't recover. > An inconsistent log record has 332 log operations but the num_logop field > in the record header says 333 log operations. The result is that xfs > recovery > complains with "bad clientid" because recovery eventually attempts to > decode > garbage. > > The log record really has 332 log ops (I counted!). > > Looking through xlog_write(), I don't see any way that record_cnt can be > bumped > without also writing out a log operation. > > Does this issue ring a bell with anyone? > > Michael > Having a bit of a look at other bugs than the snapshot one... nothing really helpful. I've seen a few "bad clientid" but that, as you say, just reflects that at some point we have crap in the log op header which we notice when doing recovery. I had one (pv#945899) where it seemed to have got the head of the log wrong - you could see using "xfs_logprint -d" at the change of cycle#s - it didn't match. Yours appears different. I also had another one (pv#971596) but I didn't narrow it down to the wrong# of log ops but maybe I wasn't looking carefully enough at the time. Okay, for that one there were 2 bugs in one, one for bad clientid and one for bad transaction - for the bad transaction, there was something like a 2nd startop without an intervening commit op for the tid - I moved onto something else before getting anywhere further. --Tim From owner-xfs@oss.sgi.com Tue Apr 8 21:43:58 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 21:44:06 -0700 (PDT) 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.0 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 m394hur0016852 for ; Tue, 8 Apr 2008 21:43:57 -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 OAA24597; Wed, 9 Apr 2008 14:44:30 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 1361758C4C0F; Wed, 9 Apr 2008 14:44:29 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 980080 - Don't validate symlink target component length Message-Id: <20080409044430.1361758C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 14:44:29 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15280 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Don't validate symlink target component length This target component validation is not POSIX conformant and it is not done by any other Linux filesystem so remove it from XFS. Signed-off-by: Christoph Hellwig Date: Wed Apr 9 14:44:06 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30776a fs/xfs/xfs_vnodeops.c - 1.745 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.c.diff?r1=text&tr1=1.745&r2=text&tr2=1.744&f=h - Remove non-POSIX symlink target component validation. From owner-xfs@oss.sgi.com Tue Apr 8 23:39:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 23:39:09 -0700 (PDT) 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.0 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 m396cuIJ032379 for ; Tue, 8 Apr 2008 23:38:59 -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 QAA26556; Wed, 9 Apr 2008 16:39:26 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 6361B58C4C0F; Wed, 9 Apr 2008 16:39:26 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - xfs_icsb_counter_disabled() never returns an error Message-Id: <20080409063926.6361B58C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 16:39:26 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15282 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs xfs_icsb_counter_disabled() never returns an error. Mark it void. Date: Wed Apr 9 16:38:42 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30782a fs/xfs/xfs_mount.c - 1.423 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.c.diff?r1=text&tr1=1.423&r2=text&tr2=1.422&f=h - make xfs_icsb_counter_disabled() void. From owner-xfs@oss.sgi.com Tue Apr 8 23:43:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 23:43:08 -0700 (PDT) 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.0 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 m396guhd000879 for ; Tue, 8 Apr 2008 23:42:59 -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 QAA26637; Wed, 9 Apr 2008 16:43:28 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 20C5358C4C0F; Wed, 9 Apr 2008 16:43:28 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Report errors from xfs_reserve_blocks(). Message-Id: <20080409064328.20C5358C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 16:43:28 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15283 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Report errors from xfs_reserve_blocks(). xfs_reserve_blocks() can fail in interesting ways. In neither case is it a fatal error, but the result can lead to sub-optimal behaviour. Warn to the syslog if the call fails but otherwise continue. Date: Wed Apr 9 16:43:02 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30784a fs/xfs/xfs_mount.c - 1.424 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.c.diff?r1=text&tr1=1.424&r2=text&tr2=1.423&f=h - Report errors from xfs_reserve_blocks(). From owner-xfs@oss.sgi.com Tue Apr 8 23:44:51 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 23:44:59 -0700 (PDT) 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.0 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 m396imoB001494 for ; Tue, 8 Apr 2008 23:44:50 -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 QAA26811; Wed, 9 Apr 2008 16:45:22 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id C80D358C4C0F; Wed, 9 Apr 2008 16:45:22 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - xfs_qm_reset_dqcounts() does not return errors. Message-Id: <20080409064522.C80D358C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 16:45:22 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15284 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs xfs_qm_reset_dqcounts() does not return errors. Declare it void. Date: Wed Apr 9 16:45:03 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30785a fs/xfs/quota/xfs_qm.c - 1.61 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_qm.c.diff?r1=text&tr1=1.61&r2=text&tr2=1.60&f=h - make xfs_qm_reset_dqcounts() void. From owner-xfs@oss.sgi.com Tue Apr 8 23:47:36 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 23:47:43 -0700 (PDT) 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.0 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 m396lXrO002288 for ; Tue, 8 Apr 2008 23:47:35 -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 QAA26852; Wed, 9 Apr 2008 16:48:07 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 95CE558C4C0F; Wed, 9 Apr 2008 16:48:07 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Propagate xfs_qm_dqflush_all() errors. Message-Id: <20080409064807.95CE558C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 16:48:07 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15285 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Propagate xfs_qm_dqflush_all() errors. xfs_qm_dqflush_all() can return flush errors. Ensure they are propagated into the quotacheck code to determine if the quotacheck succeeded or not. Date: Wed Apr 9 16:47:44 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30786a fs/xfs/quota/xfs_qm.c - 1.62 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_qm.c.diff?r1=text&tr1=1.62&r2=text&tr2=1.61&f=h - Propagate xfs_qm_dqflush_all() errors. From owner-xfs@oss.sgi.com Tue Apr 8 23:51:10 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 23:51:17 -0700 (PDT) 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.0 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 m396p6Vf003104 for ; Tue, 8 Apr 2008 23:51:08 -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 QAA26902; Wed, 9 Apr 2008 16:51:41 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 5957058C4C0F; Wed, 9 Apr 2008 16:51:41 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Check for dquot flush errors Message-Id: <20080409065141.5957058C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 16:51:41 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15286 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Check for dquot flush errors xfs_qm_dqflush() can fail, but the return is not checked anywhere. Hence we never know if we've failed to flush a dquot to disk. Propagate the error and warn to the syslog if a flush ever fails. Date: Wed Apr 9 16:51:12 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30787a fs/xfs/quota/xfs_dquot_item.c - 1.20 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_dquot_item.c.diff?r1=text&tr1=1.20&r2=text&tr2=1.19&f=h - Propagate xfs_qm_dqflush() errors. fs/xfs/quota/xfs_dquot.c - 1.31 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_dquot.c.diff?r1=text&tr1=1.31&r2=text&tr2=1.30&f=h - Propagate xfs_qm_dqflush() errors. fs/xfs/quota/xfs_qm.c - 1.63 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_qm.c.diff?r1=text&tr1=1.63&r2=text&tr2=1.62&f=h - Propagate xfs_qm_dqflush() errors. From owner-xfs@oss.sgi.com Tue Apr 8 23:54:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 23:54:18 -0700 (PDT) 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.0 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 m396s8XE003798 for ; Tue, 8 Apr 2008 23:54:10 -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 QAA26948; Wed, 9 Apr 2008 16:54:42 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 4EB1358C4C0F; Wed, 9 Apr 2008 16:54:42 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Clean up quotamount error handling. Message-Id: <20080409065442.4EB1358C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 16:54:42 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15287 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Clean up quotamount error handling. xfs_qm_mount_quotas() returns an error status that is ignored. If we fail to mount quotas, we continue with quota's turned off, which is all handled inside xfs_qm_mount_quotas(). Mark it as void to indicate that errors need not be returned to the callers. Date: Wed Apr 9 16:54:21 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30788a fs/xfs/quota/xfs_qm.h - 1.19 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_qm.h.diff?r1=text&tr1=1.19&r2=text&tr2=1.18&f=h - Clean up quotamount error handling. fs/xfs/quota/xfs_qm.c - 1.64 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_qm.c.diff?r1=text&tr1=1.64&r2=text&tr2=1.63&f=h - Clean up quotamount error handling. From owner-xfs@oss.sgi.com Tue Apr 8 23:56:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 23:56:25 -0700 (PDT) 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.0 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 m396uDgd004483 for ; Tue, 8 Apr 2008 23:56: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 QAA26997; Wed, 9 Apr 2008 16:56:48 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 5E86158C4C0F; Wed, 9 Apr 2008 16:56:48 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Catch errors resetting quota flags. Message-Id: <20080409065648.5E86158C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 16:56:48 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15288 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Catch errors resetting quota flags. Warn to the syslog if we fail to reset the quota flags in the superblock when a quota check fails. Date: Wed Apr 9 16:56:29 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30789a fs/xfs/quota/xfs_qm.c - 1.65 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_qm.c.diff?r1=text&tr1=1.65&r2=text&tr2=1.64&f=h - Catch errors resetting quota flags. From owner-xfs@oss.sgi.com Tue Apr 8 23:59:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 08 Apr 2008 23:59:10 -0700 (PDT) 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.0 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 m396wx6d005086 for ; Tue, 8 Apr 2008 23:59:01 -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 QAA27062; Wed, 9 Apr 2008 16:59:33 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 6189A58C4C0F; Wed, 9 Apr 2008 16:59:33 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Catch errors when turning off quotas. Message-Id: <20080409065933.6189A58C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 16:59:33 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15289 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Catch errors when turning off quotas. When turning off quota, we need to write various transactions to the log to ensure that they are cleanly removed in the case of a crash. We need to check that the transactions hit the disk correctly. If we fail to write the final quota off transaction, we are corrupt in memory and so the only option is to shut the filesystem down at this point. Date: Wed Apr 9 16:59:11 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30790a fs/xfs/quota/xfs_qm_syscalls.c - 1.39 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_qm_syscalls.c.diff?r1=text&tr1=1.39&r2=text&tr2=1.38&f=h - Catch errors when turning off quotas. From owner-xfs@oss.sgi.com Wed Apr 9 00:00:53 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 00:01:11 -0700 (PDT) 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.0 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 m3970l0G007804 for ; Wed, 9 Apr 2008 00:00:52 -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 RAA27225; Wed, 9 Apr 2008 17:01:22 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id D983158C4C0F; Wed, 9 Apr 2008 17:01:21 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Propagate quota file truncation errors. Message-Id: <20080409070121.D983158C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 17:01:21 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15290 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Propagate quota file truncation errors. Truncating the quota files can silently fail. Ensure that truncation errors are propagated to the callers. Date: Wed Apr 9 17:01:01 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30791a fs/xfs/quota/xfs_qm_syscalls.c - 1.40 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_qm_syscalls.c.diff?r1=text&tr1=1.40&r2=text&tr2=1.39&f=h - Propagate quota file truncation errors. From owner-xfs@oss.sgi.com Wed Apr 9 00:03:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 00:03:19 -0700 (PDT) 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.0 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 m39736Rk008517 for ; Wed, 9 Apr 2008 00:03:07 -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 RAA27261; Wed, 9 Apr 2008 17:03:40 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 87DD858C4C0F; Wed, 9 Apr 2008 17:03:40 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Catch errors from xfs_acl_setmode() Message-Id: <20080409070340.87DD858C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 17:03:40 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15291 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Catch errors from xfs_acl_setmode(). Propagate the error status from xfs_acl_setmode() so that callers know if the ACl was set correctly or not. Date: Wed Apr 9 17:03:20 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30792a fs/xfs/xfs_acl.c - 1.69 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_acl.c.diff?r1=text&tr1=1.69&r2=text&tr2=1.68&f=h - Catch errors from xfs_acl_setmode(). From owner-xfs@oss.sgi.com Wed Apr 9 00:05:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 00:05:25 -0700 (PDT) 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.0 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 m39755F0009139 for ; Wed, 9 Apr 2008 00:05:07 -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 RAA27310; Wed, 9 Apr 2008 17:05:40 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 4444258C4C0F; Wed, 9 Apr 2008 17:05:40 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Catch errors from xfs_acl_vremove() Message-Id: <20080409070540.4444258C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 17:05:40 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15292 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Catch errors from xfs_acl_vremove(). Removing an ACL can return an error. Propagate it. Date: Wed Apr 9 17:05:18 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30793a fs/xfs/xfs_acl.c - 1.70 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_acl.c.diff?r1=text&tr1=1.70&r2=text&tr2=1.69&f=h - Catch errors from xfs_acl_vremove(). From owner-xfs@oss.sgi.com Wed Apr 9 00:09:58 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 00:10:11 -0700 (PDT) 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.0 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 m3979tAb010199 for ; Wed, 9 Apr 2008 00:09:57 -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 RAA27413; Wed, 9 Apr 2008 17:10:30 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 4BBFE58C4C0F; Wed, 9 Apr 2008 17:10:30 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Propagate xfs_trans_reserve() errors Message-Id: <20080409071030.4BBFE58C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 17:10:30 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15293 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Propagate xfs_trans_reserve() errors. xfs_trans_reserve() reports errors that should not be ignored. For example, a shutdown filesystem will report errors through xfs_trans_reserve() to prevent further changes from being attempted on a damaged filesystem. Catch and propagate all error conditions from xfs_trans_reserve(). Date: Wed Apr 9 17:10:06 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30794a fs/xfs/xfs_log_recover.c - 1.338 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log_recover.c.diff?r1=text&tr1=1.338&r2=text&tr2=1.337&f=h - Catch xfs_trans_reserve() errors. From owner-xfs@oss.sgi.com Wed Apr 9 00:13:21 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 00:13:30 -0700 (PDT) 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.0 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 m397DH4p011043 for ; Wed, 9 Apr 2008 00:13:20 -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 RAA27474; Wed, 9 Apr 2008 17:13:52 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id F276B58C4C0F; Wed, 9 Apr 2008 17:13:51 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Propagate errors from xfs_trans_commit() Message-Id: <20080409071351.F276B58C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 17:13:51 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15294 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Propagate errors from xfs_trans_commit(). xfs_trans_commit() can return errors when there are problems in the transaction subsystem. They are indicative that the entire transaction may be incomplete, and hence the error should be propagated as there is a good possibility that there is something fatally wrong in the filesystem. Catch and propagate or warn about commit errors in the places where they are currently ignored. Date: Wed Apr 9 17:13:30 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30795a fs/xfs/xfs_vnodeops.c - 1.746 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.c.diff?r1=text&tr1=1.746&r2=text&tr2=1.745&f=h - Propagate errors from xfs_trans_commit() fs/xfs/xfs_rtalloc.c - 1.111 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_rtalloc.c.diff?r1=text&tr1=1.111&r2=text&tr2=1.110&f=h - Propagate errors from xfs_trans_commit() fs/xfs/xfs_log_recover.c - 1.339 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log_recover.c.diff?r1=text&tr1=1.339&r2=text&tr2=1.338&f=h - Propagate errors from xfs_trans_commit() fs/xfs/xfs_vfsops.c - 1.560 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vfsops.c.diff?r1=text&tr1=1.560&r2=text&tr2=1.559&f=h - Propagate errors from xfs_trans_commit() fs/xfs/xfs_mount.c - 1.425 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.c.diff?r1=text&tr1=1.425&r2=text&tr2=1.424&f=h - Propagate errors from xfs_trans_commit() fs/xfs/xfs_inode.c - 1.496 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_inode.c.diff?r1=text&tr1=1.496&r2=text&tr2=1.495&f=h - Propagate errors from xfs_trans_commit() fs/xfs/quota/xfs_qm_syscalls.c - 1.41 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_qm_syscalls.c.diff?r1=text&tr1=1.41&r2=text&tr2=1.40&f=h - Propagate errors from xfs_trans_commit() fs/xfs/quota/xfs_qm.c - 1.66 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_qm.c.diff?r1=text&tr1=1.66&r2=text&tr2=1.65&f=h - Propagate errors from xfs_trans_commit() From owner-xfs@oss.sgi.com Wed Apr 9 00:15:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 00:15:53 -0700 (PDT) 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.0 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 m397Fe47011936 for ; Wed, 9 Apr 2008 00:15:42 -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 RAA27537; Wed, 9 Apr 2008 17:16:13 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 1AFB858C4C0F; Wed, 9 Apr 2008 17:16:13 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Clean up xfs_alloc_search_busy() return values. Message-Id: <20080409071613.1AFB858C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 17:16:13 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15295 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Clean up xfs_alloc_search_busy() return values. xfs_alloc_search_busy() returns an index into the busy array if the extent was found in the array. This is never checked, and the xfs_alloc_search_busy() does a log force to prevent reuse of the extent before the free transaction hits the disk. Hence the return value is useless. Declare the function void and remove the slot number from the tracing as well. Date: Wed Apr 9 17:15:51 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30796a fs/xfs/xfs_alloc.c - 1.191 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_alloc.c.diff?r1=text&tr1=1.191&r2=text&tr2=1.190&f=h - Clean up xfs_alloc_search_busy() return values. From owner-xfs@oss.sgi.com Wed Apr 9 00:18:05 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 00:18:14 -0700 (PDT) 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.0 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 m397I23U012593 for ; Wed, 9 Apr 2008 00:18:04 -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 RAA27721; Wed, 9 Apr 2008 17:18:37 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 0773958C4C0F; Wed, 9 Apr 2008 17:18:36 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Make xfs_alloc_compute_aligned() void. Message-Id: <20080409071837.0773958C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 17:18:36 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15296 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Make xfs_alloc_compute_aligned() void. xfs_alloc_compute_aligned() returns a value based on a comparison of the computed extent length and the minimum length allowed. This is only used by some callers - the other four return parameters are used more often. Hence move the comparison to the code that actually needs to do it and make xfs_alloc_compute_aligned() a void function. Date: Wed Apr 9 17:18:17 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30797a fs/xfs/xfs_alloc.c - 1.192 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_alloc.c.diff?r1=text&tr1=1.192&r2=text&tr2=1.191&f=h - Make xfs_alloc_compute_aligned() void. From owner-xfs@oss.sgi.com Wed Apr 9 00:20:41 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 00:20:48 -0700 (PDT) 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.0 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 m397Kc6W017684 for ; Wed, 9 Apr 2008 00:20:40 -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 RAA27812; Wed, 9 Apr 2008 17:21:12 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id CC41258C4C0F; Wed, 9 Apr 2008 17:21:12 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - xfs_bmap_adjacent() never returns an error. Message-Id: <20080409072112.CC41258C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 17:21:12 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15297 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs xfs_bmap_adjacent() never returns an error. Mark it void. Date: Wed Apr 9 17:20:56 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30798a fs/xfs/xfs_bmap.c - 1.389 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_bmap.c.diff?r1=text&tr1=1.389&r2=text&tr2=1.388&f=h - Make xfs_bmap_adjacent() void. From owner-xfs@oss.sgi.com Wed Apr 9 00:22:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 00:22:26 -0700 (PDT) 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.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42, J_CHICKENPOX_45,J_CHICKENPOX_47,J_CHICKENPOX_65 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 m397M9Ds018256 for ; Wed, 9 Apr 2008 00:22:12 -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 RAA27868; Wed, 9 Apr 2008 17:22:47 +1000 Date: Wed, 09 Apr 2008 17:24:04 +1000 To: "xfs@oss.sgi.com" , xfs-dev Subject: [REVIEW #3] cleanup - remove bhv_vname_t From: "Barry Naujok" Organization: SGI Content-Type: multipart/mixed; boundary=----------eWkzpew8UCFVfG4FOq69Ba MIME-Version: 1.0 Message-ID: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15298 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs ------------eWkzpew8UCFVfG4FOq69Ba Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 Content-Transfer-Encoding: Quoted-Printable I gave some "loving" to xfs_rename. Stack usage for xfs_rename down from 184 bytes to 152 bytes. xfs_name declaration is now in xfs_types.h. There are a couple more whitespace cleanups in this patch (very minor). This patch applies to the latest code after Dave's check-ins. --- fs/dmapi/dmapi_event.c | 4 - fs/dmapi/dmapi_kern.h | 4 - fs/xfs/dmapi/xfs_dm.c | 6 +- fs/xfs/linux-2.6/xfs_export.c | 5 - fs/xfs/linux-2.6/xfs_iops.c | 55 ++++++++++++++----- fs/xfs/linux-2.6/xfs_vnode.h | 9 --- fs/xfs/xfs_dir2.c | 62 +++++++++------------ fs/xfs/xfs_dir2.h | 12 ++-- fs/xfs/xfs_mount.h | 4 - fs/xfs/xfs_rename.c | 82 ++++++++++------------------ fs/xfs/xfs_types.h | 5 + fs/xfs/xfs_utils.c | 4 - fs/xfs/xfs_utils.h | 4 - fs/xfs/xfs_vnodeops.c | 121=20=20 ++++++++++++++++++------------------------ fs/xfs/xfs_vnodeops.h | 23 ++++--- 15 files changed, 191 insertions(+), 209 deletions(-) Index: kern_ci/fs/dmapi/dmapi_event.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/dmapi/dmapi_event.c +++ kern_ci/fs/dmapi/dmapi_event.c @@ -622,8 +622,8 @@ dm_send_namesp_event( dm_right_t vp1_right, struct inode *ip2, dm_right_t vp2_right, - char *name1, - char *name2, + const char *name1, + const char *name2, mode_t mode, int retcode, int flags) Index: kern_ci/fs/dmapi/dmapi_kern.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/dmapi/dmapi_kern.h +++ kern_ci/fs/dmapi/dmapi_kern.h @@ -119,8 +119,8 @@ int dm_send_namesp_event( dm_right_t vp1_right, struct inode *ip2, dm_right_t vp2_right, - char *name1, - char *name2, + const char *name1, + const char *name2, mode_t mode, int retcode, int flags); Index: kern_ci/fs/xfs/dmapi/xfs_dm.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/dmapi/xfs_dm.c +++ kern_ci/fs/xfs/dmapi/xfs_dm.c @@ -245,7 +245,7 @@ xfs_copyin_attrname( size_t len; strcpy(to->dan_chars, dmattr_prefix); - + len =3D strnlen_user((char __user *)from, DM_ATTR_NAME_SIZE); if (len =3D=3D 0) error =3D EFAULT; @@ -3172,8 +3172,8 @@ xfs_dm_send_namesp_event( dm_right_t vp1_right, xfs_inode_t *ip2, dm_right_t vp2_right, - char *name1, - char *name2, + const char *name1, + const char *name2, mode_t mode, int retcode, int flags) Index: kern_ci/fs/xfs/linux-2.6/xfs_export.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_export.c +++ kern_ci/fs/xfs/linux-2.6/xfs_export.c @@ -22,6 +22,7 @@ #include "xfs_trans.h" #include "xfs_sb.h" #include "xfs_ag.h" +#include "xfs_dir2.h" #include "xfs_dmapi.h" #include "xfs_mount.h" #include "xfs_export.h" @@ -30,8 +31,6 @@ #include "xfs_inode.h" #include "xfs_vfsops.h" -static struct dentry dotdot =3D { .d_name.name =3D "..", .d_name.len =3D 2= , }; - /* * Note that we only accept fileids which are long enough rather than=20= =20 allow * the parent generation number to default to zero. XFS considers zero a @@ -216,7 +215,7 @@ xfs_fs_get_parent( struct xfs_inode *cip; struct dentry *parent; - error =3D xfs_lookup(XFS_I(child->d_inode), &dotdot, &cip); + error =3D xfs_lookup(XFS_I(child->d_inode), &xfs_name_dotdot, &cip); if (unlikely(error)) return ERR_PTR(-error); Index: kern_ci/fs/xfs/linux-2.6/xfs_iops.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_iops.c +++ kern_ci/fs/xfs/linux-2.6/xfs_iops.c @@ -239,6 +239,15 @@ xfs_init_security( return error; } +static void +xfs_dentry_to_name( + struct xfs_name *namep, + struct dentry *dentry) +{ + namep->name =3D dentry->d_name.name; + namep->len =3D dentry->d_name.len; +} + STATIC void xfs_cleanup_inode( struct inode *dir, @@ -246,20 +255,19 @@ xfs_cleanup_inode( struct dentry *dentry, int mode) { - struct dentry teardown =3D {}; + struct xfs_name teardown; /* Oh, the horror. * If we can't add the ACL or we fail in * xfs_init_security we must back out. * ENOSPC can hit here, among other things. */ - teardown.d_inode =3D inode; - teardown.d_name =3D dentry->d_name; + xfs_dentry_to_name(&teardown, dentry); if (S_ISDIR(mode)) - xfs_rmdir(XFS_I(dir), &teardown); + xfs_rmdir(XFS_I(dir), &teardown, XFS_I(inode)); else - xfs_remove(XFS_I(dir), &teardown); + xfs_remove(XFS_I(dir), &teardown, XFS_I(inode)); iput(inode); } @@ -273,6 +281,7 @@ xfs_vn_mknod( struct inode *inode; struct xfs_inode *ip =3D NULL; xfs_acl_t *default_acl =3D NULL; + struct xfs_name name; attrexists_t test_default_acl =3D _ACL_DEFAULT_EXISTS; int error; @@ -293,6 +302,8 @@ xfs_vn_mknod( } } + xfs_dentry_to_name(&name, dentry); + if (IS_POSIXACL(dir) && !default_acl) mode &=3D ~current->fs->umask; @@ -303,10 +314,10 @@ xfs_vn_mknod( case S_IFSOCK: rdev =3D sysv_encode_dev(rdev); case S_IFREG: - error =3D xfs_create(XFS_I(dir), dentry, mode, rdev, &ip, NULL); + error =3D xfs_create(XFS_I(dir), &name, mode, rdev, &ip, NULL); break; case S_IFDIR: - error =3D xfs_mkdir(XFS_I(dir), dentry, mode, &ip, NULL); + error =3D xfs_mkdir(XFS_I(dir), &name, mode, &ip, NULL); break; default: error =3D EINVAL; @@ -371,12 +382,14 @@ xfs_vn_lookup( struct nameidata *nd) { struct xfs_inode *cip; + struct xfs_name name; int error; if (dentry->d_name.len >=3D MAXNAMELEN) return ERR_PTR(-ENAMETOOLONG); - error =3D xfs_lookup(XFS_I(dir), dentry, &cip); + xfs_dentry_to_name(&name, dentry); + error =3D xfs_lookup(XFS_I(dir), &name, &cip); if (unlikely(error)) { if (unlikely(error !=3D ENOENT)) return ERR_PTR(-error); @@ -394,12 +407,14 @@ xfs_vn_link( struct dentry *dentry) { struct inode *inode; /* inode of guy being linked to */ + struct xfs_name name; int error; inode =3D old_dentry->d_inode; + xfs_dentry_to_name(&name, dentry); igrab(inode); - error =3D xfs_link(XFS_I(dir), XFS_I(inode), dentry); + error =3D xfs_link(XFS_I(dir), XFS_I(inode), &name); if (unlikely(error)) { iput(inode); return -error; @@ -417,11 +432,13 @@ xfs_vn_unlink( struct dentry *dentry) { struct inode *inode; + struct xfs_name name; int error; inode =3D dentry->d_inode; + xfs_dentry_to_name(&name, dentry); - error =3D xfs_remove(XFS_I(dir), dentry); + error =3D xfs_remove(XFS_I(dir), &name, XFS_I(inode)); if (likely(!error)) { xfs_validate_fields(dir); /* size needs update */ xfs_validate_fields(inode); @@ -437,14 +454,15 @@ xfs_vn_symlink( { struct inode *inode; struct xfs_inode *cip =3D NULL; + struct xfs_name name; int error; mode_t mode; mode =3D S_IFLNK | (irix_symlink_mode ? 0777 & ~current->fs->umask : S_IRWXUGO); + xfs_dentry_to_name(&name, dentry); - error =3D xfs_symlink(XFS_I(dir), dentry, (char *)symname, mode, - &cip, NULL); + error =3D xfs_symlink(XFS_I(dir), &name, symname, mode, &cip, NULL); if (unlikely(error)) goto out; @@ -471,9 +489,12 @@ xfs_vn_rmdir( struct dentry *dentry) { struct inode *inode =3D dentry->d_inode; + struct xfs_name name; int error; - error =3D xfs_rmdir(XFS_I(dir), dentry); + xfs_dentry_to_name(&name, dentry); + + error =3D xfs_rmdir(XFS_I(dir), &name, XFS_I(inode)); if (likely(!error)) { xfs_validate_fields(inode); xfs_validate_fields(dir); @@ -489,9 +510,15 @@ xfs_vn_rename( struct dentry *ndentry) { struct inode *new_inode =3D ndentry->d_inode; + struct xfs_name oname; + struct xfs_name nname; int error; - error =3D xfs_rename(XFS_I(odir), odentry, XFS_I(ndir), ndentry); + xfs_dentry_to_name(&oname, odentry); + xfs_dentry_to_name(&nname, ndentry); + + error =3D xfs_rename(XFS_I(odir), &oname, XFS_I(odentry->d_inode), + XFS_I(ndir), &nname); if (likely(!error)) { if (new_inode) xfs_validate_fields(new_inode); Index: kern_ci/fs/xfs/linux-2.6/xfs_vnode.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_vnode.h +++ kern_ci/fs/xfs/linux-2.6/xfs_vnode.h @@ -23,8 +23,6 @@ struct bhv_vattr; struct xfs_iomap; struct attrlist_cursor_kern; -typedef struct dentry bhv_vname_t; -typedef __u64 bhv_vnumber_t; typedef struct inode bhv_vnode_t; #define VN_ISLNK(vp) S_ISLNK((vp)->i_mode) @@ -211,13 +209,6 @@ static inline bhv_vnode_t *vn_grab(bhv_v } /* - * Vname handling macros. - */ -#define VNAME(dentry) ((char *) (dentry)->d_name.name) -#define VNAMELEN(dentry) ((dentry)->d_name.len) -#define VNAME_TO_INODE(dentry) (XFS_I((dentry)->d_inode)) - -/* * Dealing with bad inodes */ static inline int VN_BAD(bhv_vnode_t *vp) Index: kern_ci/fs/xfs/xfs_dir2.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -44,6 +44,7 @@ #include "xfs_error.h" #include "xfs_vnodeops.h" +struct xfs_name xfs_name_dotdot =3D {"..", 2}; void xfs_dir_mount( @@ -146,8 +147,7 @@ int xfs_dir_createname( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, + struct xfs_name *name, xfs_ino_t inum, /* new entry inode number */ xfs_fsblock_t *first, /* bmap's firstblock */ xfs_bmap_free_t *flist, /* bmap's freeblock list */ @@ -162,9 +162,9 @@ xfs_dir_createname( return rval; XFS_STATS_INC(xs_dir_create); - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D inum; args.dp =3D dp; args.firstblock =3D first; @@ -197,8 +197,7 @@ int xfs_dir_lookup( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, + struct xfs_name *name, xfs_ino_t *inum) /* out: inode number */ { xfs_da_args_t args; @@ -207,18 +206,14 @@ xfs_dir_lookup( ASSERT((dp->i_d.di_mode & S_IFMT) =3D=3D S_IFDIR); XFS_STATS_INC(xs_dir_lookup); + memset(&args, 0, sizeof(xfs_da_args_t)); - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); - args.inumber =3D 0; + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.dp =3D dp; - args.firstblock =3D NULL; - args.flist =3D NULL; - args.total =3D 0; args.whichfork =3D XFS_DATA_FORK; args.trans =3D tp; - args.justcheck =3D args.addname =3D 0; args.oknoent =3D 1; if (dp->i_d.di_format =3D=3D XFS_DINODE_FMT_LOCAL) @@ -247,8 +242,7 @@ int xfs_dir_removename( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, + struct xfs_name *name, xfs_ino_t ino, xfs_fsblock_t *first, /* bmap's firstblock */ xfs_bmap_free_t *flist, /* bmap's freeblock list */ @@ -261,9 +255,9 @@ xfs_dir_removename( ASSERT((dp->i_d.di_mode & S_IFMT) =3D=3D S_IFDIR); XFS_STATS_INC(xs_dir_remove); - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D ino; args.dp =3D dp; args.firstblock =3D first; @@ -329,8 +323,7 @@ int xfs_dir_replace( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, /* name of entry to replace */ - int namelen, + struct xfs_name *name, /* name of entry to replace */ xfs_ino_t inum, /* new inode number */ xfs_fsblock_t *first, /* bmap's firstblock */ xfs_bmap_free_t *flist, /* bmap's freeblock list */ @@ -345,9 +338,9 @@ xfs_dir_replace( if ((rval =3D xfs_dir_ino_validate(tp->t_mountp, inum))) return rval; - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D inum; args.dp =3D dp; args.firstblock =3D first; @@ -374,28 +367,29 @@ xfs_dir_replace( /* * See if this entry can be added to the directory without allocating=20= =20 space. + * First checks that the caller couldn't reserve enough space (resblks =3D= =20=20 0). */ int xfs_dir_canenter( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, /* name of entry to add */ - int namelen) + struct xfs_name *name, /* name of entry to add */ + uint resblks) { xfs_da_args_t args; int rval; int v; /* type-checking value */ + if (resblks) + return 0; + ASSERT((dp->i_d.di_mode & S_IFMT) =3D=3D S_IFDIR); + memset(&args, 0, sizeof(xfs_da_args_t)); - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); - args.inumber =3D 0; + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.dp =3D dp; - args.firstblock =3D NULL; - args.flist =3D NULL; - args.total =3D 0; args.whichfork =3D XFS_DATA_FORK; args.trans =3D tp; args.justcheck =3D args.addname =3D args.oknoent =3D 1; Index: kern_ci/fs/xfs/xfs_dir2.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_dir2.h +++ kern_ci/fs/xfs/xfs_dir2.h @@ -59,6 +59,8 @@ typedef __uint32_t xfs_dir2_db_t; */ typedef xfs_off_t xfs_dir2_off_t; +extern struct xfs_name xfs_name_dotdot; + /* * Generic directory interface routines */ @@ -68,21 +70,21 @@ extern int xfs_dir_isempty(struct xfs_in extern int xfs_dir_init(struct xfs_trans *tp, struct xfs_inode *dp, struct xfs_inode *pdp); extern int xfs_dir_createname(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t inum, + struct xfs_name *name, xfs_ino_t inum, xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_lookup(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t *inum); + struct xfs_name *name, xfs_ino_t *inum); extern int xfs_dir_removename(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t ino, + struct xfs_name *name, xfs_ino_t ino, xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_replace(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t inum, + struct xfs_name *name, xfs_ino_t inum, xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_canenter(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen); + struct xfs_name *name, uint resblks); extern int xfs_dir_ino_validate(struct xfs_mount *mp, xfs_ino_t ino); /* Index: kern_ci/fs/xfs/xfs_mount.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_mount.h +++ kern_ci/fs/xfs/xfs_mount.h @@ -73,7 +73,7 @@ typedef int (*xfs_send_destroy_t)(struct typedef int (*xfs_send_namesp_t)(dm_eventtype_t, struct xfs_mount *, struct xfs_inode *, dm_right_t, struct xfs_inode *, dm_right_t, - char *, char *, mode_t, int, int); + const char *, const char *, mode_t, int, int); typedef int (*xfs_send_mount_t)(struct xfs_mount *, dm_right_t, char *, char *); typedef void (*xfs_send_unmount_t)(struct xfs_mount *, struct xfs_inode *, @@ -401,7 +401,7 @@ typedef struct xfs_mount { /* * Allow large block sizes to be reported to userspace programs if the - * "largeio" mount option is used. + * "largeio" mount option is used. * * If compatibility mode is specified, simply return the basic unit of=20= =20 caching * so that we don't get inefficient read/modify/write I/O from user apps. Index: kern_ci/fs/xfs/xfs_rename.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_rename.c +++ kern_ci/fs/xfs/xfs_rename.c @@ -83,25 +83,24 @@ int xfs_rename_skip, xfs_rename_nskip; */ STATIC int xfs_lock_for_rename( - xfs_inode_t *dp1, /* old (source) directory inode */ - xfs_inode_t *dp2, /* new (target) directory inode */ - bhv_vname_t *vname1,/* old entry name */ - bhv_vname_t *vname2,/* new entry name */ - xfs_inode_t **ipp1, /* inode of old entry */ - xfs_inode_t **ipp2, /* inode of new entry, if it + xfs_inode_t *dp1, /* in: old (source) directory inode */ + xfs_inode_t *dp2, /* in: new (target) directory inode */ + xfs_inode_t *ip1, /* in: inode of old entry */ + struct xfs_name *name2, /* in: new entry name */ + xfs_inode_t **ipp2, /* out: inode of new entry, if it already exists, NULL otherwise. */ - xfs_inode_t **i_tab,/* array of inode returned, sorted */ - int *num_inodes) /* number of inodes in array */ + xfs_inode_t **i_tab,/* out: array of inode returned, sorted */ + int *num_inodes) /* out: number of inodes in array */ { - xfs_inode_t *ip1 =3D VNAME_TO_INODE(vname1); - xfs_inode_t *ip2, *temp; + xfs_inode_t *ip2 =3D NULL; + xfs_inode_t *temp; xfs_ino_t inum1, inum2; int error; int i, j; uint lock_mode; int diff_dirs =3D (dp1 !=3D dp2); - ip2 =3D NULL; + ASSERT(ip1); /* * First, find out the current inums of the entries so that we @@ -115,17 +114,15 @@ xfs_lock_for_rename( inum1 =3D ip1->i_ino; - /* * Unlock dp1 and lock dp2 if they are different. */ - if (diff_dirs) { xfs_iunlock_map_shared(dp1, lock_mode); lock_mode =3D xfs_ilock_map_shared(dp2); } - error =3D xfs_dir_lookup_int(dp2, lock_mode, vname2, &inum2, &ip2); + error =3D xfs_dir_lookup_int(dp2, lock_mode, name2, &inum2, &ip2); if (error =3D=3D ENOENT) { /* target does not need to exist. */ inum2 =3D 0; } else if (error) { @@ -157,6 +154,7 @@ xfs_lock_for_rename( *num_inodes =3D 4; i_tab[3] =3D ip2; } + *ipp2 =3D i_tab[3]; /* * Sort the elements via bubble sort. (Remember, there are at @@ -194,21 +192,6 @@ xfs_lock_for_rename( xfs_lock_inodes(i_tab, *num_inodes, 0, XFS_ILOCK_SHARED); } - /* - * Set the return value. Null out any unused entries in i_tab. - */ - *ipp1 =3D *ipp2 =3D NULL; - for (i=3D0; i < *num_inodes; i++) { - if (i_tab[i]->i_ino =3D=3D inum1) { - *ipp1 =3D i_tab[i]; - } - if (i_tab[i]->i_ino =3D=3D inum2) { - *ipp2 =3D i_tab[i]; - } - } - for (;i < 4; i++) { - i_tab[i] =3D NULL; - } return 0; } @@ -218,12 +201,13 @@ xfs_lock_for_rename( int xfs_rename( xfs_inode_t *src_dp, - bhv_vname_t *src_vname, + struct xfs_name *src_name, + xfs_inode_t *src_ip, xfs_inode_t *target_dp, - bhv_vname_t *target_vname) + struct xfs_name *target_name) { xfs_trans_t *tp; - xfs_inode_t *src_ip, *target_ip; + xfs_inode_t *target_ip; xfs_mount_t *mp =3D src_dp->i_mount; int new_parent; /* moving to a new dir */ int src_is_directory; /* src_name is a directory */ @@ -237,10 +221,6 @@ xfs_rename( int spaceres; int target_link_zero =3D 0; int num_inodes; - char *src_name =3D VNAME(src_vname); - char *target_name =3D VNAME(target_vname); - int src_namelen =3D VNAMELEN(src_vname); - int target_namelen =3D VNAMELEN(target_vname); xfs_itrace_entry(src_dp); xfs_itrace_entry(target_dp); @@ -250,7 +230,7 @@ xfs_rename( error =3D XFS_SEND_NAMESP(mp, DM_EVENT_RENAME, src_dp, DM_RIGHT_NULL, target_dp, DM_RIGHT_NULL, - src_name, target_name, + src_name->name, target_name->name, 0, 0, 0); if (error) { return error; @@ -267,10 +247,8 @@ xfs_rename( * does not exist in the source directory. */ tp =3D NULL; - error =3D xfs_lock_for_rename(src_dp, target_dp, src_vname, - target_vname, &src_ip, &target_ip, inodes, - &num_inodes); - + error =3D xfs_lock_for_rename(src_dp, target_dp, src_ip, target_name, + &target_ip, inodes, &num_inodes); if (error) { /* * We have nothing locked, no inode references, and @@ -316,7 +294,7 @@ xfs_rename( XFS_BMAP_INIT(&free_list, &first_block); tp =3D xfs_trans_alloc(mp, XFS_TRANS_RENAME); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - spaceres =3D XFS_RENAME_SPACE_RES(mp, target_namelen); + spaceres =3D XFS_RENAME_SPACE_RES(mp, target_name->len); error =3D xfs_trans_reserve(tp, spaceres, XFS_RENAME_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_RENAME_LOG_COUNT); if (error =3D=3D ENOSPC) { @@ -374,9 +352,8 @@ xfs_rename( * If there's no space reservation, check the entry will * fit before actually inserting it. */ - if (spaceres =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, target_dp, target_name, - target_namelen))) + error =3D xfs_dir_canenter(tp, target_dp, target_name, spaceres); + if (error) goto error_return; /* * If target does not exist and the rename crosses @@ -384,8 +361,8 @@ xfs_rename( * to account for the ".." reference from the new entry. */ error =3D xfs_dir_createname(tp, target_dp, target_name, - target_namelen, src_ip->i_ino, - &first_block, &free_list, spaceres); + src_ip->i_ino, &first_block, + &free_list, spaceres); if (error =3D=3D ENOSPC) goto error_return; if (error) @@ -424,7 +401,7 @@ xfs_rename( * name at the destination directory, remove it first. */ error =3D xfs_dir_replace(tp, target_dp, target_name, - target_namelen, src_ip->i_ino, + src_ip->i_ino, &first_block, &free_list, spaceres); if (error) goto abort_return; @@ -461,7 +438,8 @@ xfs_rename( * Rewrite the ".." entry to point to the new * directory. */ - error =3D xfs_dir_replace(tp, src_ip, "..", 2, target_dp->i_ino, + error =3D xfs_dir_replace(tp, src_ip, &xfs_name_dotdot, + target_dp->i_ino, &first_block, &free_list, spaceres); ASSERT(error !=3D EEXIST); if (error) @@ -497,8 +475,8 @@ xfs_rename( goto abort_return; } - error =3D xfs_dir_removename(tp, src_dp, src_name, src_namelen, - src_ip->i_ino, &first_block, &free_list, spaceres); + error =3D xfs_dir_removename(tp, src_dp, src_name, src_ip->i_ino, + &first_block, &free_list, spaceres); if (error) goto abort_return; xfs_ichgtime(src_dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); @@ -583,7 +561,7 @@ std_return: (void) XFS_SEND_NAMESP (mp, DM_EVENT_POSTRENAME, src_dp, DM_RIGHT_NULL, target_dp, DM_RIGHT_NULL, - src_name, target_name, + src_name->name, target_name->name, 0, error, 0); } return error; Index: kern_ci/fs/xfs/xfs_types.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_types.h +++ kern_ci/fs/xfs/xfs_types.h @@ -160,4 +160,9 @@ typedef enum { XFS_BTNUM_MAX } xfs_btnum_t; +struct xfs_name { + const char *name; + int len; +}; + #endif /* __XFS_TYPES_H__ */ Index: kern_ci/fs/xfs/xfs_utils.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_utils.c +++ kern_ci/fs/xfs/xfs_utils.c @@ -45,7 +45,7 @@ int xfs_dir_lookup_int( xfs_inode_t *dp, uint lock_mode, - bhv_vname_t *dentry, + struct xfs_name *name, xfs_ino_t *inum, xfs_inode_t **ipp) { @@ -53,7 +53,7 @@ xfs_dir_lookup_int( xfs_itrace_entry(dp); - error =3D xfs_dir_lookup(NULL, dp, VNAME(dentry), VNAMELEN(dentry), inum); + error =3D xfs_dir_lookup(NULL, dp, name, inum); if (!error) { /* * Unlock the directory. We do this because we can't Index: kern_ci/fs/xfs/xfs_utils.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_utils.h +++ kern_ci/fs/xfs/xfs_utils.h @@ -21,8 +21,8 @@ #define IRELE(ip) VN_RELE(XFS_ITOV(ip)) #define IHOLD(ip) VN_HOLD(XFS_ITOV(ip)) -extern int xfs_dir_lookup_int(xfs_inode_t *, uint, bhv_vname_t *,=20=20 xfs_ino_t *, - xfs_inode_t **); +extern int xfs_dir_lookup_int(xfs_inode_t *, uint, struct xfs_name *, + xfs_ino_t *, xfs_inode_t **); extern int xfs_truncate_file(xfs_mount_t *, xfs_inode_t *); extern int xfs_dir_ialloc(xfs_trans_t **, xfs_inode_t *, mode_t,=20=20 xfs_nlink_t, xfs_dev_t, cred_t *, prid_t, int, Index: kern_ci/fs/xfs/xfs_vnodeops.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_vnodeops.c +++ kern_ci/fs/xfs/xfs_vnodeops.c @@ -1762,7 +1762,7 @@ xfs_inactive( int xfs_lookup( xfs_inode_t *dp, - bhv_vname_t *dentry, + struct xfs_name *name, xfs_inode_t **ipp) { xfs_inode_t *ip; @@ -1776,7 +1776,7 @@ xfs_lookup( return XFS_ERROR(EIO); lock_mode =3D xfs_ilock_map_shared(dp); - error =3D xfs_dir_lookup_int(dp, lock_mode, dentry, &e_inum, &ip); + error =3D xfs_dir_lookup_int(dp, lock_mode, name, &e_inum, &ip); if (!error) { *ipp =3D ip; xfs_itrace_ref(ip); @@ -1788,17 +1788,16 @@ xfs_lookup( int xfs_create( xfs_inode_t *dp, - bhv_vname_t *dentry, + struct xfs_name *name, mode_t mode, xfs_dev_t rdev, xfs_inode_t **ipp, cred_t *credp) { - char *name =3D VNAME(dentry); - xfs_mount_t *mp =3D dp->i_mount; + xfs_mount_t *mp =3D dp->i_mount; xfs_inode_t *ip; xfs_trans_t *tp; - int error; + int error; xfs_bmap_free_t free_list; xfs_fsblock_t first_block; boolean_t unlock_dp_on_error =3D B_FALSE; @@ -1808,17 +1807,14 @@ xfs_create( xfs_prid_t prid; struct xfs_dquot *udqp, *gdqp; uint resblks; - int namelen; ASSERT(!*ipp); xfs_itrace_entry(dp); - namelen =3D VNAMELEN(dentry); - if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_CREATE, dp, DM_RIGHT_NULL, NULL, - DM_RIGHT_NULL, name, NULL, + DM_RIGHT_NULL, name->name, NULL, mode, 0, 0); if (error) @@ -1850,7 +1846,7 @@ xfs_create( tp =3D xfs_trans_alloc(mp, XFS_TRANS_CREATE); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - resblks =3D XFS_CREATE_SPACE_RES(mp, namelen); + resblks =3D XFS_CREATE_SPACE_RES(mp, name->len); /* * Initially assume that the file does not exist and * reserve the resources for that case. If that is not @@ -1883,7 +1879,8 @@ xfs_create( if (error) goto error_return; - if (resblks =3D=3D 0 && (error =3D xfs_dir_canenter(tp, dp, name, namelen= ))) + error =3D xfs_dir_canenter(tp, dp, name, resblks); + if (error) goto error_return; error =3D xfs_dir_ialloc(&tp, dp, mode, 1, rdev, credp, prid, resblks > 0, @@ -1913,7 +1910,7 @@ xfs_create( xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL); unlock_dp_on_error =3D B_FALSE; - error =3D xfs_dir_createname(tp, dp, name, namelen, ip->i_ino, + error =3D xfs_dir_createname(tp, dp, name, ip->i_ino, &first_block, &free_list, resblks ? resblks - XFS_IALLOC_SPACE_RES(mp) : 0); if (error) { @@ -1974,7 +1971,7 @@ std_return: (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTCREATE, dp, DM_RIGHT_NULL, *ipp ? ip : NULL, - DM_RIGHT_NULL, name, NULL, + DM_RIGHT_NULL, name->name, NULL, mode, error, 0); } return error; @@ -2266,12 +2263,10 @@ int remove_which_error_return =3D 0; int xfs_remove( xfs_inode_t *dp, - bhv_vname_t *dentry) + struct xfs_name *name, + xfs_inode_t *ip) { - char *name =3D VNAME(dentry); xfs_mount_t *mp =3D dp->i_mount; - xfs_inode_t *ip =3D VNAME_TO_INODE(dentry); - int namelen =3D VNAMELEN(dentry); xfs_trans_t *tp =3D NULL; int error =3D 0; xfs_bmap_free_t free_list; @@ -2287,9 +2282,9 @@ xfs_remove( return XFS_ERROR(EIO); if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { - error =3D XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, - DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - name, NULL, ip->i_d.di_mode, 0, 0); + error =3D XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, DM_RIGHT_NULL, + NULL, DM_RIGHT_NULL, name->name, NULL, + ip->i_d.di_mode, 0, 0); if (error) return error; } @@ -2374,7 +2369,7 @@ xfs_remove( * Entry must exist since we did a lookup in xfs_lock_dir_and_entry. */ XFS_BMAP_INIT(&free_list, &first_block); - error =3D xfs_dir_removename(tp, dp, name, namelen, ip->i_ino, + error =3D xfs_dir_removename(tp, dp, name, ip->i_ino, &first_block, &free_list, 0); if (error) { ASSERT(error !=3D ENOENT); @@ -2442,7 +2437,7 @@ xfs_remove( (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - name, NULL, ip->i_d.di_mode, error, 0); + name->name, NULL, ip->i_d.di_mode, error, 0); } return error; @@ -2472,7 +2467,7 @@ int xfs_link( xfs_inode_t *tdp, xfs_inode_t *sip, - bhv_vname_t *dentry) + struct xfs_name *target_name) { xfs_mount_t *mp =3D tdp->i_mount; xfs_trans_t *tp; @@ -2483,13 +2478,10 @@ xfs_link( int cancel_flags; int committed; int resblks; - char *target_name =3D VNAME(dentry); - int target_namelen; xfs_itrace_entry(tdp); xfs_itrace_entry(sip); - target_namelen =3D VNAMELEN(dentry); ASSERT(!S_ISDIR(sip->i_d.di_mode)); if (XFS_FORCED_SHUTDOWN(mp)) @@ -2499,7 +2491,7 @@ xfs_link( error =3D XFS_SEND_NAMESP(mp, DM_EVENT_LINK, tdp, DM_RIGHT_NULL, sip, DM_RIGHT_NULL, - target_name, NULL, 0, 0, 0); + target_name->name, NULL, 0, 0, 0); if (error) return error; } @@ -2514,7 +2506,7 @@ xfs_link( tp =3D xfs_trans_alloc(mp, XFS_TRANS_LINK); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - resblks =3D XFS_LINK_SPACE_RES(mp, target_namelen); + resblks =3D XFS_LINK_SPACE_RES(mp, target_name->len); error =3D xfs_trans_reserve(tp, resblks, XFS_LINK_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_LINK_LOG_COUNT); if (error =3D=3D ENOSPC) { @@ -2566,15 +2558,14 @@ xfs_link( goto error_return; } - if (resblks =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, tdp, target_name, target_namelen))) + error =3D xfs_dir_canenter(tp, tdp, target_name, resblks); + if (error) goto error_return; XFS_BMAP_INIT(&free_list, &first_block); - error =3D xfs_dir_createname(tp, tdp, target_name, target_namelen, - sip->i_ino, &first_block, &free_list, - resblks); + error =3D xfs_dir_createname(tp, tdp, target_name, sip->i_ino, + &first_block, &free_list, resblks); if (error) goto abort_return; xfs_ichgtime(tdp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); @@ -2610,7 +2601,7 @@ std_return: (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTLINK, tdp, DM_RIGHT_NULL, sip, DM_RIGHT_NULL, - target_name, NULL, 0, error, 0); + target_name->name, NULL, 0, error, 0); } return error; @@ -2627,13 +2618,11 @@ std_return: int xfs_mkdir( xfs_inode_t *dp, - bhv_vname_t *dentry, + struct xfs_name *dir_name, mode_t mode, xfs_inode_t **ipp, cred_t *credp) { - char *dir_name =3D VNAME(dentry); - int dir_namelen =3D VNAMELEN(dentry); xfs_mount_t *mp =3D dp->i_mount; xfs_inode_t *cdp; /* inode of created dir */ xfs_trans_t *tp; @@ -2657,7 +2646,7 @@ xfs_mkdir( if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_CREATE, dp, DM_RIGHT_NULL, NULL, - DM_RIGHT_NULL, dir_name, NULL, + DM_RIGHT_NULL, dir_name->name, NULL, mode, 0, 0); if (error) return error; @@ -2686,7 +2675,7 @@ xfs_mkdir( tp =3D xfs_trans_alloc(mp, XFS_TRANS_MKDIR); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - resblks =3D XFS_MKDIR_SPACE_RES(mp, dir_namelen); + resblks =3D XFS_MKDIR_SPACE_RES(mp, dir_name->len); error =3D xfs_trans_reserve(tp, resblks, XFS_MKDIR_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_MKDIR_LOG_COUNT); if (error =3D=3D ENOSPC) { @@ -2718,8 +2707,8 @@ xfs_mkdir( if (error) goto error_return; - if (resblks =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, dp, dir_name, dir_namelen))) + error =3D xfs_dir_canenter(tp, dp, dir_name, resblks); + if (error) goto error_return; /* * create the directory inode. @@ -2748,9 +2737,9 @@ xfs_mkdir( XFS_BMAP_INIT(&free_list, &first_block); - error =3D xfs_dir_createname(tp, dp, dir_name, dir_namelen, cdp->i_ino, - &first_block, &free_list, resblks ? - resblks - XFS_IALLOC_SPACE_RES(mp) : 0); + error =3D xfs_dir_createname(tp, dp, dir_name, cdp->i_ino, + &first_block, &free_list, resblks ? + resblks - XFS_IALLOC_SPACE_RES(mp) : 0); if (error) { ASSERT(error !=3D ENOSPC); goto error1; @@ -2815,7 +2804,7 @@ std_return: dp, DM_RIGHT_NULL, created ? cdp : NULL, DM_RIGHT_NULL, - dir_name, NULL, + dir_name->name, NULL, mode, error, 0); } return error; @@ -2839,13 +2828,11 @@ std_return: int xfs_rmdir( xfs_inode_t *dp, - bhv_vname_t *dentry) + struct xfs_name *name, + xfs_inode_t *cdp) { bhv_vnode_t *dir_vp =3D XFS_ITOV(dp); - char *name =3D VNAME(dentry); - int namelen =3D VNAMELEN(dentry); xfs_mount_t *mp =3D dp->i_mount; - xfs_inode_t *cdp =3D VNAME_TO_INODE(dentry); xfs_trans_t *tp; int error; xfs_bmap_free_t free_list; @@ -2863,8 +2850,8 @@ xfs_rmdir( if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, DM_RIGHT_NULL, - NULL, DM_RIGHT_NULL, - name, NULL, cdp->i_d.di_mode, 0, 0); + NULL, DM_RIGHT_NULL, name->name, + NULL, cdp->i_d.di_mode, 0, 0); if (error) return XFS_ERROR(error); } @@ -2958,7 +2945,7 @@ xfs_rmdir( goto error_return; } - error =3D xfs_dir_removename(tp, dp, name, namelen, cdp->i_ino, + error =3D xfs_dir_removename(tp, dp, name, cdp->i_ino, &first_block, &free_list, resblks); if (error) goto error1; @@ -3038,7 +3025,7 @@ xfs_rmdir( (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - name, NULL, cdp->i_d.di_mode, + name->name, NULL, cdp->i_d.di_mode, error, 0); } return error; @@ -3056,8 +3043,8 @@ xfs_rmdir( int xfs_symlink( xfs_inode_t *dp, - bhv_vname_t *dentry, - char *target_path, + struct xfs_name *link_name, + const char *target_path, mode_t mode, xfs_inode_t **ipp, cred_t *credp) @@ -3077,15 +3064,13 @@ xfs_symlink( int nmaps; xfs_bmbt_irec_t mval[SYMLINK_MAPS]; xfs_daddr_t d; - char *cur_chunk; + const char *cur_chunk; int byte_cnt; int n; xfs_buf_t *bp; xfs_prid_t prid; struct xfs_dquot *udqp, *gdqp; uint resblks; - char *link_name =3D VNAME(dentry); - int link_namelen; *ipp =3D NULL; error =3D 0; @@ -3097,8 +3082,6 @@ xfs_symlink( if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); - link_namelen =3D VNAMELEN(dentry); - /* * Check component lengths of the target path name. */ @@ -3109,7 +3092,7 @@ xfs_symlink( if (DM_EVENT_ENABLED(dp, DM_EVENT_SYMLINK)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_SYMLINK, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - link_name, target_path, 0, 0, 0); + link_name->name, target_path, 0, 0, 0); if (error) return error; } @@ -3141,7 +3124,7 @@ xfs_symlink( fs_blocks =3D 0; else fs_blocks =3D XFS_B_TO_FSB(mp, pathlen); - resblks =3D XFS_SYMLINK_SPACE_RES(mp, link_namelen, fs_blocks); + resblks =3D XFS_SYMLINK_SPACE_RES(mp, link_name->len, fs_blocks); error =3D xfs_trans_reserve(tp, resblks, XFS_SYMLINK_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_SYMLINK_LOG_COUNT); if (error =3D=3D ENOSPC && fs_blocks =3D=3D 0) { @@ -3175,8 +3158,8 @@ xfs_symlink( /* * Check for ability to enter directory entry, if no space reserved. */ - if (resblks =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, dp, link_name, link_namelen))) + error =3D xfs_dir_canenter(tp, dp, link_name, resblks); + if (error) goto error_return; /* * Initialize the bmap freelist prior to calling either @@ -3268,8 +3251,8 @@ xfs_symlink( /* * Create the directory entry for the symlink. */ - error =3D xfs_dir_createname(tp, dp, link_name, link_namelen, ip->i_ino, - &first_block, &free_list, resblks); + error =3D xfs_dir_createname(tp, dp, link_name, ip->i_ino, + &first_block, &free_list, resblks); if (error) goto error1; xfs_ichgtime(dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); @@ -3313,8 +3296,8 @@ std_return: (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTSYMLINK, dp, DM_RIGHT_NULL, error ? NULL : ip, - DM_RIGHT_NULL, link_name, target_path, - 0, error, 0); + DM_RIGHT_NULL, link_name->name, + target_path, 0, error, 0); } if (!error) Index: kern_ci/fs/xfs/xfs_vnodeops.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_vnodeops.h +++ kern_ci/fs/xfs/xfs_vnodeops.h @@ -23,20 +23,22 @@ int xfs_fsync(struct xfs_inode *ip, int xfs_off_t stop); int xfs_release(struct xfs_inode *ip); int xfs_inactive(struct xfs_inode *ip); -int xfs_lookup(struct xfs_inode *dp, bhv_vname_t *dentry, +int xfs_lookup(struct xfs_inode *dp, struct xfs_name *name, struct xfs_inode **ipp); -int xfs_create(struct xfs_inode *dp, bhv_vname_t *dentry, mode_t mode, +int xfs_create(struct xfs_inode *dp, struct xfs_name *name, mode_t mode, xfs_dev_t rdev, struct xfs_inode **ipp, struct cred *credp); -int xfs_remove(struct xfs_inode *dp, bhv_vname_t *dentry); +int xfs_remove(struct xfs_inode *dp, struct xfs_name *name, + struct xfs_inode *ip); int xfs_link(struct xfs_inode *tdp, struct xfs_inode *sip, - bhv_vname_t *dentry); -int xfs_mkdir(struct xfs_inode *dp, bhv_vname_t *dentry, + struct xfs_name *target_name); +int xfs_mkdir(struct xfs_inode *dp, struct xfs_name *dir_name, mode_t mode, struct xfs_inode **ipp, struct cred *credp); -int xfs_rmdir(struct xfs_inode *dp, bhv_vname_t *dentry); +int xfs_rmdir(struct xfs_inode *dp, struct xfs_name *name, + struct xfs_inode *cdp); int xfs_readdir(struct xfs_inode *dp, void *dirent, size_t bufsize, xfs_off_t *offset, filldir_t filldir); -int xfs_symlink(struct xfs_inode *dp, bhv_vname_t *dentry, - char *target_path, mode_t mode, struct xfs_inode **ipp, +int xfs_symlink(struct xfs_inode *dp, struct xfs_name *link_name, + const char *target_path, mode_t mode, struct xfs_inode **ipp, struct cred *credp); int xfs_inode_flush(struct xfs_inode *ip, int flags); int xfs_set_dmattrs(struct xfs_inode *ip, u_int evmask, u_int16_t state); @@ -44,8 +46,9 @@ int xfs_reclaim(struct xfs_inode *ip); int xfs_change_file_space(struct xfs_inode *ip, int cmd, xfs_flock64_t *bf, xfs_off_t offset, struct cred *credp, int attr_flags); -int xfs_rename(struct xfs_inode *src_dp, bhv_vname_t *src_vname, - struct xfs_inode *target_dp, bhv_vname_t *target_vname); +int xfs_rename(struct xfs_inode *src_dp, struct xfs_name *src_name, + struct xfs_inode *src_ip, struct xfs_inode *target_dp, + struct xfs_name *target_name); int xfs_attr_get(struct xfs_inode *ip, const char *name, char *value, int *valuelenp, int flags, cred_t *cred); int xfs_attr_set(struct xfs_inode *dp, const char *name, char *value, ------------eWkzpew8UCFVfG4FOq69Ba Content-Disposition: attachment; filename=remove_bhv_vname.patch Content-Type: text/x-patch; name=remove_bhv_vname.patch Content-Transfer-Encoding: Quoted-Printable --- fs/dmapi/dmapi_event.c | 4 - fs/dmapi/dmapi_kern.h | 4 - fs/xfs/dmapi/xfs_dm.c | 6 +- fs/xfs/linux-2.6/xfs_export.c | 5 - fs/xfs/linux-2.6/xfs_iops.c | 55 ++++++++++++++----- fs/xfs/linux-2.6/xfs_vnode.h | 9 --- fs/xfs/xfs_dir2.c | 62 +++++++++------------ fs/xfs/xfs_dir2.h | 12 ++-- fs/xfs/xfs_mount.h | 4 - fs/xfs/xfs_rename.c | 82 ++++++++++------------------ fs/xfs/xfs_types.h | 5 + fs/xfs/xfs_utils.c | 4 - fs/xfs/xfs_utils.h | 4 - fs/xfs/xfs_vnodeops.c | 121 ++++++++++++++++++-------------------= ----- fs/xfs/xfs_vnodeops.h | 23 ++++--- 15 files changed, 191 insertions(+), 209 deletions(-) Index: kern_ci/fs/dmapi/dmapi_event.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/dmapi/dmapi_event.c +++ kern_ci/fs/dmapi/dmapi_event.c @@ -622,8 +622,8 @@ dm_send_namesp_event( dm_right_t vp1_right, struct inode *ip2, dm_right_t vp2_right, - char *name1, - char *name2, + const char *name1, + const char *name2, mode_t mode, int retcode, int flags) Index: kern_ci/fs/dmapi/dmapi_kern.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/dmapi/dmapi_kern.h +++ kern_ci/fs/dmapi/dmapi_kern.h @@ -119,8 +119,8 @@ int dm_send_namesp_event( dm_right_t vp1_right, struct inode *ip2, dm_right_t vp2_right, - char *name1, - char *name2, + const char *name1, + const char *name2, mode_t mode, int retcode, int flags); Index: kern_ci/fs/xfs/dmapi/xfs_dm.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/dmapi/xfs_dm.c +++ kern_ci/fs/xfs/dmapi/xfs_dm.c @@ -245,7 +245,7 @@ xfs_copyin_attrname( size_t len; =20 strcpy(to->dan_chars, dmattr_prefix); -=20=20=20=20=20=20=20=20 + len =3D strnlen_user((char __user *)from, DM_ATTR_NAME_SIZE); if (len =3D=3D 0) error =3D EFAULT; @@ -3172,8 +3172,8 @@ xfs_dm_send_namesp_event( dm_right_t vp1_right, xfs_inode_t *ip2, dm_right_t vp2_right, - char *name1, - char *name2, + const char *name1, + const char *name2, mode_t mode, int retcode, int flags) Index: kern_ci/fs/xfs/linux-2.6/xfs_export.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_export.c +++ kern_ci/fs/xfs/linux-2.6/xfs_export.c @@ -22,6 +22,7 @@ #include "xfs_trans.h" #include "xfs_sb.h" #include "xfs_ag.h" +#include "xfs_dir2.h" #include "xfs_dmapi.h" #include "xfs_mount.h" #include "xfs_export.h" @@ -30,8 +31,6 @@ #include "xfs_inode.h" #include "xfs_vfsops.h" =20 -static struct dentry dotdot =3D { .d_name.name =3D "..", .d_name.len =3D 2= , }; - /* * Note that we only accept fileids which are long enough rather than allow * the parent generation number to default to zero. XFS considers zero a @@ -216,7 +215,7 @@ xfs_fs_get_parent( struct xfs_inode *cip; struct dentry *parent; =20 - error =3D xfs_lookup(XFS_I(child->d_inode), &dotdot, &cip); + error =3D xfs_lookup(XFS_I(child->d_inode), &xfs_name_dotdot, &cip); if (unlikely(error)) return ERR_PTR(-error); =20 Index: kern_ci/fs/xfs/linux-2.6/xfs_iops.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_iops.c +++ kern_ci/fs/xfs/linux-2.6/xfs_iops.c @@ -239,6 +239,15 @@ xfs_init_security( return error; } =20 +static void +xfs_dentry_to_name( + struct xfs_name *namep, + struct dentry *dentry) +{ + namep->name =3D dentry->d_name.name; + namep->len =3D dentry->d_name.len; +} + STATIC void xfs_cleanup_inode( struct inode *dir, @@ -246,20 +255,19 @@ xfs_cleanup_inode( struct dentry *dentry, int mode) { - struct dentry teardown =3D {}; + struct xfs_name teardown; =20 /* Oh, the horror. * If we can't add the ACL or we fail in * xfs_init_security we must back out. * ENOSPC can hit here, among other things. */ - teardown.d_inode =3D inode; - teardown.d_name =3D dentry->d_name; + xfs_dentry_to_name(&teardown, dentry); =20 if (S_ISDIR(mode)) - xfs_rmdir(XFS_I(dir), &teardown); + xfs_rmdir(XFS_I(dir), &teardown, XFS_I(inode)); else - xfs_remove(XFS_I(dir), &teardown); + xfs_remove(XFS_I(dir), &teardown, XFS_I(inode)); iput(inode); } =20 @@ -273,6 +281,7 @@ xfs_vn_mknod( struct inode *inode; struct xfs_inode *ip =3D NULL; xfs_acl_t *default_acl =3D NULL; + struct xfs_name name; attrexists_t test_default_acl =3D _ACL_DEFAULT_EXISTS; int error; =20 @@ -293,6 +302,8 @@ xfs_vn_mknod( } } =20 + xfs_dentry_to_name(&name, dentry); + if (IS_POSIXACL(dir) && !default_acl) mode &=3D ~current->fs->umask; =20 @@ -303,10 +314,10 @@ xfs_vn_mknod( case S_IFSOCK: rdev =3D sysv_encode_dev(rdev); case S_IFREG: - error =3D xfs_create(XFS_I(dir), dentry, mode, rdev, &ip, NULL); + error =3D xfs_create(XFS_I(dir), &name, mode, rdev, &ip, NULL); break; case S_IFDIR: - error =3D xfs_mkdir(XFS_I(dir), dentry, mode, &ip, NULL); + error =3D xfs_mkdir(XFS_I(dir), &name, mode, &ip, NULL); break; default: error =3D EINVAL; @@ -371,12 +382,14 @@ xfs_vn_lookup( struct nameidata *nd) { struct xfs_inode *cip; + struct xfs_name name; int error; =20 if (dentry->d_name.len >=3D MAXNAMELEN) return ERR_PTR(-ENAMETOOLONG); =20 - error =3D xfs_lookup(XFS_I(dir), dentry, &cip); + xfs_dentry_to_name(&name, dentry); + error =3D xfs_lookup(XFS_I(dir), &name, &cip); if (unlikely(error)) { if (unlikely(error !=3D ENOENT)) return ERR_PTR(-error); @@ -394,12 +407,14 @@ xfs_vn_link( struct dentry *dentry) { struct inode *inode; /* inode of guy being linked to */ + struct xfs_name name; int error; =20 inode =3D old_dentry->d_inode; + xfs_dentry_to_name(&name, dentry); =20 igrab(inode); - error =3D xfs_link(XFS_I(dir), XFS_I(inode), dentry); + error =3D xfs_link(XFS_I(dir), XFS_I(inode), &name); if (unlikely(error)) { iput(inode); return -error; @@ -417,11 +432,13 @@ xfs_vn_unlink( struct dentry *dentry) { struct inode *inode; + struct xfs_name name; int error; =20 inode =3D dentry->d_inode; + xfs_dentry_to_name(&name, dentry); =20 - error =3D xfs_remove(XFS_I(dir), dentry); + error =3D xfs_remove(XFS_I(dir), &name, XFS_I(inode)); if (likely(!error)) { xfs_validate_fields(dir); /* size needs update */ xfs_validate_fields(inode); @@ -437,14 +454,15 @@ xfs_vn_symlink( { struct inode *inode; struct xfs_inode *cip =3D NULL; + struct xfs_name name; int error; mode_t mode; =20 mode =3D S_IFLNK | (irix_symlink_mode ? 0777 & ~current->fs->umask : S_IRWXUGO); + xfs_dentry_to_name(&name, dentry); =20 - error =3D xfs_symlink(XFS_I(dir), dentry, (char *)symname, mode, - &cip, NULL); + error =3D xfs_symlink(XFS_I(dir), &name, symname, mode, &cip, NULL); if (unlikely(error)) goto out; =20 @@ -471,9 +489,12 @@ xfs_vn_rmdir( struct dentry *dentry) { struct inode *inode =3D dentry->d_inode; + struct xfs_name name; int error; =20 - error =3D xfs_rmdir(XFS_I(dir), dentry); + xfs_dentry_to_name(&name, dentry); + + error =3D xfs_rmdir(XFS_I(dir), &name, XFS_I(inode)); if (likely(!error)) { xfs_validate_fields(inode); xfs_validate_fields(dir); @@ -489,9 +510,15 @@ xfs_vn_rename( struct dentry *ndentry) { struct inode *new_inode =3D ndentry->d_inode; + struct xfs_name oname; + struct xfs_name nname; int error; =20 - error =3D xfs_rename(XFS_I(odir), odentry, XFS_I(ndir), ndentry); + xfs_dentry_to_name(&oname, odentry); + xfs_dentry_to_name(&nname, ndentry); + + error =3D xfs_rename(XFS_I(odir), &oname, XFS_I(odentry->d_inode), + XFS_I(ndir), &nname); if (likely(!error)) { if (new_inode) xfs_validate_fields(new_inode); Index: kern_ci/fs/xfs/linux-2.6/xfs_vnode.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_vnode.h +++ kern_ci/fs/xfs/linux-2.6/xfs_vnode.h @@ -23,8 +23,6 @@ struct bhv_vattr; struct xfs_iomap; struct attrlist_cursor_kern; =20 -typedef struct dentry bhv_vname_t; -typedef __u64 bhv_vnumber_t; typedef struct inode bhv_vnode_t; =20 #define VN_ISLNK(vp) S_ISLNK((vp)->i_mode) @@ -211,13 +209,6 @@ static inline bhv_vnode_t *vn_grab(bhv_v } =20 /* - * Vname handling macros. - */ -#define VNAME(dentry) ((char *) (dentry)->d_name.name) -#define VNAMELEN(dentry) ((dentry)->d_name.len) -#define VNAME_TO_INODE(dentry) (XFS_I((dentry)->d_inode)) - -/* * Dealing with bad inodes */ static inline int VN_BAD(bhv_vnode_t *vp) Index: kern_ci/fs/xfs/xfs_dir2.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -44,6 +44,7 @@ #include "xfs_error.h" #include "xfs_vnodeops.h" =20 +struct xfs_name xfs_name_dotdot =3D {"..", 2}; =20 void xfs_dir_mount( @@ -146,8 +147,7 @@ int xfs_dir_createname( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, + struct xfs_name *name, xfs_ino_t inum, /* new entry inode number */ xfs_fsblock_t *first, /* bmap's firstblock */ xfs_bmap_free_t *flist, /* bmap's freeblock list */ @@ -162,9 +162,9 @@ xfs_dir_createname( return rval; XFS_STATS_INC(xs_dir_create); =20 - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D inum; args.dp =3D dp; args.firstblock =3D first; @@ -197,8 +197,7 @@ int xfs_dir_lookup( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, + struct xfs_name *name, xfs_ino_t *inum) /* out: inode number */ { xfs_da_args_t args; @@ -207,18 +206,14 @@ xfs_dir_lookup( =20 ASSERT((dp->i_d.di_mode & S_IFMT) =3D=3D S_IFDIR); XFS_STATS_INC(xs_dir_lookup); + memset(&args, 0, sizeof(xfs_da_args_t)); =20 - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); - args.inumber =3D 0; + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.dp =3D dp; - args.firstblock =3D NULL; - args.flist =3D NULL; - args.total =3D 0; args.whichfork =3D XFS_DATA_FORK; args.trans =3D tp; - args.justcheck =3D args.addname =3D 0; args.oknoent =3D 1; =20 if (dp->i_d.di_format =3D=3D XFS_DINODE_FMT_LOCAL) @@ -247,8 +242,7 @@ int xfs_dir_removename( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, - int namelen, + struct xfs_name *name, xfs_ino_t ino, xfs_fsblock_t *first, /* bmap's firstblock */ xfs_bmap_free_t *flist, /* bmap's freeblock list */ @@ -261,9 +255,9 @@ xfs_dir_removename( ASSERT((dp->i_d.di_mode & S_IFMT) =3D=3D S_IFDIR); XFS_STATS_INC(xs_dir_remove); =20 - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D ino; args.dp =3D dp; args.firstblock =3D first; @@ -329,8 +323,7 @@ int xfs_dir_replace( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, /* name of entry to replace */ - int namelen, + struct xfs_name *name, /* name of entry to replace */ xfs_ino_t inum, /* new inode number */ xfs_fsblock_t *first, /* bmap's firstblock */ xfs_bmap_free_t *flist, /* bmap's freeblock list */ @@ -345,9 +338,9 @@ xfs_dir_replace( if ((rval =3D xfs_dir_ino_validate(tp->t_mountp, inum))) return rval; =20 - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.inumber =3D inum; args.dp =3D dp; args.firstblock =3D first; @@ -374,28 +367,29 @@ xfs_dir_replace( =20 /* * See if this entry can be added to the directory without allocating spac= e. + * First checks that the caller couldn't reserve enough space (resblks =3D= 0). */ int xfs_dir_canenter( xfs_trans_t *tp, xfs_inode_t *dp, - char *name, /* name of entry to add */ - int namelen) + struct xfs_name *name, /* name of entry to add */ + uint resblks) { xfs_da_args_t args; int rval; int v; /* type-checking value */ =20 + if (resblks) + return 0; + ASSERT((dp->i_d.di_mode & S_IFMT) =3D=3D S_IFDIR); + memset(&args, 0, sizeof(xfs_da_args_t)); =20 - args.name =3D name; - args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); - args.inumber =3D 0; + args.name =3D name->name; + args.namelen =3D name->len; + args.hashval =3D xfs_da_hashname(name->name, name->len); args.dp =3D dp; - args.firstblock =3D NULL; - args.flist =3D NULL; - args.total =3D 0; args.whichfork =3D XFS_DATA_FORK; args.trans =3D tp; args.justcheck =3D args.addname =3D args.oknoent =3D 1; Index: kern_ci/fs/xfs/xfs_dir2.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_dir2.h +++ kern_ci/fs/xfs/xfs_dir2.h @@ -59,6 +59,8 @@ typedef __uint32_t xfs_dir2_db_t; */ typedef xfs_off_t xfs_dir2_off_t; =20 +extern struct xfs_name xfs_name_dotdot; + /* * Generic directory interface routines */ @@ -68,21 +70,21 @@ extern int xfs_dir_isempty(struct xfs_in extern int xfs_dir_init(struct xfs_trans *tp, struct xfs_inode *dp, struct xfs_inode *pdp); extern int xfs_dir_createname(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t inum, + struct xfs_name *name, xfs_ino_t inum, xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_lookup(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t *inum); + struct xfs_name *name, xfs_ino_t *inum); extern int xfs_dir_removename(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t ino, + struct xfs_name *name, xfs_ino_t ino, xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_replace(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen, xfs_ino_t inum, + struct xfs_name *name, xfs_ino_t inum, xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_canenter(struct xfs_trans *tp, struct xfs_inode *dp, - char *name, int namelen); + struct xfs_name *name, uint resblks); extern int xfs_dir_ino_validate(struct xfs_mount *mp, xfs_ino_t ino); =20 /* Index: kern_ci/fs/xfs/xfs_mount.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_mount.h +++ kern_ci/fs/xfs/xfs_mount.h @@ -73,7 +73,7 @@ typedef int (*xfs_send_destroy_t)(struct typedef int (*xfs_send_namesp_t)(dm_eventtype_t, struct xfs_mount *, struct xfs_inode *, dm_right_t, struct xfs_inode *, dm_right_t, - char *, char *, mode_t, int, int); + const char *, const char *, mode_t, int, int); typedef int (*xfs_send_mount_t)(struct xfs_mount *, dm_right_t, char *, char *); typedef void (*xfs_send_unmount_t)(struct xfs_mount *, struct xfs_inode *, @@ -401,7 +401,7 @@ typedef struct xfs_mount { =20 /* * Allow large block sizes to be reported to userspace programs if the - * "largeio" mount option is used.=20 + * "largeio" mount option is used. * * If compatibility mode is specified, simply return the basic unit of cac= hing * so that we don't get inefficient read/modify/write I/O from user apps. Index: kern_ci/fs/xfs/xfs_rename.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_rename.c +++ kern_ci/fs/xfs/xfs_rename.c @@ -83,25 +83,24 @@ int xfs_rename_skip, xfs_rename_nskip; */ STATIC int xfs_lock_for_rename( - xfs_inode_t *dp1, /* old (source) directory inode */ - xfs_inode_t *dp2, /* new (target) directory inode */ - bhv_vname_t *vname1,/* old entry name */ - bhv_vname_t *vname2,/* new entry name */ - xfs_inode_t **ipp1, /* inode of old entry */ - xfs_inode_t **ipp2, /* inode of new entry, if it + xfs_inode_t *dp1, /* in: old (source) directory inode */ + xfs_inode_t *dp2, /* in: new (target) directory inode */ + xfs_inode_t *ip1, /* in: inode of old entry */ + struct xfs_name *name2, /* in: new entry name */ + xfs_inode_t **ipp2, /* out: inode of new entry, if it already exists, NULL otherwise. */ - xfs_inode_t **i_tab,/* array of inode returned, sorted */ - int *num_inodes) /* number of inodes in array */ + xfs_inode_t **i_tab,/* out: array of inode returned, sorted */ + int *num_inodes) /* out: number of inodes in array */ { - xfs_inode_t *ip1 =3D VNAME_TO_INODE(vname1); - xfs_inode_t *ip2, *temp; + xfs_inode_t *ip2 =3D NULL; + xfs_inode_t *temp; xfs_ino_t inum1, inum2; int error; int i, j; uint lock_mode; int diff_dirs =3D (dp1 !=3D dp2); =20 - ip2 =3D NULL; + ASSERT(ip1); =20 /* * First, find out the current inums of the entries so that we @@ -115,17 +114,15 @@ xfs_lock_for_rename( =20 inum1 =3D ip1->i_ino; =20 - /* * Unlock dp1 and lock dp2 if they are different. */ - if (diff_dirs) { xfs_iunlock_map_shared(dp1, lock_mode); lock_mode =3D xfs_ilock_map_shared(dp2); } =20 - error =3D xfs_dir_lookup_int(dp2, lock_mode, vname2, &inum2, &ip2); + error =3D xfs_dir_lookup_int(dp2, lock_mode, name2, &inum2, &ip2); if (error =3D=3D ENOENT) { /* target does not need to exist. */ inum2 =3D 0; } else if (error) { @@ -157,6 +154,7 @@ xfs_lock_for_rename( *num_inodes =3D 4; i_tab[3] =3D ip2; } + *ipp2 =3D i_tab[3]; =20 /* * Sort the elements via bubble sort. (Remember, there are at @@ -194,21 +192,6 @@ xfs_lock_for_rename( xfs_lock_inodes(i_tab, *num_inodes, 0, XFS_ILOCK_SHARED); } =20 - /* - * Set the return value. Null out any unused entries in i_tab. - */ - *ipp1 =3D *ipp2 =3D NULL; - for (i=3D0; i < *num_inodes; i++) { - if (i_tab[i]->i_ino =3D=3D inum1) { - *ipp1 =3D i_tab[i]; - } - if (i_tab[i]->i_ino =3D=3D inum2) { - *ipp2 =3D i_tab[i]; - } - } - for (;i < 4; i++) { - i_tab[i] =3D NULL; - } return 0; } =20 @@ -218,12 +201,13 @@ xfs_lock_for_rename( int xfs_rename( xfs_inode_t *src_dp, - bhv_vname_t *src_vname, + struct xfs_name *src_name, + xfs_inode_t *src_ip, xfs_inode_t *target_dp, - bhv_vname_t *target_vname) + struct xfs_name *target_name) { xfs_trans_t *tp; - xfs_inode_t *src_ip, *target_ip; + xfs_inode_t *target_ip; xfs_mount_t *mp =3D src_dp->i_mount; int new_parent; /* moving to a new dir */ int src_is_directory; /* src_name is a directory */ @@ -237,10 +221,6 @@ xfs_rename( int spaceres; int target_link_zero =3D 0; int num_inodes; - char *src_name =3D VNAME(src_vname); - char *target_name =3D VNAME(target_vname); - int src_namelen =3D VNAMELEN(src_vname); - int target_namelen =3D VNAMELEN(target_vname); =20 xfs_itrace_entry(src_dp); xfs_itrace_entry(target_dp); @@ -250,7 +230,7 @@ xfs_rename( error =3D XFS_SEND_NAMESP(mp, DM_EVENT_RENAME, src_dp, DM_RIGHT_NULL, target_dp, DM_RIGHT_NULL, - src_name, target_name, + src_name->name, target_name->name, 0, 0, 0); if (error) { return error; @@ -267,10 +247,8 @@ xfs_rename( * does not exist in the source directory. */ tp =3D NULL; - error =3D xfs_lock_for_rename(src_dp, target_dp, src_vname, - target_vname, &src_ip, &target_ip, inodes, - &num_inodes); - + error =3D xfs_lock_for_rename(src_dp, target_dp, src_ip, target_name, + &target_ip, inodes, &num_inodes); if (error) { /* * We have nothing locked, no inode references, and @@ -316,7 +294,7 @@ xfs_rename( XFS_BMAP_INIT(&free_list, &first_block); tp =3D xfs_trans_alloc(mp, XFS_TRANS_RENAME); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - spaceres =3D XFS_RENAME_SPACE_RES(mp, target_namelen); + spaceres =3D XFS_RENAME_SPACE_RES(mp, target_name->len); error =3D xfs_trans_reserve(tp, spaceres, XFS_RENAME_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_RENAME_LOG_COUNT); if (error =3D=3D ENOSPC) { @@ -374,9 +352,8 @@ xfs_rename( * If there's no space reservation, check the entry will * fit before actually inserting it. */ - if (spaceres =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, target_dp, target_name, - target_namelen))) + error =3D xfs_dir_canenter(tp, target_dp, target_name, spaceres); + if (error) goto error_return; /* * If target does not exist and the rename crosses @@ -384,8 +361,8 @@ xfs_rename( * to account for the ".." reference from the new entry. */ error =3D xfs_dir_createname(tp, target_dp, target_name, - target_namelen, src_ip->i_ino, - &first_block, &free_list, spaceres); + src_ip->i_ino, &first_block, + &free_list, spaceres); if (error =3D=3D ENOSPC) goto error_return; if (error) @@ -424,7 +401,7 @@ xfs_rename( * name at the destination directory, remove it first. */ error =3D xfs_dir_replace(tp, target_dp, target_name, - target_namelen, src_ip->i_ino, + src_ip->i_ino, &first_block, &free_list, spaceres); if (error) goto abort_return; @@ -461,7 +438,8 @@ xfs_rename( * Rewrite the ".." entry to point to the new * directory. */ - error =3D xfs_dir_replace(tp, src_ip, "..", 2, target_dp->i_ino, + error =3D xfs_dir_replace(tp, src_ip, &xfs_name_dotdot, + target_dp->i_ino, &first_block, &free_list, spaceres); ASSERT(error !=3D EEXIST); if (error) @@ -497,8 +475,8 @@ xfs_rename( goto abort_return; } =20 - error =3D xfs_dir_removename(tp, src_dp, src_name, src_namelen, - src_ip->i_ino, &first_block, &free_list, spaceres); + error =3D xfs_dir_removename(tp, src_dp, src_name, src_ip->i_ino, + &first_block, &free_list, spaceres); if (error) goto abort_return; xfs_ichgtime(src_dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); @@ -583,7 +561,7 @@ std_return: (void) XFS_SEND_NAMESP (mp, DM_EVENT_POSTRENAME, src_dp, DM_RIGHT_NULL, target_dp, DM_RIGHT_NULL, - src_name, target_name, + src_name->name, target_name->name, 0, error, 0); } return error; Index: kern_ci/fs/xfs/xfs_types.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_types.h +++ kern_ci/fs/xfs/xfs_types.h @@ -160,4 +160,9 @@ typedef enum { XFS_BTNUM_MAX } xfs_btnum_t; =20 +struct xfs_name { + const char *name; + int len; +}; + #endif /* __XFS_TYPES_H__ */ Index: kern_ci/fs/xfs/xfs_utils.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_utils.c +++ kern_ci/fs/xfs/xfs_utils.c @@ -45,7 +45,7 @@ int xfs_dir_lookup_int( xfs_inode_t *dp, uint lock_mode, - bhv_vname_t *dentry, + struct xfs_name *name, xfs_ino_t *inum, xfs_inode_t **ipp) { @@ -53,7 +53,7 @@ xfs_dir_lookup_int( =20 xfs_itrace_entry(dp); =20 - error =3D xfs_dir_lookup(NULL, dp, VNAME(dentry), VNAMELEN(dentry), inum); + error =3D xfs_dir_lookup(NULL, dp, name, inum); if (!error) { /* * Unlock the directory. We do this because we can't Index: kern_ci/fs/xfs/xfs_utils.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_utils.h +++ kern_ci/fs/xfs/xfs_utils.h @@ -21,8 +21,8 @@ #define IRELE(ip) VN_RELE(XFS_ITOV(ip)) #define IHOLD(ip) VN_HOLD(XFS_ITOV(ip)) =20 -extern int xfs_dir_lookup_int(xfs_inode_t *, uint, bhv_vname_t *, xfs_ino_= t *, - xfs_inode_t **); +extern int xfs_dir_lookup_int(xfs_inode_t *, uint, struct xfs_name *, + xfs_ino_t *, xfs_inode_t **); extern int xfs_truncate_file(xfs_mount_t *, xfs_inode_t *); extern int xfs_dir_ialloc(xfs_trans_t **, xfs_inode_t *, mode_t, xfs_nlink= _t, xfs_dev_t, cred_t *, prid_t, int, Index: kern_ci/fs/xfs/xfs_vnodeops.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_vnodeops.c +++ kern_ci/fs/xfs/xfs_vnodeops.c @@ -1762,7 +1762,7 @@ xfs_inactive( int xfs_lookup( xfs_inode_t *dp, - bhv_vname_t *dentry, + struct xfs_name *name, xfs_inode_t **ipp) { xfs_inode_t *ip; @@ -1776,7 +1776,7 @@ xfs_lookup( return XFS_ERROR(EIO); =20 lock_mode =3D xfs_ilock_map_shared(dp); - error =3D xfs_dir_lookup_int(dp, lock_mode, dentry, &e_inum, &ip); + error =3D xfs_dir_lookup_int(dp, lock_mode, name, &e_inum, &ip); if (!error) { *ipp =3D ip; xfs_itrace_ref(ip); @@ -1788,17 +1788,16 @@ xfs_lookup( int xfs_create( xfs_inode_t *dp, - bhv_vname_t *dentry, + struct xfs_name *name, mode_t mode, xfs_dev_t rdev, xfs_inode_t **ipp, cred_t *credp) { - char *name =3D VNAME(dentry); - xfs_mount_t *mp =3D dp->i_mount; + xfs_mount_t *mp =3D dp->i_mount; xfs_inode_t *ip; xfs_trans_t *tp; - int error; + int error; xfs_bmap_free_t free_list; xfs_fsblock_t first_block; boolean_t unlock_dp_on_error =3D B_FALSE; @@ -1808,17 +1807,14 @@ xfs_create( xfs_prid_t prid; struct xfs_dquot *udqp, *gdqp; uint resblks; - int namelen; =20 ASSERT(!*ipp); xfs_itrace_entry(dp); =20 - namelen =3D VNAMELEN(dentry); - if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_CREATE, dp, DM_RIGHT_NULL, NULL, - DM_RIGHT_NULL, name, NULL, + DM_RIGHT_NULL, name->name, NULL, mode, 0, 0); =20 if (error) @@ -1850,7 +1846,7 @@ xfs_create( =20 tp =3D xfs_trans_alloc(mp, XFS_TRANS_CREATE); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - resblks =3D XFS_CREATE_SPACE_RES(mp, namelen); + resblks =3D XFS_CREATE_SPACE_RES(mp, name->len); /* * Initially assume that the file does not exist and * reserve the resources for that case. If that is not @@ -1883,7 +1879,8 @@ xfs_create( if (error) goto error_return; =20 - if (resblks =3D=3D 0 && (error =3D xfs_dir_canenter(tp, dp, name, namelen= ))) + error =3D xfs_dir_canenter(tp, dp, name, resblks); + if (error) goto error_return; error =3D xfs_dir_ialloc(&tp, dp, mode, 1, rdev, credp, prid, resblks > 0, @@ -1913,7 +1910,7 @@ xfs_create( xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL); unlock_dp_on_error =3D B_FALSE; =20 - error =3D xfs_dir_createname(tp, dp, name, namelen, ip->i_ino, + error =3D xfs_dir_createname(tp, dp, name, ip->i_ino, &first_block, &free_list, resblks ? resblks - XFS_IALLOC_SPACE_RES(mp) : 0); if (error) { @@ -1974,7 +1971,7 @@ std_return: (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTCREATE, dp, DM_RIGHT_NULL, *ipp ? ip : NULL, - DM_RIGHT_NULL, name, NULL, + DM_RIGHT_NULL, name->name, NULL, mode, error, 0); } return error; @@ -2266,12 +2263,10 @@ int remove_which_error_return =3D 0; int xfs_remove( xfs_inode_t *dp, - bhv_vname_t *dentry) + struct xfs_name *name, + xfs_inode_t *ip) { - char *name =3D VNAME(dentry); xfs_mount_t *mp =3D dp->i_mount; - xfs_inode_t *ip =3D VNAME_TO_INODE(dentry); - int namelen =3D VNAMELEN(dentry); xfs_trans_t *tp =3D NULL; int error =3D 0; xfs_bmap_free_t free_list; @@ -2287,9 +2282,9 @@ xfs_remove( return XFS_ERROR(EIO); =20 if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { - error =3D XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, - DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - name, NULL, ip->i_d.di_mode, 0, 0); + error =3D XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, DM_RIGHT_NULL, + NULL, DM_RIGHT_NULL, name->name, NULL, + ip->i_d.di_mode, 0, 0); if (error) return error; } @@ -2374,7 +2369,7 @@ xfs_remove( * Entry must exist since we did a lookup in xfs_lock_dir_and_entry. */ XFS_BMAP_INIT(&free_list, &first_block); - error =3D xfs_dir_removename(tp, dp, name, namelen, ip->i_ino, + error =3D xfs_dir_removename(tp, dp, name, ip->i_ino, &first_block, &free_list, 0); if (error) { ASSERT(error !=3D ENOENT); @@ -2442,7 +2437,7 @@ xfs_remove( (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - name, NULL, ip->i_d.di_mode, error, 0); + name->name, NULL, ip->i_d.di_mode, error, 0); } return error; =20 @@ -2472,7 +2467,7 @@ int xfs_link( xfs_inode_t *tdp, xfs_inode_t *sip, - bhv_vname_t *dentry) + struct xfs_name *target_name) { xfs_mount_t *mp =3D tdp->i_mount; xfs_trans_t *tp; @@ -2483,13 +2478,10 @@ xfs_link( int cancel_flags; int committed; int resblks; - char *target_name =3D VNAME(dentry); - int target_namelen; =20 xfs_itrace_entry(tdp); xfs_itrace_entry(sip); =20 - target_namelen =3D VNAMELEN(dentry); ASSERT(!S_ISDIR(sip->i_d.di_mode)); =20 if (XFS_FORCED_SHUTDOWN(mp)) @@ -2499,7 +2491,7 @@ xfs_link( error =3D XFS_SEND_NAMESP(mp, DM_EVENT_LINK, tdp, DM_RIGHT_NULL, sip, DM_RIGHT_NULL, - target_name, NULL, 0, 0, 0); + target_name->name, NULL, 0, 0, 0); if (error) return error; } @@ -2514,7 +2506,7 @@ xfs_link( =20 tp =3D xfs_trans_alloc(mp, XFS_TRANS_LINK); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - resblks =3D XFS_LINK_SPACE_RES(mp, target_namelen); + resblks =3D XFS_LINK_SPACE_RES(mp, target_name->len); error =3D xfs_trans_reserve(tp, resblks, XFS_LINK_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_LINK_LOG_COUNT); if (error =3D=3D ENOSPC) { @@ -2566,15 +2558,14 @@ xfs_link( goto error_return; } =20 - if (resblks =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, tdp, target_name, target_namelen))) + error =3D xfs_dir_canenter(tp, tdp, target_name, resblks); + if (error) goto error_return; =20 XFS_BMAP_INIT(&free_list, &first_block); =20 - error =3D xfs_dir_createname(tp, tdp, target_name, target_namelen, - sip->i_ino, &first_block, &free_list, - resblks); + error =3D xfs_dir_createname(tp, tdp, target_name, sip->i_ino, + &first_block, &free_list, resblks); if (error) goto abort_return; xfs_ichgtime(tdp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); @@ -2610,7 +2601,7 @@ std_return: (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTLINK, tdp, DM_RIGHT_NULL, sip, DM_RIGHT_NULL, - target_name, NULL, 0, error, 0); + target_name->name, NULL, 0, error, 0); } return error; =20 @@ -2627,13 +2618,11 @@ std_return: int xfs_mkdir( xfs_inode_t *dp, - bhv_vname_t *dentry, + struct xfs_name *dir_name, mode_t mode, xfs_inode_t **ipp, cred_t *credp) { - char *dir_name =3D VNAME(dentry); - int dir_namelen =3D VNAMELEN(dentry); xfs_mount_t *mp =3D dp->i_mount; xfs_inode_t *cdp; /* inode of created dir */ xfs_trans_t *tp; @@ -2657,7 +2646,7 @@ xfs_mkdir( if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_CREATE, dp, DM_RIGHT_NULL, NULL, - DM_RIGHT_NULL, dir_name, NULL, + DM_RIGHT_NULL, dir_name->name, NULL, mode, 0, 0); if (error) return error; @@ -2686,7 +2675,7 @@ xfs_mkdir( =20 tp =3D xfs_trans_alloc(mp, XFS_TRANS_MKDIR); cancel_flags =3D XFS_TRANS_RELEASE_LOG_RES; - resblks =3D XFS_MKDIR_SPACE_RES(mp, dir_namelen); + resblks =3D XFS_MKDIR_SPACE_RES(mp, dir_name->len); error =3D xfs_trans_reserve(tp, resblks, XFS_MKDIR_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_MKDIR_LOG_COUNT); if (error =3D=3D ENOSPC) { @@ -2718,8 +2707,8 @@ xfs_mkdir( if (error) goto error_return; =20 - if (resblks =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, dp, dir_name, dir_namelen))) + error =3D xfs_dir_canenter(tp, dp, dir_name, resblks); + if (error) goto error_return; /* * create the directory inode. @@ -2748,9 +2737,9 @@ xfs_mkdir( =20 XFS_BMAP_INIT(&free_list, &first_block); =20 - error =3D xfs_dir_createname(tp, dp, dir_name, dir_namelen, cdp->i_ino, - &first_block, &free_list, resblks ? - resblks - XFS_IALLOC_SPACE_RES(mp) : 0); + error =3D xfs_dir_createname(tp, dp, dir_name, cdp->i_ino, + &first_block, &free_list, resblks ? + resblks - XFS_IALLOC_SPACE_RES(mp) : 0); if (error) { ASSERT(error !=3D ENOSPC); goto error1; @@ -2815,7 +2804,7 @@ std_return: dp, DM_RIGHT_NULL, created ? cdp : NULL, DM_RIGHT_NULL, - dir_name, NULL, + dir_name->name, NULL, mode, error, 0); } return error; @@ -2839,13 +2828,11 @@ std_return: int xfs_rmdir( xfs_inode_t *dp, - bhv_vname_t *dentry) + struct xfs_name *name, + xfs_inode_t *cdp) { bhv_vnode_t *dir_vp =3D XFS_ITOV(dp); - char *name =3D VNAME(dentry); - int namelen =3D VNAMELEN(dentry); xfs_mount_t *mp =3D dp->i_mount; - xfs_inode_t *cdp =3D VNAME_TO_INODE(dentry); xfs_trans_t *tp; int error; xfs_bmap_free_t free_list; @@ -2863,8 +2850,8 @@ xfs_rmdir( if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, DM_RIGHT_NULL, - NULL, DM_RIGHT_NULL, - name, NULL, cdp->i_d.di_mode, 0, 0); + NULL, DM_RIGHT_NULL, name->name, + NULL, cdp->i_d.di_mode, 0, 0); if (error) return XFS_ERROR(error); } @@ -2958,7 +2945,7 @@ xfs_rmdir( goto error_return; } =20 - error =3D xfs_dir_removename(tp, dp, name, namelen, cdp->i_ino, + error =3D xfs_dir_removename(tp, dp, name, cdp->i_ino, &first_block, &free_list, resblks); if (error) goto error1; @@ -3038,7 +3025,7 @@ xfs_rmdir( (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - name, NULL, cdp->i_d.di_mode, + name->name, NULL, cdp->i_d.di_mode, error, 0); } return error; @@ -3056,8 +3043,8 @@ xfs_rmdir( int xfs_symlink( xfs_inode_t *dp, - bhv_vname_t *dentry, - char *target_path, + struct xfs_name *link_name, + const char *target_path, mode_t mode, xfs_inode_t **ipp, cred_t *credp) @@ -3077,15 +3064,13 @@ xfs_symlink( int nmaps; xfs_bmbt_irec_t mval[SYMLINK_MAPS]; xfs_daddr_t d; - char *cur_chunk; + const char *cur_chunk; int byte_cnt; int n; xfs_buf_t *bp; xfs_prid_t prid; struct xfs_dquot *udqp, *gdqp; uint resblks; - char *link_name =3D VNAME(dentry); - int link_namelen; =20 *ipp =3D NULL; error =3D 0; @@ -3097,8 +3082,6 @@ xfs_symlink( if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); =20 - link_namelen =3D VNAMELEN(dentry); - /* * Check component lengths of the target path name. */ @@ -3109,7 +3092,7 @@ xfs_symlink( if (DM_EVENT_ENABLED(dp, DM_EVENT_SYMLINK)) { error =3D XFS_SEND_NAMESP(mp, DM_EVENT_SYMLINK, dp, DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, - link_name, target_path, 0, 0, 0); + link_name->name, target_path, 0, 0, 0); if (error) return error; } @@ -3141,7 +3124,7 @@ xfs_symlink( fs_blocks =3D 0; else fs_blocks =3D XFS_B_TO_FSB(mp, pathlen); - resblks =3D XFS_SYMLINK_SPACE_RES(mp, link_namelen, fs_blocks); + resblks =3D XFS_SYMLINK_SPACE_RES(mp, link_name->len, fs_blocks); error =3D xfs_trans_reserve(tp, resblks, XFS_SYMLINK_LOG_RES(mp), 0, XFS_TRANS_PERM_LOG_RES, XFS_SYMLINK_LOG_COUNT); if (error =3D=3D ENOSPC && fs_blocks =3D=3D 0) { @@ -3175,8 +3158,8 @@ xfs_symlink( /* * Check for ability to enter directory entry, if no space reserved. */ - if (resblks =3D=3D 0 && - (error =3D xfs_dir_canenter(tp, dp, link_name, link_namelen))) + error =3D xfs_dir_canenter(tp, dp, link_name, resblks); + if (error) goto error_return; /* * Initialize the bmap freelist prior to calling either @@ -3268,8 +3251,8 @@ xfs_symlink( /* * Create the directory entry for the symlink. */ - error =3D xfs_dir_createname(tp, dp, link_name, link_namelen, ip->i_ino, - &first_block, &free_list, resblks); + error =3D xfs_dir_createname(tp, dp, link_name, ip->i_ino, + &first_block, &free_list, resblks); if (error) goto error1; xfs_ichgtime(dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); @@ -3313,8 +3296,8 @@ std_return: (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTSYMLINK, dp, DM_RIGHT_NULL, error ? NULL : ip, - DM_RIGHT_NULL, link_name, target_path, - 0, error, 0); + DM_RIGHT_NULL, link_name->name, + target_path, 0, error, 0); } =20 if (!error) Index: kern_ci/fs/xfs/xfs_vnodeops.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_vnodeops.h +++ kern_ci/fs/xfs/xfs_vnodeops.h @@ -23,20 +23,22 @@ int xfs_fsync(struct xfs_inode *ip, int=20 xfs_off_t stop); int xfs_release(struct xfs_inode *ip); int xfs_inactive(struct xfs_inode *ip); -int xfs_lookup(struct xfs_inode *dp, bhv_vname_t *dentry, +int xfs_lookup(struct xfs_inode *dp, struct xfs_name *name, struct xfs_inode **ipp); -int xfs_create(struct xfs_inode *dp, bhv_vname_t *dentry, mode_t mode, +int xfs_create(struct xfs_inode *dp, struct xfs_name *name, mode_t mode, xfs_dev_t rdev, struct xfs_inode **ipp, struct cred *credp); -int xfs_remove(struct xfs_inode *dp, bhv_vname_t *dentry); +int xfs_remove(struct xfs_inode *dp, struct xfs_name *name, + struct xfs_inode *ip); int xfs_link(struct xfs_inode *tdp, struct xfs_inode *sip, - bhv_vname_t *dentry); -int xfs_mkdir(struct xfs_inode *dp, bhv_vname_t *dentry, + struct xfs_name *target_name); +int xfs_mkdir(struct xfs_inode *dp, struct xfs_name *dir_name, mode_t mode, struct xfs_inode **ipp, struct cred *credp); -int xfs_rmdir(struct xfs_inode *dp, bhv_vname_t *dentry); +int xfs_rmdir(struct xfs_inode *dp, struct xfs_name *name, + struct xfs_inode *cdp); int xfs_readdir(struct xfs_inode *dp, void *dirent, size_t bufsize, xfs_off_t *offset, filldir_t filldir); -int xfs_symlink(struct xfs_inode *dp, bhv_vname_t *dentry, - char *target_path, mode_t mode, struct xfs_inode **ipp, +int xfs_symlink(struct xfs_inode *dp, struct xfs_name *link_name, + const char *target_path, mode_t mode, struct xfs_inode **ipp, struct cred *credp); int xfs_inode_flush(struct xfs_inode *ip, int flags); int xfs_set_dmattrs(struct xfs_inode *ip, u_int evmask, u_int16_t state); @@ -44,8 +46,9 @@ int xfs_reclaim(struct xfs_inode *ip); int xfs_change_file_space(struct xfs_inode *ip, int cmd, xfs_flock64_t *bf, xfs_off_t offset, struct cred *credp, int attr_flags); -int xfs_rename(struct xfs_inode *src_dp, bhv_vname_t *src_vname, - struct xfs_inode *target_dp, bhv_vname_t *target_vname); +int xfs_rename(struct xfs_inode *src_dp, struct xfs_name *src_name, + struct xfs_inode *src_ip, struct xfs_inode *target_dp, + struct xfs_name *target_name); int xfs_attr_get(struct xfs_inode *ip, const char *name, char *value, int *valuelenp, int flags, cred_t *cred); int xfs_attr_set(struct xfs_inode *dp, const char *name, char *value, ------------eWkzpew8UCFVfG4FOq69Ba-- From owner-xfs@oss.sgi.com Wed Apr 9 00:23:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 00:23:57 -0700 (PDT) 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.0 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 m397NiiJ018753 for ; Wed, 9 Apr 2008 00:23:46 -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 RAA27898; Wed, 9 Apr 2008 17:24:18 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id C006A58C4C0F; Wed, 9 Apr 2008 17:24:18 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Warn if errors come from block_truncate_page(). Message-Id: <20080409072418.C006A58C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 17:24:18 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15299 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Warn if errors come from block_truncate_page(). block_truncate_page() can return errors that we currently ignore and silently discard. We should not ever get errors reported here - an error indicates a bug somewhere else. Hence catch the error and issue a stack dump to the syslog because we cannot propagate the error any further up the call chain. Date: Wed Apr 9 17:24:00 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30800a fs/xfs/linux-2.6/xfs_iops.c - 1.282 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_iops.c.diff?r1=text&tr1=1.282&r2=text&tr2=1.281&f=h - Warn if errors come from block_truncate_page(). From owner-xfs@oss.sgi.com Wed Apr 9 00:25:29 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 00:25:46 -0700 (PDT) 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.0 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 m397PMOB019291 for ; Wed, 9 Apr 2008 00:25:27 -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 RAA27933; Wed, 9 Apr 2008 17:25:56 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 882F058C4C0F; Wed, 9 Apr 2008 17:25:56 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Check for xfs_free_extent() failing. Message-Id: <20080409072556.882F058C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 17:25:56 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15300 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Check for xfs_free_extent() failing. xfs_free_extent() can fail, but log recovery never bothers to check if it successfully free the extent it was supposed to. This could lead to silent corruption during log recovery. Abort log recovery if we fail to free an extent. Date: Wed Apr 9 17:25:38 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30801a fs/xfs/xfs_log_recover.c - 1.340 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log_recover.c.diff?r1=text&tr1=1.340&r2=text&tr2=1.339&f=h - Check for xfs_free_extent() failing. From owner-xfs@oss.sgi.com Wed Apr 9 00:26:12 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 00:26:24 -0700 (PDT) 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.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42, J_CHICKENPOX_45,J_CHICKENPOX_47,J_CHICKENPOX_65 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 m397Q5Z4019497 for ; Wed, 9 Apr 2008 00:26:08 -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 RAA27946; Wed, 9 Apr 2008 17:26:43 +1000 Date: Wed, 09 Apr 2008 17:28:02 +1000 To: "xfs@oss.sgi.com" , xfs-dev Subject: Re: [REVIEW #3] cleanup - remove bhv_vname_t From: "Barry Naujok" Organization: SGI Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: Message-ID: In-Reply-To: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m397QCZ4019525 X-archive-position: 15301 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Wed, 09 Apr 2008 17:24:04 +1000, Barry Naujok wrote: > I gave some "loving" to xfs_rename. Stack usage for xfs_rename down from > 184 bytes to 152 bytes. > > xfs_name declaration is now in xfs_types.h. > > There are a couple more whitespace cleanups in this patch (very minor). > > This patch applies to the latest code after Dave's check-ins. Ok... his checkins are taking longer than expected :) An update will follow if the patch does not apply. > --- > fs/dmapi/dmapi_event.c | 4 - > fs/dmapi/dmapi_kern.h | 4 - > fs/xfs/dmapi/xfs_dm.c | 6 +- > fs/xfs/linux-2.6/xfs_export.c | 5 - > fs/xfs/linux-2.6/xfs_iops.c | 55 ++++++++++++++----- > fs/xfs/linux-2.6/xfs_vnode.h | 9 --- > fs/xfs/xfs_dir2.c | 62 +++++++++------------ > fs/xfs/xfs_dir2.h | 12 ++-- > fs/xfs/xfs_mount.h | 4 - > fs/xfs/xfs_rename.c | 82 ++++++++++------------------ > fs/xfs/xfs_types.h | 5 + > fs/xfs/xfs_utils.c | 4 - > fs/xfs/xfs_utils.h | 4 - > fs/xfs/xfs_vnodeops.c | 121 > ++++++++++++++++++------------------------ > fs/xfs/xfs_vnodeops.h | 23 ++++--- > 15 files changed, 191 insertions(+), 209 deletions(-) > > Index: kern_ci/fs/dmapi/dmapi_event.c > =================================================================== > --- kern_ci.orig/fs/dmapi/dmapi_event.c > +++ kern_ci/fs/dmapi/dmapi_event.c > @@ -622,8 +622,8 @@ dm_send_namesp_event( > dm_right_t vp1_right, > struct inode *ip2, > dm_right_t vp2_right, > - char *name1, > - char *name2, > + const char *name1, > + const char *name2, > mode_t mode, > int retcode, > int flags) > Index: kern_ci/fs/dmapi/dmapi_kern.h > =================================================================== > --- kern_ci.orig/fs/dmapi/dmapi_kern.h > +++ kern_ci/fs/dmapi/dmapi_kern.h > @@ -119,8 +119,8 @@ int dm_send_namesp_event( > dm_right_t vp1_right, > struct inode *ip2, > dm_right_t vp2_right, > - char *name1, > - char *name2, > + const char *name1, > + const char *name2, > mode_t mode, > int retcode, > int flags); > Index: kern_ci/fs/xfs/dmapi/xfs_dm.c > =================================================================== > --- kern_ci.orig/fs/xfs/dmapi/xfs_dm.c > +++ kern_ci/fs/xfs/dmapi/xfs_dm.c > @@ -245,7 +245,7 @@ xfs_copyin_attrname( > size_t len; > > strcpy(to->dan_chars, dmattr_prefix); > - > + > len = strnlen_user((char __user *)from, DM_ATTR_NAME_SIZE); > if (len == 0) > error = EFAULT; > @@ -3172,8 +3172,8 @@ xfs_dm_send_namesp_event( > dm_right_t vp1_right, > xfs_inode_t *ip2, > dm_right_t vp2_right, > - char *name1, > - char *name2, > + const char *name1, > + const char *name2, > mode_t mode, > int retcode, > int flags) > Index: kern_ci/fs/xfs/linux-2.6/xfs_export.c > =================================================================== > --- kern_ci.orig/fs/xfs/linux-2.6/xfs_export.c > +++ kern_ci/fs/xfs/linux-2.6/xfs_export.c > @@ -22,6 +22,7 @@ > #include "xfs_trans.h" > #include "xfs_sb.h" > #include "xfs_ag.h" > +#include "xfs_dir2.h" > #include "xfs_dmapi.h" > #include "xfs_mount.h" > #include "xfs_export.h" > @@ -30,8 +31,6 @@ > #include "xfs_inode.h" > #include "xfs_vfsops.h" > > -static struct dentry dotdot = { .d_name.name = "..", .d_name.len = 2, }; > - > /* > * Note that we only accept fileids which are long enough rather than > allow > * the parent generation number to default to zero. XFS considers > zero a > @@ -216,7 +215,7 @@ xfs_fs_get_parent( > struct xfs_inode *cip; > struct dentry *parent; > > - error = xfs_lookup(XFS_I(child->d_inode), &dotdot, &cip); > + error = xfs_lookup(XFS_I(child->d_inode), &xfs_name_dotdot, &cip); > if (unlikely(error)) > return ERR_PTR(-error); > > Index: kern_ci/fs/xfs/linux-2.6/xfs_iops.c > =================================================================== > --- kern_ci.orig/fs/xfs/linux-2.6/xfs_iops.c > +++ kern_ci/fs/xfs/linux-2.6/xfs_iops.c > @@ -239,6 +239,15 @@ xfs_init_security( > return error; > } > > +static void > +xfs_dentry_to_name( > + struct xfs_name *namep, > + struct dentry *dentry) > +{ > + namep->name = dentry->d_name.name; > + namep->len = dentry->d_name.len; > +} > + > STATIC void > xfs_cleanup_inode( > struct inode *dir, > @@ -246,20 +255,19 @@ xfs_cleanup_inode( > struct dentry *dentry, > int mode) > { > - struct dentry teardown = {}; > + struct xfs_name teardown; > > /* Oh, the horror. > * If we can't add the ACL or we fail in > * xfs_init_security we must back out. > * ENOSPC can hit here, among other things. > */ > - teardown.d_inode = inode; > - teardown.d_name = dentry->d_name; > + xfs_dentry_to_name(&teardown, dentry); > > if (S_ISDIR(mode)) > - xfs_rmdir(XFS_I(dir), &teardown); > + xfs_rmdir(XFS_I(dir), &teardown, XFS_I(inode)); > else > - xfs_remove(XFS_I(dir), &teardown); > + xfs_remove(XFS_I(dir), &teardown, XFS_I(inode)); > iput(inode); > } > > @@ -273,6 +281,7 @@ xfs_vn_mknod( > struct inode *inode; > struct xfs_inode *ip = NULL; > xfs_acl_t *default_acl = NULL; > + struct xfs_name name; > attrexists_t test_default_acl = _ACL_DEFAULT_EXISTS; > int error; > > @@ -293,6 +302,8 @@ xfs_vn_mknod( > } > } > > + xfs_dentry_to_name(&name, dentry); > + > if (IS_POSIXACL(dir) && !default_acl) > mode &= ~current->fs->umask; > > @@ -303,10 +314,10 @@ xfs_vn_mknod( > case S_IFSOCK: > rdev = sysv_encode_dev(rdev); > case S_IFREG: > - error = xfs_create(XFS_I(dir), dentry, mode, rdev, &ip, NULL); > + error = xfs_create(XFS_I(dir), &name, mode, rdev, &ip, NULL); > break; > case S_IFDIR: > - error = xfs_mkdir(XFS_I(dir), dentry, mode, &ip, NULL); > + error = xfs_mkdir(XFS_I(dir), &name, mode, &ip, NULL); > break; > default: > error = EINVAL; > @@ -371,12 +382,14 @@ xfs_vn_lookup( > struct nameidata *nd) > { > struct xfs_inode *cip; > + struct xfs_name name; > int error; > > if (dentry->d_name.len >= MAXNAMELEN) > return ERR_PTR(-ENAMETOOLONG); > > - error = xfs_lookup(XFS_I(dir), dentry, &cip); > + xfs_dentry_to_name(&name, dentry); > + error = xfs_lookup(XFS_I(dir), &name, &cip); > if (unlikely(error)) { > if (unlikely(error != ENOENT)) > return ERR_PTR(-error); > @@ -394,12 +407,14 @@ xfs_vn_link( > struct dentry *dentry) > { > struct inode *inode; /* inode of guy being linked to */ > + struct xfs_name name; > int error; > > inode = old_dentry->d_inode; > + xfs_dentry_to_name(&name, dentry); > > igrab(inode); > - error = xfs_link(XFS_I(dir), XFS_I(inode), dentry); > + error = xfs_link(XFS_I(dir), XFS_I(inode), &name); > if (unlikely(error)) { > iput(inode); > return -error; > @@ -417,11 +432,13 @@ xfs_vn_unlink( > struct dentry *dentry) > { > struct inode *inode; > + struct xfs_name name; > int error; > > inode = dentry->d_inode; > + xfs_dentry_to_name(&name, dentry); > > - error = xfs_remove(XFS_I(dir), dentry); > + error = xfs_remove(XFS_I(dir), &name, XFS_I(inode)); > if (likely(!error)) { > xfs_validate_fields(dir); /* size needs update */ > xfs_validate_fields(inode); > @@ -437,14 +454,15 @@ xfs_vn_symlink( > { > struct inode *inode; > struct xfs_inode *cip = NULL; > + struct xfs_name name; > int error; > mode_t mode; > > mode = S_IFLNK | > (irix_symlink_mode ? 0777 & ~current->fs->umask : S_IRWXUGO); > + xfs_dentry_to_name(&name, dentry); > > - error = xfs_symlink(XFS_I(dir), dentry, (char *)symname, mode, > - &cip, NULL); > + error = xfs_symlink(XFS_I(dir), &name, symname, mode, &cip, NULL); > if (unlikely(error)) > goto out; > > @@ -471,9 +489,12 @@ xfs_vn_rmdir( > struct dentry *dentry) > { > struct inode *inode = dentry->d_inode; > + struct xfs_name name; > int error; > > - error = xfs_rmdir(XFS_I(dir), dentry); > + xfs_dentry_to_name(&name, dentry); > + > + error = xfs_rmdir(XFS_I(dir), &name, XFS_I(inode)); > if (likely(!error)) { > xfs_validate_fields(inode); > xfs_validate_fields(dir); > @@ -489,9 +510,15 @@ xfs_vn_rename( > struct dentry *ndentry) > { > struct inode *new_inode = ndentry->d_inode; > + struct xfs_name oname; > + struct xfs_name nname; > int error; > > - error = xfs_rename(XFS_I(odir), odentry, XFS_I(ndir), ndentry); > + xfs_dentry_to_name(&oname, odentry); > + xfs_dentry_to_name(&nname, ndentry); > + > + error = xfs_rename(XFS_I(odir), &oname, XFS_I(odentry->d_inode), > + XFS_I(ndir), &nname); > if (likely(!error)) { > if (new_inode) > xfs_validate_fields(new_inode); > Index: kern_ci/fs/xfs/linux-2.6/xfs_vnode.h > =================================================================== > --- kern_ci.orig/fs/xfs/linux-2.6/xfs_vnode.h > +++ kern_ci/fs/xfs/linux-2.6/xfs_vnode.h > @@ -23,8 +23,6 @@ struct bhv_vattr; > struct xfs_iomap; > struct attrlist_cursor_kern; > > -typedef struct dentry bhv_vname_t; > -typedef __u64 bhv_vnumber_t; > typedef struct inode bhv_vnode_t; > > #define VN_ISLNK(vp) S_ISLNK((vp)->i_mode) > @@ -211,13 +209,6 @@ static inline bhv_vnode_t *vn_grab(bhv_v > } > > /* > - * Vname handling macros. > - */ > -#define VNAME(dentry) ((char *) (dentry)->d_name.name) > -#define VNAMELEN(dentry) ((dentry)->d_name.len) > -#define VNAME_TO_INODE(dentry) (XFS_I((dentry)->d_inode)) > - > -/* > * Dealing with bad inodes > */ > static inline int VN_BAD(bhv_vnode_t *vp) > Index: kern_ci/fs/xfs/xfs_dir2.c > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_dir2.c > +++ kern_ci/fs/xfs/xfs_dir2.c > @@ -44,6 +44,7 @@ > #include "xfs_error.h" > #include "xfs_vnodeops.h" > > +struct xfs_name xfs_name_dotdot = {"..", 2}; > > void > xfs_dir_mount( > @@ -146,8 +147,7 @@ int > xfs_dir_createname( > xfs_trans_t *tp, > xfs_inode_t *dp, > - char *name, > - int namelen, > + struct xfs_name *name, > xfs_ino_t inum, /* new entry inode number */ > xfs_fsblock_t *first, /* bmap's firstblock */ > xfs_bmap_free_t *flist, /* bmap's freeblock list */ > @@ -162,9 +162,9 @@ xfs_dir_createname( > return rval; > XFS_STATS_INC(xs_dir_create); > > - args.name = name; > - args.namelen = namelen; > - args.hashval = xfs_da_hashname(name, namelen); > + args.name = name->name; > + args.namelen = name->len; > + args.hashval = xfs_da_hashname(name->name, name->len); > args.inumber = inum; > args.dp = dp; > args.firstblock = first; > @@ -197,8 +197,7 @@ int > xfs_dir_lookup( > xfs_trans_t *tp, > xfs_inode_t *dp, > - char *name, > - int namelen, > + struct xfs_name *name, > xfs_ino_t *inum) /* out: inode number */ > { > xfs_da_args_t args; > @@ -207,18 +206,14 @@ xfs_dir_lookup( > > ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); > XFS_STATS_INC(xs_dir_lookup); > + memset(&args, 0, sizeof(xfs_da_args_t)); > > - args.name = name; > - args.namelen = namelen; > - args.hashval = xfs_da_hashname(name, namelen); > - args.inumber = 0; > + args.name = name->name; > + args.namelen = name->len; > + args.hashval = xfs_da_hashname(name->name, name->len); > args.dp = dp; > - args.firstblock = NULL; > - args.flist = NULL; > - args.total = 0; > args.whichfork = XFS_DATA_FORK; > args.trans = tp; > - args.justcheck = args.addname = 0; > args.oknoent = 1; > > if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) > @@ -247,8 +242,7 @@ int > xfs_dir_removename( > xfs_trans_t *tp, > xfs_inode_t *dp, > - char *name, > - int namelen, > + struct xfs_name *name, > xfs_ino_t ino, > xfs_fsblock_t *first, /* bmap's firstblock */ > xfs_bmap_free_t *flist, /* bmap's freeblock list */ > @@ -261,9 +255,9 @@ xfs_dir_removename( > ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); > XFS_STATS_INC(xs_dir_remove); > > - args.name = name; > - args.namelen = namelen; > - args.hashval = xfs_da_hashname(name, namelen); > + args.name = name->name; > + args.namelen = name->len; > + args.hashval = xfs_da_hashname(name->name, name->len); > args.inumber = ino; > args.dp = dp; > args.firstblock = first; > @@ -329,8 +323,7 @@ int > xfs_dir_replace( > xfs_trans_t *tp, > xfs_inode_t *dp, > - char *name, /* name of entry to replace */ > - int namelen, > + struct xfs_name *name, /* name of entry to replace */ > xfs_ino_t inum, /* new inode number */ > xfs_fsblock_t *first, /* bmap's firstblock */ > xfs_bmap_free_t *flist, /* bmap's freeblock list */ > @@ -345,9 +338,9 @@ xfs_dir_replace( > if ((rval = xfs_dir_ino_validate(tp->t_mountp, inum))) > return rval; > > - args.name = name; > - args.namelen = namelen; > - args.hashval = xfs_da_hashname(name, namelen); > + args.name = name->name; > + args.namelen = name->len; > + args.hashval = xfs_da_hashname(name->name, name->len); > args.inumber = inum; > args.dp = dp; > args.firstblock = first; > @@ -374,28 +367,29 @@ xfs_dir_replace( > > /* > * See if this entry can be added to the directory without allocating > space. > + * First checks that the caller couldn't reserve enough space (resblks = > 0). > */ > int > xfs_dir_canenter( > xfs_trans_t *tp, > xfs_inode_t *dp, > - char *name, /* name of entry to add */ > - int namelen) > + struct xfs_name *name, /* name of entry to add */ > + uint resblks) > { > xfs_da_args_t args; > int rval; > int v; /* type-checking value */ > > + if (resblks) > + return 0; > + > ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); > + memset(&args, 0, sizeof(xfs_da_args_t)); > > - args.name = name; > - args.namelen = namelen; > - args.hashval = xfs_da_hashname(name, namelen); > - args.inumber = 0; > + args.name = name->name; > + args.namelen = name->len; > + args.hashval = xfs_da_hashname(name->name, name->len); > args.dp = dp; > - args.firstblock = NULL; > - args.flist = NULL; > - args.total = 0; > args.whichfork = XFS_DATA_FORK; > args.trans = tp; > args.justcheck = args.addname = args.oknoent = 1; > Index: kern_ci/fs/xfs/xfs_dir2.h > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_dir2.h > +++ kern_ci/fs/xfs/xfs_dir2.h > @@ -59,6 +59,8 @@ typedef __uint32_t xfs_dir2_db_t; > */ > typedef xfs_off_t xfs_dir2_off_t; > > +extern struct xfs_name xfs_name_dotdot; > + > /* > * Generic directory interface routines > */ > @@ -68,21 +70,21 @@ extern int xfs_dir_isempty(struct xfs_in > extern int xfs_dir_init(struct xfs_trans *tp, struct xfs_inode *dp, > struct xfs_inode *pdp); > extern int xfs_dir_createname(struct xfs_trans *tp, struct xfs_inode > *dp, > - char *name, int namelen, xfs_ino_t inum, > + struct xfs_name *name, xfs_ino_t inum, > xfs_fsblock_t *first, > struct xfs_bmap_free *flist, xfs_extlen_t tot); > extern int xfs_dir_lookup(struct xfs_trans *tp, struct xfs_inode *dp, > - char *name, int namelen, xfs_ino_t *inum); > + struct xfs_name *name, xfs_ino_t *inum); > extern int xfs_dir_removename(struct xfs_trans *tp, struct xfs_inode > *dp, > - char *name, int namelen, xfs_ino_t ino, > + struct xfs_name *name, xfs_ino_t ino, > xfs_fsblock_t *first, > struct xfs_bmap_free *flist, xfs_extlen_t tot); > extern int xfs_dir_replace(struct xfs_trans *tp, struct xfs_inode *dp, > - char *name, int namelen, xfs_ino_t inum, > + struct xfs_name *name, xfs_ino_t inum, > xfs_fsblock_t *first, > struct xfs_bmap_free *flist, xfs_extlen_t tot); > extern int xfs_dir_canenter(struct xfs_trans *tp, struct xfs_inode *dp, > - char *name, int namelen); > + struct xfs_name *name, uint resblks); > extern int xfs_dir_ino_validate(struct xfs_mount *mp, xfs_ino_t ino); > > /* > Index: kern_ci/fs/xfs/xfs_mount.h > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_mount.h > +++ kern_ci/fs/xfs/xfs_mount.h > @@ -73,7 +73,7 @@ typedef int (*xfs_send_destroy_t)(struct > typedef int (*xfs_send_namesp_t)(dm_eventtype_t, struct xfs_mount *, > struct xfs_inode *, dm_right_t, > struct xfs_inode *, dm_right_t, > - char *, char *, mode_t, int, int); > + const char *, const char *, mode_t, int, int); > typedef int (*xfs_send_mount_t)(struct xfs_mount *, dm_right_t, > char *, char *); > typedef void (*xfs_send_unmount_t)(struct xfs_mount *, struct > xfs_inode *, > @@ -401,7 +401,7 @@ typedef struct xfs_mount { > > /* > * Allow large block sizes to be reported to userspace programs if the > - * "largeio" mount option is used. > + * "largeio" mount option is used. > * > * If compatibility mode is specified, simply return the basic unit of > caching > * so that we don't get inefficient read/modify/write I/O from user > apps. > Index: kern_ci/fs/xfs/xfs_rename.c > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_rename.c > +++ kern_ci/fs/xfs/xfs_rename.c > @@ -83,25 +83,24 @@ int xfs_rename_skip, xfs_rename_nskip; > */ > STATIC int > xfs_lock_for_rename( > - xfs_inode_t *dp1, /* old (source) directory inode */ > - xfs_inode_t *dp2, /* new (target) directory inode */ > - bhv_vname_t *vname1,/* old entry name */ > - bhv_vname_t *vname2,/* new entry name */ > - xfs_inode_t **ipp1, /* inode of old entry */ > - xfs_inode_t **ipp2, /* inode of new entry, if it > + xfs_inode_t *dp1, /* in: old (source) directory inode */ > + xfs_inode_t *dp2, /* in: new (target) directory inode */ > + xfs_inode_t *ip1, /* in: inode of old entry */ > + struct xfs_name *name2, /* in: new entry name */ > + xfs_inode_t **ipp2, /* out: inode of new entry, if it > already exists, NULL otherwise. */ > - xfs_inode_t **i_tab,/* array of inode returned, sorted */ > - int *num_inodes) /* number of inodes in array */ > + xfs_inode_t **i_tab,/* out: array of inode returned, sorted */ > + int *num_inodes) /* out: number of inodes in array */ > { > - xfs_inode_t *ip1 = VNAME_TO_INODE(vname1); > - xfs_inode_t *ip2, *temp; > + xfs_inode_t *ip2 = NULL; > + xfs_inode_t *temp; > xfs_ino_t inum1, inum2; > int error; > int i, j; > uint lock_mode; > int diff_dirs = (dp1 != dp2); > > - ip2 = NULL; > + ASSERT(ip1); > > /* > * First, find out the current inums of the entries so that we > @@ -115,17 +114,15 @@ xfs_lock_for_rename( > > inum1 = ip1->i_ino; > > - > /* > * Unlock dp1 and lock dp2 if they are different. > */ > - > if (diff_dirs) { > xfs_iunlock_map_shared(dp1, lock_mode); > lock_mode = xfs_ilock_map_shared(dp2); > } > > - error = xfs_dir_lookup_int(dp2, lock_mode, vname2, &inum2, &ip2); > + error = xfs_dir_lookup_int(dp2, lock_mode, name2, &inum2, &ip2); > if (error == ENOENT) { /* target does not need to exist. */ > inum2 = 0; > } else if (error) { > @@ -157,6 +154,7 @@ xfs_lock_for_rename( > *num_inodes = 4; > i_tab[3] = ip2; > } > + *ipp2 = i_tab[3]; > > /* > * Sort the elements via bubble sort. (Remember, there are at > @@ -194,21 +192,6 @@ xfs_lock_for_rename( > xfs_lock_inodes(i_tab, *num_inodes, 0, XFS_ILOCK_SHARED); > } > > - /* > - * Set the return value. Null out any unused entries in i_tab. > - */ > - *ipp1 = *ipp2 = NULL; > - for (i=0; i < *num_inodes; i++) { > - if (i_tab[i]->i_ino == inum1) { > - *ipp1 = i_tab[i]; > - } > - if (i_tab[i]->i_ino == inum2) { > - *ipp2 = i_tab[i]; > - } > - } > - for (;i < 4; i++) { > - i_tab[i] = NULL; > - } > return 0; > } > > @@ -218,12 +201,13 @@ xfs_lock_for_rename( > int > xfs_rename( > xfs_inode_t *src_dp, > - bhv_vname_t *src_vname, > + struct xfs_name *src_name, > + xfs_inode_t *src_ip, > xfs_inode_t *target_dp, > - bhv_vname_t *target_vname) > + struct xfs_name *target_name) > { > xfs_trans_t *tp; > - xfs_inode_t *src_ip, *target_ip; > + xfs_inode_t *target_ip; > xfs_mount_t *mp = src_dp->i_mount; > int new_parent; /* moving to a new dir */ > int src_is_directory; /* src_name is a directory */ > @@ -237,10 +221,6 @@ xfs_rename( > int spaceres; > int target_link_zero = 0; > int num_inodes; > - char *src_name = VNAME(src_vname); > - char *target_name = VNAME(target_vname); > - int src_namelen = VNAMELEN(src_vname); > - int target_namelen = VNAMELEN(target_vname); > > xfs_itrace_entry(src_dp); > xfs_itrace_entry(target_dp); > @@ -250,7 +230,7 @@ xfs_rename( > error = XFS_SEND_NAMESP(mp, DM_EVENT_RENAME, > src_dp, DM_RIGHT_NULL, > target_dp, DM_RIGHT_NULL, > - src_name, target_name, > + src_name->name, target_name->name, > 0, 0, 0); > if (error) { > return error; > @@ -267,10 +247,8 @@ xfs_rename( > * does not exist in the source directory. > */ > tp = NULL; > - error = xfs_lock_for_rename(src_dp, target_dp, src_vname, > - target_vname, &src_ip, &target_ip, inodes, > - &num_inodes); > - > + error = xfs_lock_for_rename(src_dp, target_dp, src_ip, target_name, > + &target_ip, inodes, &num_inodes); > if (error) { > /* > * We have nothing locked, no inode references, and > @@ -316,7 +294,7 @@ xfs_rename( > XFS_BMAP_INIT(&free_list, &first_block); > tp = xfs_trans_alloc(mp, XFS_TRANS_RENAME); > cancel_flags = XFS_TRANS_RELEASE_LOG_RES; > - spaceres = XFS_RENAME_SPACE_RES(mp, target_namelen); > + spaceres = XFS_RENAME_SPACE_RES(mp, target_name->len); > error = xfs_trans_reserve(tp, spaceres, XFS_RENAME_LOG_RES(mp), 0, > XFS_TRANS_PERM_LOG_RES, XFS_RENAME_LOG_COUNT); > if (error == ENOSPC) { > @@ -374,9 +352,8 @@ xfs_rename( > * If there's no space reservation, check the entry will > * fit before actually inserting it. > */ > - if (spaceres == 0 && > - (error = xfs_dir_canenter(tp, target_dp, target_name, > - target_namelen))) > + error = xfs_dir_canenter(tp, target_dp, target_name, spaceres); > + if (error) > goto error_return; > /* > * If target does not exist and the rename crosses > @@ -384,8 +361,8 @@ xfs_rename( > * to account for the ".." reference from the new entry. > */ > error = xfs_dir_createname(tp, target_dp, target_name, > - target_namelen, src_ip->i_ino, > - &first_block, &free_list, spaceres); > + src_ip->i_ino, &first_block, > + &free_list, spaceres); > if (error == ENOSPC) > goto error_return; > if (error) > @@ -424,7 +401,7 @@ xfs_rename( > * name at the destination directory, remove it first. > */ > error = xfs_dir_replace(tp, target_dp, target_name, > - target_namelen, src_ip->i_ino, > + src_ip->i_ino, > &first_block, &free_list, spaceres); > if (error) > goto abort_return; > @@ -461,7 +438,8 @@ xfs_rename( > * Rewrite the ".." entry to point to the new > * directory. > */ > - error = xfs_dir_replace(tp, src_ip, "..", 2, target_dp->i_ino, > + error = xfs_dir_replace(tp, src_ip, &xfs_name_dotdot, > + target_dp->i_ino, > &first_block, &free_list, spaceres); > ASSERT(error != EEXIST); > if (error) > @@ -497,8 +475,8 @@ xfs_rename( > goto abort_return; > } > > - error = xfs_dir_removename(tp, src_dp, src_name, src_namelen, > - src_ip->i_ino, &first_block, &free_list, spaceres); > + error = xfs_dir_removename(tp, src_dp, src_name, src_ip->i_ino, > + &first_block, &free_list, spaceres); > if (error) > goto abort_return; > xfs_ichgtime(src_dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); > @@ -583,7 +561,7 @@ std_return: > (void) XFS_SEND_NAMESP (mp, DM_EVENT_POSTRENAME, > src_dp, DM_RIGHT_NULL, > target_dp, DM_RIGHT_NULL, > - src_name, target_name, > + src_name->name, target_name->name, > 0, error, 0); > } > return error; > Index: kern_ci/fs/xfs/xfs_types.h > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_types.h > +++ kern_ci/fs/xfs/xfs_types.h > @@ -160,4 +160,9 @@ typedef enum { > XFS_BTNUM_MAX > } xfs_btnum_t; > > +struct xfs_name { > + const char *name; > + int len; > +}; > + > #endif /* __XFS_TYPES_H__ */ > Index: kern_ci/fs/xfs/xfs_utils.c > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_utils.c > +++ kern_ci/fs/xfs/xfs_utils.c > @@ -45,7 +45,7 @@ int > xfs_dir_lookup_int( > xfs_inode_t *dp, > uint lock_mode, > - bhv_vname_t *dentry, > + struct xfs_name *name, > xfs_ino_t *inum, > xfs_inode_t **ipp) > { > @@ -53,7 +53,7 @@ xfs_dir_lookup_int( > > xfs_itrace_entry(dp); > > - error = xfs_dir_lookup(NULL, dp, VNAME(dentry), VNAMELEN(dentry), > inum); > + error = xfs_dir_lookup(NULL, dp, name, inum); > if (!error) { > /* > * Unlock the directory. We do this because we can't > Index: kern_ci/fs/xfs/xfs_utils.h > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_utils.h > +++ kern_ci/fs/xfs/xfs_utils.h > @@ -21,8 +21,8 @@ > #define IRELE(ip) VN_RELE(XFS_ITOV(ip)) > #define IHOLD(ip) VN_HOLD(XFS_ITOV(ip)) > > -extern int xfs_dir_lookup_int(xfs_inode_t *, uint, bhv_vname_t *, > xfs_ino_t *, > - xfs_inode_t **); > +extern int xfs_dir_lookup_int(xfs_inode_t *, uint, struct xfs_name *, > + xfs_ino_t *, xfs_inode_t **); > extern int xfs_truncate_file(xfs_mount_t *, xfs_inode_t *); > extern int xfs_dir_ialloc(xfs_trans_t **, xfs_inode_t *, mode_t, > xfs_nlink_t, > xfs_dev_t, cred_t *, prid_t, int, > Index: kern_ci/fs/xfs/xfs_vnodeops.c > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_vnodeops.c > +++ kern_ci/fs/xfs/xfs_vnodeops.c > @@ -1762,7 +1762,7 @@ xfs_inactive( > int > xfs_lookup( > xfs_inode_t *dp, > - bhv_vname_t *dentry, > + struct xfs_name *name, > xfs_inode_t **ipp) > { > xfs_inode_t *ip; > @@ -1776,7 +1776,7 @@ xfs_lookup( > return XFS_ERROR(EIO); > > lock_mode = xfs_ilock_map_shared(dp); > - error = xfs_dir_lookup_int(dp, lock_mode, dentry, &e_inum, &ip); > + error = xfs_dir_lookup_int(dp, lock_mode, name, &e_inum, &ip); > if (!error) { > *ipp = ip; > xfs_itrace_ref(ip); > @@ -1788,17 +1788,16 @@ xfs_lookup( > int > xfs_create( > xfs_inode_t *dp, > - bhv_vname_t *dentry, > + struct xfs_name *name, > mode_t mode, > xfs_dev_t rdev, > xfs_inode_t **ipp, > cred_t *credp) > { > - char *name = VNAME(dentry); > - xfs_mount_t *mp = dp->i_mount; > + xfs_mount_t *mp = dp->i_mount; > xfs_inode_t *ip; > xfs_trans_t *tp; > - int error; > + int error; > xfs_bmap_free_t free_list; > xfs_fsblock_t first_block; > boolean_t unlock_dp_on_error = B_FALSE; > @@ -1808,17 +1807,14 @@ xfs_create( > xfs_prid_t prid; > struct xfs_dquot *udqp, *gdqp; > uint resblks; > - int namelen; > > ASSERT(!*ipp); > xfs_itrace_entry(dp); > > - namelen = VNAMELEN(dentry); > - > if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) { > error = XFS_SEND_NAMESP(mp, DM_EVENT_CREATE, > dp, DM_RIGHT_NULL, NULL, > - DM_RIGHT_NULL, name, NULL, > + DM_RIGHT_NULL, name->name, NULL, > mode, 0, 0); > > if (error) > @@ -1850,7 +1846,7 @@ xfs_create( > > tp = xfs_trans_alloc(mp, XFS_TRANS_CREATE); > cancel_flags = XFS_TRANS_RELEASE_LOG_RES; > - resblks = XFS_CREATE_SPACE_RES(mp, namelen); > + resblks = XFS_CREATE_SPACE_RES(mp, name->len); > /* > * Initially assume that the file does not exist and > * reserve the resources for that case. If that is not > @@ -1883,7 +1879,8 @@ xfs_create( > if (error) > goto error_return; > > - if (resblks == 0 && (error = xfs_dir_canenter(tp, dp, name, namelen))) > + error = xfs_dir_canenter(tp, dp, name, resblks); > + if (error) > goto error_return; > error = xfs_dir_ialloc(&tp, dp, mode, 1, > rdev, credp, prid, resblks > 0, > @@ -1913,7 +1910,7 @@ xfs_create( > xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL); > unlock_dp_on_error = B_FALSE; > > - error = xfs_dir_createname(tp, dp, name, namelen, ip->i_ino, > + error = xfs_dir_createname(tp, dp, name, ip->i_ino, > &first_block, &free_list, resblks ? > resblks - XFS_IALLOC_SPACE_RES(mp) : 0); > if (error) { > @@ -1974,7 +1971,7 @@ std_return: > (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTCREATE, > dp, DM_RIGHT_NULL, > *ipp ? ip : NULL, > - DM_RIGHT_NULL, name, NULL, > + DM_RIGHT_NULL, name->name, NULL, > mode, error, 0); > } > return error; > @@ -2266,12 +2263,10 @@ int remove_which_error_return = 0; > int > xfs_remove( > xfs_inode_t *dp, > - bhv_vname_t *dentry) > + struct xfs_name *name, > + xfs_inode_t *ip) > { > - char *name = VNAME(dentry); > xfs_mount_t *mp = dp->i_mount; > - xfs_inode_t *ip = VNAME_TO_INODE(dentry); > - int namelen = VNAMELEN(dentry); > xfs_trans_t *tp = NULL; > int error = 0; > xfs_bmap_free_t free_list; > @@ -2287,9 +2282,9 @@ xfs_remove( > return XFS_ERROR(EIO); > > if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { > - error = XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, > - DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, > - name, NULL, ip->i_d.di_mode, 0, 0); > + error = XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dp, DM_RIGHT_NULL, > + NULL, DM_RIGHT_NULL, name->name, NULL, > + ip->i_d.di_mode, 0, 0); > if (error) > return error; > } > @@ -2374,7 +2369,7 @@ xfs_remove( > * Entry must exist since we did a lookup in xfs_lock_dir_and_entry. > */ > XFS_BMAP_INIT(&free_list, &first_block); > - error = xfs_dir_removename(tp, dp, name, namelen, ip->i_ino, > + error = xfs_dir_removename(tp, dp, name, ip->i_ino, > &first_block, &free_list, 0); > if (error) { > ASSERT(error != ENOENT); > @@ -2442,7 +2437,7 @@ xfs_remove( > (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, > dp, DM_RIGHT_NULL, > NULL, DM_RIGHT_NULL, > - name, NULL, ip->i_d.di_mode, error, 0); > + name->name, NULL, ip->i_d.di_mode, error, 0); > } > return error; > > @@ -2472,7 +2467,7 @@ int > xfs_link( > xfs_inode_t *tdp, > xfs_inode_t *sip, > - bhv_vname_t *dentry) > + struct xfs_name *target_name) > { > xfs_mount_t *mp = tdp->i_mount; > xfs_trans_t *tp; > @@ -2483,13 +2478,10 @@ xfs_link( > int cancel_flags; > int committed; > int resblks; > - char *target_name = VNAME(dentry); > - int target_namelen; > > xfs_itrace_entry(tdp); > xfs_itrace_entry(sip); > > - target_namelen = VNAMELEN(dentry); > ASSERT(!S_ISDIR(sip->i_d.di_mode)); > > if (XFS_FORCED_SHUTDOWN(mp)) > @@ -2499,7 +2491,7 @@ xfs_link( > error = XFS_SEND_NAMESP(mp, DM_EVENT_LINK, > tdp, DM_RIGHT_NULL, > sip, DM_RIGHT_NULL, > - target_name, NULL, 0, 0, 0); > + target_name->name, NULL, 0, 0, 0); > if (error) > return error; > } > @@ -2514,7 +2506,7 @@ xfs_link( > > tp = xfs_trans_alloc(mp, XFS_TRANS_LINK); > cancel_flags = XFS_TRANS_RELEASE_LOG_RES; > - resblks = XFS_LINK_SPACE_RES(mp, target_namelen); > + resblks = XFS_LINK_SPACE_RES(mp, target_name->len); > error = xfs_trans_reserve(tp, resblks, XFS_LINK_LOG_RES(mp), 0, > XFS_TRANS_PERM_LOG_RES, XFS_LINK_LOG_COUNT); > if (error == ENOSPC) { > @@ -2566,15 +2558,14 @@ xfs_link( > goto error_return; > } > > - if (resblks == 0 && > - (error = xfs_dir_canenter(tp, tdp, target_name, target_namelen))) > + error = xfs_dir_canenter(tp, tdp, target_name, resblks); > + if (error) > goto error_return; > > XFS_BMAP_INIT(&free_list, &first_block); > > - error = xfs_dir_createname(tp, tdp, target_name, target_namelen, > - sip->i_ino, &first_block, &free_list, > - resblks); > + error = xfs_dir_createname(tp, tdp, target_name, sip->i_ino, > + &first_block, &free_list, resblks); > if (error) > goto abort_return; > xfs_ichgtime(tdp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); > @@ -2610,7 +2601,7 @@ std_return: > (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTLINK, > tdp, DM_RIGHT_NULL, > sip, DM_RIGHT_NULL, > - target_name, NULL, 0, error, 0); > + target_name->name, NULL, 0, error, 0); > } > return error; > > @@ -2627,13 +2618,11 @@ std_return: > int > xfs_mkdir( > xfs_inode_t *dp, > - bhv_vname_t *dentry, > + struct xfs_name *dir_name, > mode_t mode, > xfs_inode_t **ipp, > cred_t *credp) > { > - char *dir_name = VNAME(dentry); > - int dir_namelen = VNAMELEN(dentry); > xfs_mount_t *mp = dp->i_mount; > xfs_inode_t *cdp; /* inode of created dir */ > xfs_trans_t *tp; > @@ -2657,7 +2646,7 @@ xfs_mkdir( > if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) { > error = XFS_SEND_NAMESP(mp, DM_EVENT_CREATE, > dp, DM_RIGHT_NULL, NULL, > - DM_RIGHT_NULL, dir_name, NULL, > + DM_RIGHT_NULL, dir_name->name, NULL, > mode, 0, 0); > if (error) > return error; > @@ -2686,7 +2675,7 @@ xfs_mkdir( > > tp = xfs_trans_alloc(mp, XFS_TRANS_MKDIR); > cancel_flags = XFS_TRANS_RELEASE_LOG_RES; > - resblks = XFS_MKDIR_SPACE_RES(mp, dir_namelen); > + resblks = XFS_MKDIR_SPACE_RES(mp, dir_name->len); > error = xfs_trans_reserve(tp, resblks, XFS_MKDIR_LOG_RES(mp), 0, > XFS_TRANS_PERM_LOG_RES, XFS_MKDIR_LOG_COUNT); > if (error == ENOSPC) { > @@ -2718,8 +2707,8 @@ xfs_mkdir( > if (error) > goto error_return; > > - if (resblks == 0 && > - (error = xfs_dir_canenter(tp, dp, dir_name, dir_namelen))) > + error = xfs_dir_canenter(tp, dp, dir_name, resblks); > + if (error) > goto error_return; > /* > * create the directory inode. > @@ -2748,9 +2737,9 @@ xfs_mkdir( > > XFS_BMAP_INIT(&free_list, &first_block); > > - error = xfs_dir_createname(tp, dp, dir_name, dir_namelen, cdp->i_ino, > - &first_block, &free_list, resblks ? > - resblks - XFS_IALLOC_SPACE_RES(mp) : 0); > + error = xfs_dir_createname(tp, dp, dir_name, cdp->i_ino, > + &first_block, &free_list, resblks ? > + resblks - XFS_IALLOC_SPACE_RES(mp) : 0); > if (error) { > ASSERT(error != ENOSPC); > goto error1; > @@ -2815,7 +2804,7 @@ std_return: > dp, DM_RIGHT_NULL, > created ? cdp : NULL, > DM_RIGHT_NULL, > - dir_name, NULL, > + dir_name->name, NULL, > mode, error, 0); > } > return error; > @@ -2839,13 +2828,11 @@ std_return: > int > xfs_rmdir( > xfs_inode_t *dp, > - bhv_vname_t *dentry) > + struct xfs_name *name, > + xfs_inode_t *cdp) > { > bhv_vnode_t *dir_vp = XFS_ITOV(dp); > - char *name = VNAME(dentry); > - int namelen = VNAMELEN(dentry); > xfs_mount_t *mp = dp->i_mount; > - xfs_inode_t *cdp = VNAME_TO_INODE(dentry); > xfs_trans_t *tp; > int error; > xfs_bmap_free_t free_list; > @@ -2863,8 +2850,8 @@ xfs_rmdir( > if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { > error = XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, > dp, DM_RIGHT_NULL, > - NULL, DM_RIGHT_NULL, > - name, NULL, cdp->i_d.di_mode, 0, 0); > + NULL, DM_RIGHT_NULL, name->name, > + NULL, cdp->i_d.di_mode, 0, 0); > if (error) > return XFS_ERROR(error); > } > @@ -2958,7 +2945,7 @@ xfs_rmdir( > goto error_return; > } > > - error = xfs_dir_removename(tp, dp, name, namelen, cdp->i_ino, > + error = xfs_dir_removename(tp, dp, name, cdp->i_ino, > &first_block, &free_list, resblks); > if (error) > goto error1; > @@ -3038,7 +3025,7 @@ xfs_rmdir( > (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, > dp, DM_RIGHT_NULL, > NULL, DM_RIGHT_NULL, > - name, NULL, cdp->i_d.di_mode, > + name->name, NULL, cdp->i_d.di_mode, > error, 0); > } > return error; > @@ -3056,8 +3043,8 @@ xfs_rmdir( > int > xfs_symlink( > xfs_inode_t *dp, > - bhv_vname_t *dentry, > - char *target_path, > + struct xfs_name *link_name, > + const char *target_path, > mode_t mode, > xfs_inode_t **ipp, > cred_t *credp) > @@ -3077,15 +3064,13 @@ xfs_symlink( > int nmaps; > xfs_bmbt_irec_t mval[SYMLINK_MAPS]; > xfs_daddr_t d; > - char *cur_chunk; > + const char *cur_chunk; > int byte_cnt; > int n; > xfs_buf_t *bp; > xfs_prid_t prid; > struct xfs_dquot *udqp, *gdqp; > uint resblks; > - char *link_name = VNAME(dentry); > - int link_namelen; > > *ipp = NULL; > error = 0; > @@ -3097,8 +3082,6 @@ xfs_symlink( > if (XFS_FORCED_SHUTDOWN(mp)) > return XFS_ERROR(EIO); > > - link_namelen = VNAMELEN(dentry); > - > /* > * Check component lengths of the target path name. > */ > @@ -3109,7 +3092,7 @@ xfs_symlink( > if (DM_EVENT_ENABLED(dp, DM_EVENT_SYMLINK)) { > error = XFS_SEND_NAMESP(mp, DM_EVENT_SYMLINK, dp, > DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, > - link_name, target_path, 0, 0, 0); > + link_name->name, target_path, 0, 0, 0); > if (error) > return error; > } > @@ -3141,7 +3124,7 @@ xfs_symlink( > fs_blocks = 0; > else > fs_blocks = XFS_B_TO_FSB(mp, pathlen); > - resblks = XFS_SYMLINK_SPACE_RES(mp, link_namelen, fs_blocks); > + resblks = XFS_SYMLINK_SPACE_RES(mp, link_name->len, fs_blocks); > error = xfs_trans_reserve(tp, resblks, XFS_SYMLINK_LOG_RES(mp), 0, > XFS_TRANS_PERM_LOG_RES, XFS_SYMLINK_LOG_COUNT); > if (error == ENOSPC && fs_blocks == 0) { > @@ -3175,8 +3158,8 @@ xfs_symlink( > /* > * Check for ability to enter directory entry, if no space reserved. > */ > - if (resblks == 0 && > - (error = xfs_dir_canenter(tp, dp, link_name, link_namelen))) > + error = xfs_dir_canenter(tp, dp, link_name, resblks); > + if (error) > goto error_return; > /* > * Initialize the bmap freelist prior to calling either > @@ -3268,8 +3251,8 @@ xfs_symlink( > /* > * Create the directory entry for the symlink. > */ > - error = xfs_dir_createname(tp, dp, link_name, link_namelen, ip->i_ino, > - &first_block, &free_list, resblks); > + error = xfs_dir_createname(tp, dp, link_name, ip->i_ino, > + &first_block, &free_list, resblks); > if (error) > goto error1; > xfs_ichgtime(dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); > @@ -3313,8 +3296,8 @@ std_return: > (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTSYMLINK, > dp, DM_RIGHT_NULL, > error ? NULL : ip, > - DM_RIGHT_NULL, link_name, target_path, > - 0, error, 0); > + DM_RIGHT_NULL, link_name->name, > + target_path, 0, error, 0); > } > > if (!error) > Index: kern_ci/fs/xfs/xfs_vnodeops.h > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_vnodeops.h > +++ kern_ci/fs/xfs/xfs_vnodeops.h > @@ -23,20 +23,22 @@ int xfs_fsync(struct xfs_inode *ip, int > xfs_off_t stop); > int xfs_release(struct xfs_inode *ip); > int xfs_inactive(struct xfs_inode *ip); > -int xfs_lookup(struct xfs_inode *dp, bhv_vname_t *dentry, > +int xfs_lookup(struct xfs_inode *dp, struct xfs_name *name, > struct xfs_inode **ipp); > -int xfs_create(struct xfs_inode *dp, bhv_vname_t *dentry, mode_t mode, > +int xfs_create(struct xfs_inode *dp, struct xfs_name *name, mode_t mode, > xfs_dev_t rdev, struct xfs_inode **ipp, struct cred *credp); > -int xfs_remove(struct xfs_inode *dp, bhv_vname_t *dentry); > +int xfs_remove(struct xfs_inode *dp, struct xfs_name *name, > + struct xfs_inode *ip); > int xfs_link(struct xfs_inode *tdp, struct xfs_inode *sip, > - bhv_vname_t *dentry); > -int xfs_mkdir(struct xfs_inode *dp, bhv_vname_t *dentry, > + struct xfs_name *target_name); > +int xfs_mkdir(struct xfs_inode *dp, struct xfs_name *dir_name, > mode_t mode, struct xfs_inode **ipp, struct cred *credp); > -int xfs_rmdir(struct xfs_inode *dp, bhv_vname_t *dentry); > +int xfs_rmdir(struct xfs_inode *dp, struct xfs_name *name, > + struct xfs_inode *cdp); > int xfs_readdir(struct xfs_inode *dp, void *dirent, size_t bufsize, > xfs_off_t *offset, filldir_t filldir); > -int xfs_symlink(struct xfs_inode *dp, bhv_vname_t *dentry, > - char *target_path, mode_t mode, struct xfs_inode **ipp, > +int xfs_symlink(struct xfs_inode *dp, struct xfs_name *link_name, > + const char *target_path, mode_t mode, struct xfs_inode **ipp, > struct cred *credp); > int xfs_inode_flush(struct xfs_inode *ip, int flags); > int xfs_set_dmattrs(struct xfs_inode *ip, u_int evmask, u_int16_t > state); > @@ -44,8 +46,9 @@ int xfs_reclaim(struct xfs_inode *ip); > int xfs_change_file_space(struct xfs_inode *ip, int cmd, > xfs_flock64_t *bf, xfs_off_t offset, > struct cred *credp, int attr_flags); > -int xfs_rename(struct xfs_inode *src_dp, bhv_vname_t *src_vname, > - struct xfs_inode *target_dp, bhv_vname_t *target_vname); > +int xfs_rename(struct xfs_inode *src_dp, struct xfs_name *src_name, > + struct xfs_inode *src_ip, struct xfs_inode *target_dp, > + struct xfs_name *target_name); > int xfs_attr_get(struct xfs_inode *ip, const char *name, char *value, > int *valuelenp, int flags, cred_t *cred); > int xfs_attr_set(struct xfs_inode *dp, const char *name, char *value, From owner-xfs@oss.sgi.com Wed Apr 9 00:30:23 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 00:30:37 -0700 (PDT) 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.0 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 m397UKLF020658 for ; Wed, 9 Apr 2008 00:30:22 -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 RAA28168; Wed, 9 Apr 2008 17:30:55 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id E39AB58C4C0F; Wed, 9 Apr 2008 17:30:54 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Catch errors returned from xfs_bmap_last_offset(). Message-Id: <20080409073054.E39AB58C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 17:30:54 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15302 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Catch errors returned from xfs_bmap_last_offset(). xfs_bmap_last_offset() can fail and return an error. xfs_iomap_write_allocate() fails to detect and propagate the error. Date: Wed Apr 9 17:30:31 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30802a fs/xfs/xfs_iomap.c - 1.62 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_iomap.c.diff?r1=text&tr1=1.62&r2=text&tr2=1.61&f=h - Catch errors returned from xfs_bmap_last_offset(). From owner-xfs@oss.sgi.com Wed Apr 9 00:48:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 00:49:06 -0700 (PDT) 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 m397mwXp023661 for ; Wed, 9 Apr 2008 00:48:59 -0700 X-ASG-Debug-ID: 1207727364-2c3d03640000-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 A7780768911; Wed, 9 Apr 2008 00:49:25 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id HQComT7ARAd1lvjH; Wed, 09 Apr 2008 00:49:25 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JjV3c-00014N-CH; Wed, 09 Apr 2008 07:49:24 +0000 Date: Wed, 9 Apr 2008 03:49:24 -0400 From: Christoph Hellwig To: Barry Naujok Cc: "xfs@oss.sgi.com" , xfs-dev X-ASG-Orig-Subj: Re: [REVIEW #3] cleanup - remove bhv_vname_t Subject: Re: [REVIEW #3] cleanup - remove bhv_vname_t Message-ID: <20080409074924.GA27552@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.17 (2007-11-01) 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: 1207727376 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.1, rules version 3.1.47271 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15303 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Wed, Apr 09, 2008 at 05:24:04PM +1000, Barry Naujok wrote: > + ASSERT(ip1); No need for an assert here, there's only one caller and we know it's there. Except for that nitpick the patch looks fine to me. From owner-xfs@oss.sgi.com Wed Apr 9 01:00:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 01:00:18 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_65 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 m39801HE025723 for ; Wed, 9 Apr 2008 01:00:04 -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 SAA28663; Wed, 9 Apr 2008 18:00:39 +1000 Date: Wed, 09 Apr 2008 18:02:06 +1000 To: "xfs@oss.sgi.com" , xfs-dev Subject: [REVIEW] cleanup - refactor xfs_dir2_leafn_lookup_int() From: "Barry Naujok" Organization: SGI Content-Type: multipart/mixed; boundary=----------ycg65lwMMOqif5K3MecUqG MIME-Version: 1.0 Message-ID: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15304 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs ------------ycg65lwMMOqif5K3MecUqG Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 Content-Transfer-Encoding: Quoted-Printable xfs_dir2_leafn_lookup_int() is a "big" function which basically has two modes of operation: find an empty space in a directory block to insert a new name (addname) or find an existing entry in a block (for lookup, remove and replace). This patch splits up xfs_dir2_leafn_lookup_int() into it two operations. There are only few lines of common code between them. --- fs/xfs/xfs_dir2_node.c | 347=20=20 ++++++++++++++++++++++++++++--------------------- 1 file changed, 202 insertions(+), 145 deletions(-) Index: kern_ci/fs/xfs/xfs_dir2_node.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_dir2_node.c +++ kern_ci/fs/xfs/xfs_dir2_node.c @@ -387,28 +387,26 @@ xfs_dir2_leafn_lasthash( } /* - * Look up a leaf entry in a node-format leaf block. - * If this is an addname then the extrablk in state is a freespace block, - * otherwise it's a data block. + * Look up a leaf entry for space to add a name in a node-format leaf=20= =20 block. + * The extrablk in state is a freespace block. */ -int -xfs_dir2_leafn_lookup_int( +STATIC int +xfs_dir2_leafn_lookup_for_addname( xfs_dabuf_t *bp, /* leaf buffer */ xfs_da_args_t *args, /* operation arguments */ int *indexp, /* out: leaf entry index */ xfs_da_state_t *state) /* state to fill in */ { - xfs_dabuf_t *curbp; /* current data/free buffer */ - xfs_dir2_db_t curdb; /* current data block number */ - xfs_dir2_db_t curfdb; /* current free block number */ - xfs_dir2_data_entry_t *dep; /* data block entry */ + xfs_dabuf_t *curbp =3D NULL; /* current data/free buffer */ + xfs_dir2_db_t curdb =3D -1; /* current data block number */ + xfs_dir2_db_t curfdb =3D -1; /* current free block number */ xfs_inode_t *dp; /* incore directory inode */ int error; /* error return value */ int fi; /* free entry index */ - xfs_dir2_free_t *free=3DNULL; /* free block structure */ + xfs_dir2_free_t *free =3D NULL; /* free block structure */ int index; /* leaf entry index */ xfs_dir2_leaf_t *leaf; /* leaf structure */ - int length=3D0; /* length of new data entry */ + int length; /* length of new data entry */ xfs_dir2_leaf_entry_t *lep; /* leaf entry */ xfs_mount_t *mp; /* filesystem mount point */ xfs_dir2_db_t newdb; /* new data block number */ @@ -431,33 +429,20 @@ xfs_dir2_leafn_lookup_int( /* * Do we have a buffer coming in? */ - if (state->extravalid) + if (state->extravalid) { + /* If so, it's a free block buffer, get the block number. */ curbp =3D state->extrablk.bp; - else - curbp =3D NULL; - /* - * For addname, it's a free block buffer, get the block number. - */ - if (args->addname) { - curfdb =3D curbp ? state->extrablk.blkno : -1; - curdb =3D -1; - length =3D xfs_dir2_data_entsize(args->namelen); - if ((free =3D (curbp ? curbp->data : NULL))) - ASSERT(be32_to_cpu(free->hdr.magic) =3D=3D XFS_DIR2_FREE_MAGIC); - } - /* - * For others, it's a data block buffer, get the block number. - */ - else { - curfdb =3D -1; - curdb =3D curbp ? state->extrablk.blkno : -1; + curfdb =3D state->extrablk.blkno; + free =3D curbp->data; + ASSERT(be32_to_cpu(free->hdr.magic) =3D=3D XFS_DIR2_FREE_MAGIC); } + length =3D xfs_dir2_data_entsize(args->namelen); /* * Loop over leaf entries with the right hash value. */ - for (lep =3D &leaf->ents[index]; - index < be16_to_cpu(leaf->hdr.count) && be32_to_cpu(lep->hashval)=20= =20 =3D=3D args->hashval; - lep++, index++) { + for (lep =3D &leaf->ents[index]; index < be16_to_cpu(leaf->hdr.count) && + be32_to_cpu(lep->hashval) =3D=3D args->hashval; + lep++, index++) { /* * Skip stale leaf entries. */ @@ -471,126 +456,67 @@ xfs_dir2_leafn_lookup_int( * For addname, we're looking for a place to put the new entry. * We want to use a data block with an entry of equal * hash value to ours if there is one with room. + * + * If this block isn't the data block we already have + * in hand, take a look at it. */ - if (args->addname) { + if (newdb !=3D curdb) { + curdb =3D newdb; /* - * If this block isn't the data block we already have - * in hand, take a look at it. + * Convert the data block to the free block + * holding its freespace information. */ - if (newdb !=3D curdb) { - curdb =3D newdb; - /* - * Convert the data block to the free block - * holding its freespace information. - */ - newfdb =3D xfs_dir2_db_to_fdb(mp, newdb); - /* - * If it's not the one we have in hand, - * read it in. - */ - if (newfdb !=3D curfdb) { - /* - * If we had one before, drop it. - */ - if (curbp) - xfs_da_brelse(tp, curbp); - /* - * Read the free block. - */ - if ((error =3D xfs_da_read_buf(tp, dp, - xfs_dir2_db_to_da(mp, - newfdb), - -1, &curbp, - XFS_DATA_FORK))) { - return error; - } - free =3D curbp->data; - ASSERT(be32_to_cpu(free->hdr.magic) =3D=3D - XFS_DIR2_FREE_MAGIC); - ASSERT((be32_to_cpu(free->hdr.firstdb) % - XFS_DIR2_MAX_FREE_BESTS(mp)) =3D=3D - 0); - ASSERT(be32_to_cpu(free->hdr.firstdb) <=3D curdb); - ASSERT(curdb < - be32_to_cpu(free->hdr.firstdb) + - be32_to_cpu(free->hdr.nvalid)); - } - /* - * Get the index for our entry. - */ - fi =3D xfs_dir2_db_to_fdindex(mp, curdb); - /* - * If it has room, return it. - */ - if (unlikely(be16_to_cpu(free->bests[fi]) =3D=3D NULLDATAOFF)) { - XFS_ERROR_REPORT("xfs_dir2_leafn_lookup_int", - XFS_ERRLEVEL_LOW, mp); - if (curfdb !=3D newfdb) - xfs_da_brelse(tp, curbp); - return XFS_ERROR(EFSCORRUPTED); - } - curfdb =3D newfdb; - if (be16_to_cpu(free->bests[fi]) >=3D length) { - *indexp =3D index; - state->extravalid =3D 1; - state->extrablk.bp =3D curbp; - state->extrablk.blkno =3D curfdb; - state->extrablk.index =3D fi; - state->extrablk.magic =3D - XFS_DIR2_FREE_MAGIC; - ASSERT(args->oknoent); - return XFS_ERROR(ENOENT); - } - } - } - /* - * Not adding a new entry, so we really want to find - * the name given to us. - */ - else { + newfdb =3D xfs_dir2_db_to_fdb(mp, newdb); /* - * If it's a different data block, go get it. + * If it's not the one we have in hand, read it in. */ - if (newdb !=3D curdb) { + if (newfdb !=3D curfdb) { /* - * If we had a block before, drop it. + * If we had one before, drop it. */ if (curbp) xfs_da_brelse(tp, curbp); /* - * Read the data block. + * Read the free block. */ - if ((error =3D - xfs_da_read_buf(tp, dp, - xfs_dir2_db_to_da(mp, newdb), -1, - &curbp, XFS_DATA_FORK))) { + error =3D xfs_da_read_buf(tp, dp, + xfs_dir2_db_to_da(mp, newfdb), + -1, &curbp, XFS_DATA_FORK); + if (error) return error; - } - xfs_dir2_data_check(dp, curbp); - curdb =3D newdb; + free =3D curbp->data; + ASSERT(be32_to_cpu(free->hdr.magic) =3D=3D + XFS_DIR2_FREE_MAGIC); + ASSERT((be32_to_cpu(free->hdr.firstdb) % + XFS_DIR2_MAX_FREE_BESTS(mp)) =3D=3D 0); + ASSERT(be32_to_cpu(free->hdr.firstdb) <=3D curdb); + ASSERT(curdb < be32_to_cpu(free->hdr.firstdb) + + be32_to_cpu(free->hdr.nvalid)); } /* - * Point to the data entry. + * Get the index for our entry. */ - dep =3D (xfs_dir2_data_entry_t *) - ((char *)curbp->data + - xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); - /* - * Compare the entry, return it if it matches. - */ - if (dep->namelen =3D=3D args->namelen && - dep->name[0] =3D=3D args->name[0] && - memcmp(dep->name, args->name, args->namelen) =3D=3D 0) { - args->inumber =3D be64_to_cpu(dep->inumber); + fi =3D xfs_dir2_db_to_fdindex(mp, curdb); + /* + * If it has room, return it. + */ + if (unlikely(be16_to_cpu(free->bests[fi]) =3D=3D NULLDATAOFF)) { + XFS_ERROR_REPORT("xfs_dir2_leafn_lookup_int", + XFS_ERRLEVEL_LOW, mp); + if (curfdb !=3D newfdb) + xfs_da_brelse(tp, curbp); + return XFS_ERROR(EFSCORRUPTED); + } + curfdb =3D newfdb; + if (be16_to_cpu(free->bests[fi]) >=3D length) { *indexp =3D index; state->extravalid =3D 1; state->extrablk.bp =3D curbp; - state->extrablk.blkno =3D curdb; - state->extrablk.index =3D - (int)((char *)dep - - (char *)curbp->data); - state->extrablk.magic =3D XFS_DIR2_DATA_MAGIC; - return XFS_ERROR(EEXIST); + state->extrablk.blkno =3D curfdb; + state->extrablk.index =3D fi; + state->extrablk.magic =3D XFS_DIR2_FREE_MAGIC; + ASSERT(args->oknoent); + return XFS_ERROR(ENOENT); } } } @@ -599,25 +525,137 @@ xfs_dir2_leafn_lookup_int( * If we are holding a buffer, give it back in case our caller * finds it useful. */ - if ((state->extravalid =3D (curbp !=3D NULL))) { + if (curbp) { + /* For addname, giving back a free block. */ + state->extravalid =3D 1; state->extrablk.bp =3D curbp; state->extrablk.index =3D -1; + state->extrablk.blkno =3D curfdb; + state->extrablk.magic =3D XFS_DIR2_FREE_MAGIC; + } + /* + * Return the final index, that will be the insertion point. + */ + *indexp =3D index; + ASSERT(index =3D=3D be16_to_cpu(leaf->hdr.count) || args->oknoent); + return XFS_ERROR(ENOENT); +} + +/* + * Look up a leaf entry in a node-format leaf block. + * The extrablk in state a data block. + */ +STATIC int +xfs_dir2_leafn_lookup_for_entry( + xfs_dabuf_t *bp, /* leaf buffer */ + xfs_da_args_t *args, /* operation arguments */ + int *indexp, /* out: leaf entry index */ + xfs_da_state_t *state) /* state to fill in */ +{ + xfs_dabuf_t *curbp =3D NULL; /* current data/free buffer */ + xfs_dir2_db_t curdb =3D -1; /* current data block number */ + xfs_dir2_data_entry_t *dep; /* data block entry */ + xfs_inode_t *dp; /* incore directory inode */ + int error; /* error return value */ + int index; /* leaf entry index */ + xfs_dir2_leaf_t *leaf; /* leaf structure */ + xfs_dir2_leaf_entry_t *lep; /* leaf entry */ + xfs_mount_t *mp; /* filesystem mount point */ + xfs_dir2_db_t newdb; /* new data block number */ + xfs_trans_t *tp; /* transaction pointer */ + + dp =3D args->dp; + tp =3D args->trans; + mp =3D dp->i_mount; + leaf =3D bp->data; + ASSERT(be16_to_cpu(leaf->hdr.info.magic) =3D=3D XFS_DIR2_LEAFN_MAGIC); +#ifdef __KERNEL__ + ASSERT(be16_to_cpu(leaf->hdr.count) > 0); +#endif + xfs_dir2_leafn_check(dp, bp); + /* + * Look up the hash value in the leaf entries. + */ + index =3D xfs_dir2_leaf_search_hash(args, bp); + /* + * Do we have a buffer coming in? + */ + if (state->extravalid) { + curbp =3D state->extrablk.bp; + curdb =3D state->extrablk.blkno; + } + /* + * Loop over leaf entries with the right hash value. + */ + for (lep =3D &leaf->ents[index]; index < be16_to_cpu(leaf->hdr.count) && + be32_to_cpu(lep->hashval) =3D=3D args->hashval; + lep++, index++) { + /* + * Skip stale leaf entries. + */ + if (be32_to_cpu(lep->address) =3D=3D XFS_DIR2_NULL_DATAPTR) + continue; + /* + * Pull the data block number from the entry. + */ + newdb =3D xfs_dir2_dataptr_to_db(mp, be32_to_cpu(lep->address)); /* - * For addname, giving back a free block. + * Not adding a new entry, so we really want to find + * the name given to us. + * + * If it's a different data block, go get it. */ - if (args->addname) { - state->extrablk.blkno =3D curfdb; - state->extrablk.magic =3D XFS_DIR2_FREE_MAGIC; + if (newdb !=3D curdb) { + /* + * If we had a block before, drop it. + */ + if (curbp) + xfs_da_brelse(tp, curbp); + /* + * Read the data block. + */ + error =3D xfs_da_read_buf(tp, dp, xfs_dir2_db_to_da(mp, + newdb), -1, &curbp, XFS_DATA_FORK); + if (error) + return error; + xfs_dir2_data_check(dp, curbp); + curdb =3D newdb; } /* - * For other callers, giving back a data block. + * Point to the data entry. */ - else { + dep =3D (xfs_dir2_data_entry_t *)((char *)curbp->data + + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); + /* + * Compare the entry, return it if it matches. + */ + if (dep->namelen =3D=3D args->namelen && memcmp(dep->name, + args->name, args->namelen) =3D=3D 0) { + args->inumber =3D be64_to_cpu(dep->inumber); + *indexp =3D index; + state->extravalid =3D 1; + state->extrablk.bp =3D curbp; state->extrablk.blkno =3D curdb; + state->extrablk.index =3D (int)((char *)dep - + (char *)curbp->data); state->extrablk.magic =3D XFS_DIR2_DATA_MAGIC; + return XFS_ERROR(EEXIST); } } /* + * Didn't find a match. + * If we are holding a buffer, give it back in case our caller + * finds it useful. + */ + if (curbp) { + /* Giving back a data block. */ + state->extravalid =3D 1; + state->extrablk.bp =3D curbp; + state->extrablk.index =3D -1; + state->extrablk.blkno =3D curdb; + state->extrablk.magic =3D XFS_DIR2_DATA_MAGIC; + } + /* * Return the final index, that will be the insertion point. */ *indexp =3D index; @@ -626,6 +664,24 @@ xfs_dir2_leafn_lookup_int( } /* + * Look up a leaf entry in a node-format leaf block. + * If this is an addname then the extrablk in state is a freespace block, + * otherwise it's a data block. + */ +int +xfs_dir2_leafn_lookup_int( + xfs_dabuf_t *bp, /* leaf buffer */ + xfs_da_args_t *args, /* operation arguments */ + int *indexp, /* out: leaf entry index */ + xfs_da_state_t *state) /* state to fill in */ +{ + if (args->addname) + return xfs_dir2_leafn_lookup_for_addname(bp, args, indexp, + state); + return xfs_dir2_leafn_lookup_for_entry(bp, args, indexp, state); +} + +/* * Move count leaf entries from source to destination leaf. * Log entries and headers. Stale entries are preserved. */ @@ -823,9 +879,10 @@ xfs_dir2_leafn_rebalance( */ if (!state->inleaf) blk2->index =3D blk1->index - be16_to_cpu(leaf1->hdr.count); -=09 - /* - * Finally sanity check just to make sure we are not returning a=20=20 negative index + + /* + * Finally sanity check just to make sure we are not returning a + * negative index */ if(blk2->index < 0) { state->inleaf =3D 1; ------------ycg65lwMMOqif5K3MecUqG Content-Disposition: attachment; filename=refactor_leafn_lookup.patch Content-Type: text/x-patch; name=refactor_leafn_lookup.patch Content-Transfer-Encoding: Quoted-Printable The next step for case-insensitive support is to avoid polution of the dentry cache with entries pointing to the same inode, but with names that only differ in case. =20 To perform this, we will need to pass the actual filename that matched backup to the XFS/VFS interface and make sure the dentry cache only contains entries with the actual case-sensitive name. =20 But, before we can do this, it was found that the directory lookup code with multiple leaves was shared with code adding a name to that directory. Most of xfs_dir2_leafn_lookup_int() could be broken into two functions determined by if (args->addname) { } else { }. =20 For the following patch, only the lookup case needs to handle the various xfs_nameops, with case-insensitive match handling in addition to returning the actual name. =20 So, this patch separates xfs_dir2_leafn_lookup_int() into xfs_dir2_leafn_lookup_for_addname() and xfs_dir2_leafn_lookup_for_entry(). =20 xfs_dir2_leafn_lookup_for_addname() iterates through the data blocks looking for a suitable empty space to insert the name while xfs_dir2_leafn_lookup_for_entry() uses the xfs_nameops to find the entry. =20 xfs_dir2_leafn_lookup_for_entry() path also retains the data block where the first case-insensitive match occured as in the next patch which will return the name, the name is obtained from that block. =20 Signed-off-by: Barry Naujok =20 --- fs/xfs/xfs_dir2_node.c | 347 ++++++++++++++++++++++++++++----------------= ----- 1 file changed, 202 insertions(+), 145 deletions(-) =20 Index: kern_ci/fs/xfs/xfs_dir2_node.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_dir2_node.c +++ kern_ci/fs/xfs/xfs_dir2_node.c @@ -387,28 +387,26 @@ xfs_dir2_leafn_lasthash( } =20 /* - * Look up a leaf entry in a node-format leaf block. - * If this is an addname then the extrablk in state is a freespace block, - * otherwise it's a data block. + * Look up a leaf entry for space to add a name in a node-format leaf bloc= k. + * The extrablk in state is a freespace block. */ -int -xfs_dir2_leafn_lookup_int( +STATIC int +xfs_dir2_leafn_lookup_for_addname( xfs_dabuf_t *bp, /* leaf buffer */ xfs_da_args_t *args, /* operation arguments */ int *indexp, /* out: leaf entry index */ xfs_da_state_t *state) /* state to fill in */ { - xfs_dabuf_t *curbp; /* current data/free buffer */ - xfs_dir2_db_t curdb; /* current data block number */ - xfs_dir2_db_t curfdb; /* current free block number */ - xfs_dir2_data_entry_t *dep; /* data block entry */ + xfs_dabuf_t *curbp =3D NULL; /* current data/free buffer */ + xfs_dir2_db_t curdb =3D -1; /* current data block number */ + xfs_dir2_db_t curfdb =3D -1; /* current free block number */ xfs_inode_t *dp; /* incore directory inode */ int error; /* error return value */ int fi; /* free entry index */ - xfs_dir2_free_t *free=3DNULL; /* free block structure */ + xfs_dir2_free_t *free =3D NULL; /* free block structure */ int index; /* leaf entry index */ xfs_dir2_leaf_t *leaf; /* leaf structure */ - int length=3D0; /* length of new data entry */ + int length; /* length of new data entry */ xfs_dir2_leaf_entry_t *lep; /* leaf entry */ xfs_mount_t *mp; /* filesystem mount point */ xfs_dir2_db_t newdb; /* new data block number */ @@ -431,33 +429,20 @@ xfs_dir2_leafn_lookup_int( /* * Do we have a buffer coming in? */ - if (state->extravalid) + if (state->extravalid) { + /* If so, it's a free block buffer, get the block number. */ curbp =3D state->extrablk.bp; - else - curbp =3D NULL; - /* - * For addname, it's a free block buffer, get the block number. - */ - if (args->addname) { - curfdb =3D curbp ? state->extrablk.blkno : -1; - curdb =3D -1; - length =3D xfs_dir2_data_entsize(args->namelen); - if ((free =3D (curbp ? curbp->data : NULL))) - ASSERT(be32_to_cpu(free->hdr.magic) =3D=3D XFS_DIR2_FREE_MAGIC); - } - /* - * For others, it's a data block buffer, get the block number. - */ - else { - curfdb =3D -1; - curdb =3D curbp ? state->extrablk.blkno : -1; + curfdb =3D state->extrablk.blkno; + free =3D curbp->data; + ASSERT(be32_to_cpu(free->hdr.magic) =3D=3D XFS_DIR2_FREE_MAGIC); } + length =3D xfs_dir2_data_entsize(args->namelen); /* * Loop over leaf entries with the right hash value. */ - for (lep =3D &leaf->ents[index]; - index < be16_to_cpu(leaf->hdr.count) && be32_to_cpu(lep->hashval) = =3D=3D args->hashval; - lep++, index++) { + for (lep =3D &leaf->ents[index]; index < be16_to_cpu(leaf->hdr.count) && + be32_to_cpu(lep->hashval) =3D=3D args->hashval; + lep++, index++) { /* * Skip stale leaf entries. */ @@ -471,126 +456,67 @@ xfs_dir2_leafn_lookup_int( * For addname, we're looking for a place to put the new entry. * We want to use a data block with an entry of equal * hash value to ours if there is one with room. + * + * If this block isn't the data block we already have + * in hand, take a look at it. */ - if (args->addname) { + if (newdb !=3D curdb) { + curdb =3D newdb; /* - * If this block isn't the data block we already have - * in hand, take a look at it. + * Convert the data block to the free block + * holding its freespace information. */ - if (newdb !=3D curdb) { - curdb =3D newdb; - /* - * Convert the data block to the free block - * holding its freespace information. - */ - newfdb =3D xfs_dir2_db_to_fdb(mp, newdb); - /* - * If it's not the one we have in hand, - * read it in. - */ - if (newfdb !=3D curfdb) { - /* - * If we had one before, drop it. - */ - if (curbp) - xfs_da_brelse(tp, curbp); - /* - * Read the free block. - */ - if ((error =3D xfs_da_read_buf(tp, dp, - xfs_dir2_db_to_da(mp, - newfdb), - -1, &curbp, - XFS_DATA_FORK))) { - return error; - } - free =3D curbp->data; - ASSERT(be32_to_cpu(free->hdr.magic) =3D=3D - XFS_DIR2_FREE_MAGIC); - ASSERT((be32_to_cpu(free->hdr.firstdb) % - XFS_DIR2_MAX_FREE_BESTS(mp)) =3D=3D - 0); - ASSERT(be32_to_cpu(free->hdr.firstdb) <=3D curdb); - ASSERT(curdb < - be32_to_cpu(free->hdr.firstdb) + - be32_to_cpu(free->hdr.nvalid)); - } - /* - * Get the index for our entry. - */ - fi =3D xfs_dir2_db_to_fdindex(mp, curdb); - /* - * If it has room, return it. - */ - if (unlikely(be16_to_cpu(free->bests[fi]) =3D=3D NULLDATAOFF)) { - XFS_ERROR_REPORT("xfs_dir2_leafn_lookup_int", - XFS_ERRLEVEL_LOW, mp); - if (curfdb !=3D newfdb) - xfs_da_brelse(tp, curbp); - return XFS_ERROR(EFSCORRUPTED); - } - curfdb =3D newfdb; - if (be16_to_cpu(free->bests[fi]) >=3D length) { - *indexp =3D index; - state->extravalid =3D 1; - state->extrablk.bp =3D curbp; - state->extrablk.blkno =3D curfdb; - state->extrablk.index =3D fi; - state->extrablk.magic =3D - XFS_DIR2_FREE_MAGIC; - ASSERT(args->oknoent); - return XFS_ERROR(ENOENT); - } - } - } - /* - * Not adding a new entry, so we really want to find - * the name given to us. - */ - else { + newfdb =3D xfs_dir2_db_to_fdb(mp, newdb); /* - * If it's a different data block, go get it. + * If it's not the one we have in hand, read it in. */ - if (newdb !=3D curdb) { + if (newfdb !=3D curfdb) { /* - * If we had a block before, drop it. + * If we had one before, drop it. */ if (curbp) xfs_da_brelse(tp, curbp); /* - * Read the data block. + * Read the free block. */ - if ((error =3D - xfs_da_read_buf(tp, dp, - xfs_dir2_db_to_da(mp, newdb), -1, - &curbp, XFS_DATA_FORK))) { + error =3D xfs_da_read_buf(tp, dp, + xfs_dir2_db_to_da(mp, newfdb), + -1, &curbp, XFS_DATA_FORK); + if (error) return error; - } - xfs_dir2_data_check(dp, curbp); - curdb =3D newdb; + free =3D curbp->data; + ASSERT(be32_to_cpu(free->hdr.magic) =3D=3D + XFS_DIR2_FREE_MAGIC); + ASSERT((be32_to_cpu(free->hdr.firstdb) % + XFS_DIR2_MAX_FREE_BESTS(mp)) =3D=3D 0); + ASSERT(be32_to_cpu(free->hdr.firstdb) <=3D curdb); + ASSERT(curdb < be32_to_cpu(free->hdr.firstdb) + + be32_to_cpu(free->hdr.nvalid)); } /* - * Point to the data entry. + * Get the index for our entry. */ - dep =3D (xfs_dir2_data_entry_t *) - ((char *)curbp->data + - xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); - /* - * Compare the entry, return it if it matches. - */ - if (dep->namelen =3D=3D args->namelen && - dep->name[0] =3D=3D args->name[0] && - memcmp(dep->name, args->name, args->namelen) =3D=3D 0) { - args->inumber =3D be64_to_cpu(dep->inumber); + fi =3D xfs_dir2_db_to_fdindex(mp, curdb); + /* + * If it has room, return it. + */ + if (unlikely(be16_to_cpu(free->bests[fi]) =3D=3D NULLDATAOFF)) { + XFS_ERROR_REPORT("xfs_dir2_leafn_lookup_int", + XFS_ERRLEVEL_LOW, mp); + if (curfdb !=3D newfdb) + xfs_da_brelse(tp, curbp); + return XFS_ERROR(EFSCORRUPTED); + } + curfdb =3D newfdb; + if (be16_to_cpu(free->bests[fi]) >=3D length) { *indexp =3D index; state->extravalid =3D 1; state->extrablk.bp =3D curbp; - state->extrablk.blkno =3D curdb; - state->extrablk.index =3D - (int)((char *)dep - - (char *)curbp->data); - state->extrablk.magic =3D XFS_DIR2_DATA_MAGIC; - return XFS_ERROR(EEXIST); + state->extrablk.blkno =3D curfdb; + state->extrablk.index =3D fi; + state->extrablk.magic =3D XFS_DIR2_FREE_MAGIC; + ASSERT(args->oknoent); + return XFS_ERROR(ENOENT); } } } @@ -599,25 +525,137 @@ xfs_dir2_leafn_lookup_int( * If we are holding a buffer, give it back in case our caller * finds it useful. */ - if ((state->extravalid =3D (curbp !=3D NULL))) { + if (curbp) { + /* For addname, giving back a free block. */ + state->extravalid =3D 1; state->extrablk.bp =3D curbp; state->extrablk.index =3D -1; + state->extrablk.blkno =3D curfdb; + state->extrablk.magic =3D XFS_DIR2_FREE_MAGIC; + } + /* + * Return the final index, that will be the insertion point. + */ + *indexp =3D index; + ASSERT(index =3D=3D be16_to_cpu(leaf->hdr.count) || args->oknoent); + return XFS_ERROR(ENOENT); +} + +/* + * Look up a leaf entry in a node-format leaf block. + * The extrablk in state a data block. + */ +STATIC int +xfs_dir2_leafn_lookup_for_entry( + xfs_dabuf_t *bp, /* leaf buffer */ + xfs_da_args_t *args, /* operation arguments */ + int *indexp, /* out: leaf entry index */ + xfs_da_state_t *state) /* state to fill in */ +{ + xfs_dabuf_t *curbp =3D NULL; /* current data/free buffer */ + xfs_dir2_db_t curdb =3D -1; /* current data block number */ + xfs_dir2_data_entry_t *dep; /* data block entry */ + xfs_inode_t *dp; /* incore directory inode */ + int error; /* error return value */ + int index; /* leaf entry index */ + xfs_dir2_leaf_t *leaf; /* leaf structure */ + xfs_dir2_leaf_entry_t *lep; /* leaf entry */ + xfs_mount_t *mp; /* filesystem mount point */ + xfs_dir2_db_t newdb; /* new data block number */ + xfs_trans_t *tp; /* transaction pointer */ + + dp =3D args->dp; + tp =3D args->trans; + mp =3D dp->i_mount; + leaf =3D bp->data; + ASSERT(be16_to_cpu(leaf->hdr.info.magic) =3D=3D XFS_DIR2_LEAFN_MAGIC); +#ifdef __KERNEL__ + ASSERT(be16_to_cpu(leaf->hdr.count) > 0); +#endif + xfs_dir2_leafn_check(dp, bp); + /* + * Look up the hash value in the leaf entries. + */ + index =3D xfs_dir2_leaf_search_hash(args, bp); + /* + * Do we have a buffer coming in? + */ + if (state->extravalid) { + curbp =3D state->extrablk.bp; + curdb =3D state->extrablk.blkno; + } + /* + * Loop over leaf entries with the right hash value. + */ + for (lep =3D &leaf->ents[index]; index < be16_to_cpu(leaf->hdr.count) && + be32_to_cpu(lep->hashval) =3D=3D args->hashval; + lep++, index++) { + /* + * Skip stale leaf entries. + */ + if (be32_to_cpu(lep->address) =3D=3D XFS_DIR2_NULL_DATAPTR) + continue; + /* + * Pull the data block number from the entry. + */ + newdb =3D xfs_dir2_dataptr_to_db(mp, be32_to_cpu(lep->address)); /* - * For addname, giving back a free block. + * Not adding a new entry, so we really want to find + * the name given to us. + * + * If it's a different data block, go get it. */ - if (args->addname) { - state->extrablk.blkno =3D curfdb; - state->extrablk.magic =3D XFS_DIR2_FREE_MAGIC; + if (newdb !=3D curdb) { + /* + * If we had a block before, drop it. + */ + if (curbp) + xfs_da_brelse(tp, curbp); + /* + * Read the data block. + */ + error =3D xfs_da_read_buf(tp, dp, xfs_dir2_db_to_da(mp, + newdb), -1, &curbp, XFS_DATA_FORK); + if (error) + return error; + xfs_dir2_data_check(dp, curbp); + curdb =3D newdb; } /* - * For other callers, giving back a data block. + * Point to the data entry. */ - else { + dep =3D (xfs_dir2_data_entry_t *)((char *)curbp->data + + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); + /* + * Compare the entry, return it if it matches. + */ + if (dep->namelen =3D=3D args->namelen && memcmp(dep->name, + args->name, args->namelen) =3D=3D 0) { + args->inumber =3D be64_to_cpu(dep->inumber); + *indexp =3D index; + state->extravalid =3D 1; + state->extrablk.bp =3D curbp; state->extrablk.blkno =3D curdb; + state->extrablk.index =3D (int)((char *)dep - + (char *)curbp->data); state->extrablk.magic =3D XFS_DIR2_DATA_MAGIC; + return XFS_ERROR(EEXIST); } } /* + * Didn't find a match. + * If we are holding a buffer, give it back in case our caller + * finds it useful. + */ + if (curbp) { + /* Giving back a data block. */ + state->extravalid =3D 1; + state->extrablk.bp =3D curbp; + state->extrablk.index =3D -1; + state->extrablk.blkno =3D curdb; + state->extrablk.magic =3D XFS_DIR2_DATA_MAGIC; + } + /* * Return the final index, that will be the insertion point. */ *indexp =3D index; @@ -626,6 +664,24 @@ xfs_dir2_leafn_lookup_int( } =20 /* + * Look up a leaf entry in a node-format leaf block. + * If this is an addname then the extrablk in state is a freespace block, + * otherwise it's a data block. + */ +int +xfs_dir2_leafn_lookup_int( + xfs_dabuf_t *bp, /* leaf buffer */ + xfs_da_args_t *args, /* operation arguments */ + int *indexp, /* out: leaf entry index */ + xfs_da_state_t *state) /* state to fill in */ +{ + if (args->addname) + return xfs_dir2_leafn_lookup_for_addname(bp, args, indexp, + state); + return xfs_dir2_leafn_lookup_for_entry(bp, args, indexp, state); +} + +/* * Move count leaf entries from source to destination leaf. * Log entries and headers. Stale entries are preserved. */ @@ -823,9 +879,10 @@ xfs_dir2_leafn_rebalance( */ if (!state->inleaf) blk2->index =3D blk1->index - be16_to_cpu(leaf1->hdr.count); -=09 - /*=20 - * Finally sanity check just to make sure we are not returning a negative= index=20 + + /* + * Finally sanity check just to make sure we are not returning a + * negative index */ if(blk2->index < 0) { state->inleaf =3D 1; ------------ycg65lwMMOqif5K3MecUqG-- From owner-xfs@oss.sgi.com Wed Apr 9 01:08:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 01:08:39 -0700 (PDT) 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.0 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 m3988QZI027220 for ; Wed, 9 Apr 2008 01:08:28 -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 SAA28769; Wed, 9 Apr 2008 18:09:00 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id D7ABB58C4C0F; Wed, 9 Apr 2008 18:08:59 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - cleanup - remove bhv_vname_t Message-Id: <20080409080859.D7ABB58C4C0F@chook.melbourne.sgi.com> Date: Wed, 9 Apr 2008 18:08:59 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15305 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs remove bhv_vname_t and xfs_rename code Date: Wed Apr 9 18:06:28 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/2.6.x-xfs Inspected by: hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30804a fs/xfs/xfs_vnodeops.c - 1.747 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.c.diff?r1=text&tr1=1.747&r2=text&tr2=1.746&f=h fs/xfs/xfs_mount.h - 1.261 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.h.diff?r1=text&tr1=1.261&r2=text&tr2=1.260&f=h fs/xfs/xfs_types.h - 1.81 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_types.h.diff?r1=text&tr1=1.81&r2=text&tr2=1.80&f=h fs/xfs/xfs_utils.c - 1.82 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_utils.c.diff?r1=text&tr1=1.82&r2=text&tr2=1.81&f=h fs/xfs/xfs_utils.h - 1.41 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_utils.h.diff?r1=text&tr1=1.41&r2=text&tr2=1.40&f=h fs/xfs/xfs_rename.c - 1.82 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_rename.c.diff?r1=text&tr1=1.82&r2=text&tr2=1.81&f=h fs/xfs/xfs_dir2.h - 1.22 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2.h.diff?r1=text&tr1=1.22&r2=text&tr2=1.21&f=h fs/xfs/xfs_dir2.c - 1.63 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2.c.diff?r1=text&tr1=1.63&r2=text&tr2=1.62&f=h fs/xfs/linux-2.6/xfs_vnode.h - 1.148 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_vnode.h.diff?r1=text&tr1=1.148&r2=text&tr2=1.147&f=h fs/xfs/linux-2.6/xfs_iops.c - 1.283 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_iops.c.diff?r1=text&tr1=1.283&r2=text&tr2=1.282&f=h fs/xfs/linux-2.6/xfs_export.c - 1.22 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_export.c.diff?r1=text&tr1=1.22&r2=text&tr2=1.21&f=h fs/xfs/dmapi/xfs_dm.c - 1.68 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/dmapi/xfs_dm.c.diff?r1=text&tr1=1.68&r2=text&tr2=1.67&f=h fs/xfs/xfs_vnodeops.h - 1.12 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.h.diff?r1=text&tr1=1.12&r2=text&tr2=1.11&f=h - remove bhv_vname_t and xfs_rename code Modid: linux-melb:dmapi:30804b fs/dmapi/dmapi_event.c - 1.35 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/fs/dmapi/dmapi_event.c.diff?r1=text&tr1=1.35&r2=text&tr2=1.34&f=h fs/dmapi/dmapi_kern.h - 1.21 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/fs/dmapi/dmapi_kern.h.diff?r1=text&tr1=1.21&r2=text&tr2=1.20&f=h - remove bhv_vname_t and xfs_rename code From owner-xfs@oss.sgi.com Wed Apr 9 01:10:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 01:10:15 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_63 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 m398A311027749 for ; Wed, 9 Apr 2008 01:10:04 -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 SAA28807; Wed, 9 Apr 2008 18:10:36 +1000 Message-ID: <47FC79FC.5020803@sgi.com> Date: Wed, 09 Apr 2008 18:10:36 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: xfs-dev , xfs-oss , asg-qa Subject: REVIEW XFSQA test out xfs_attr_shortform_bytesfit attr2/attr1 fix Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15306 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Hi there, A test to test out Eric's fix for xfs_attr_shortform_bytesfit bug when going from attr2 to attr1. With TOT kernel, without patch, one can see the corrupted inline dirents. With patch, all is well. The 186.out _should_ be output'ing ATTR2 for the db version command but I'm awaiting Barry's xfsprogs checkin to fix that one - and then I will regenerate it. 186 does have some superfluous functionality: _cleanup, _rmv_eas but it may be handy to have for more attr2 testing later. --Tim =========================================================================== Index: xfstests/186 =========================================================================== --- a/xfstests/186 2006-06-17 00:58:24.000000000 +1000 +++ b/xfstests/186 2008-04-09 19:19:37.544194700 +1000 @@ -0,0 +1,165 @@ +#! /bin/sh +# FS QA Test No. 186 +# +#----------------------------------------------------------------------- +# Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. +#----------------------------------------------------------------------- +# +# Test out: +# pv#979606: xfs bug in going from attr2 back to attr1 +# +# Test bug in going from attr2 back to attr1 where xfs +# (due to xfs_attr_shortform_bytesfit) +# would reset the di_forkoff to the m_offset instead of +# leaving the di_forkoff alone as was intended. +# +# We create enough dirents to push us past m_attroffset, +# and create an EA so we have a fork offset +# and then turn on attr1 and add one more EA which +# will write over the shortform dirents. +# +# +# creator +owner=tes@emu.melbourne.sgi.com + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +_create_dirents() +{ + start_num=$1 + end_num=$2 + cd $fork_dir + for i in `seq $start_num $end_num`; do + touch file.$i + done +} + +_create_eas() +{ + start_num=$1 + end_num=$2 + for i in `seq $start_num $end_num`; do + setfattr -n user.$i -v 0xbabe $fork_dir + done +} + +_rmv_eas() +{ + start_num=$1 + end_num=$2 + for i in `seq $start_num $end_num`; do + setfattr -x user.$i $fork_dir + done +} + +_filter_inode() +{ + egrep '^u.sfdir2|^a.sfattr|core.forkoff' |\ + egrep -v 'inumber|parent' +} + +_filter_version() +{ + tr ',' '\n' | grep ATTR +} + +_print_inode() +{ + echo "" + echo "=================================" + $XFS_DB_PROG -c "version" $SCRATCH_DEV 2>&1 | _filter_version + $XFS_DB_PROG -c "inode $inum" -c p $SCRATCH_DEV 2>&1 | _filter_inode + echo "=================================" +} + +_do_eas() +{ + echo "" + _scratch_mount + if [ $1 = "-r" ]; then + echo "*** remove EAs start $2 end $3 ***" + _rmv_eas $2 $3 + else + echo "*** create EAs start $2 end $3 ***" + _create_eas $2 $3 + fi + echo "" + cd /; $UMOUNT_PROG $SCRATCH_MNT + _print_inode +} + +_do_dirents() +{ + num=`expr $2 - $1 + 1` + echo "" + echo "*** create $num dirents ***" + echo "" + _scratch_mount + _create_dirents $1 $2 + cd /; $UMOUNT_PROG $SCRATCH_MNT + _print_inode +} + +_changeto_attr1() +{ + echo "" + echo "Try setting attr1 by db" + echo "" + $XFS_DB_PROG -x -c "version attr1" $SCRATCH_DEV | _filter_version +} + + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here + +# Modify as appropriate. +_supported_fs xfs +_supported_os Linux +_require_scratch + +_scratch_mkfs -i attr=2,size=512 >/dev/null 2>&1 + +# set inum to root dir ino +# we'll add in dirents and EAs into the root directory +eval `$XFS_DB_PROG -r -c 'sb 0' -c 'p rootino' $SCRATCH_DEV | $SED_PROG 's/ //g'` +inum=$rootino +fork_dir=$SCRATCH_MNT +_print_inode + +# add enough dirents to be inline but more +# than will fit for m_attroffset for 512b inodes +# for attr2 this is not a problem +_do_dirents 1 25 + +# add 1 ea so we get our forkoff happening +_do_eas -c 1 1 + +# now change back to attr1 where forkoff is constant now +_changeto_attr1 + +# now add another EA +# for a bug in xfs_add_shortform_bytesfit +# where it reset the forkoff to m_attroffset>>3 instead of +# leaving as di_forkoff +# If it resets to m_attroffset which is in the middle of +# the dirents then they will get corrupted +_do_eas -c 2 2 + +# success, all done +status=0 +exit =========================================================================== Index: xfstests/186.out =========================================================================== --- a/xfstests/186.out 2006-06-17 00:58:24.000000000 +1000 +++ b/xfstests/186.out 2008-04-09 19:22:57.792187350 +1000 @@ -0,0 +1,288 @@ +QA output created by 186 + +================================= +ATTR2 +core.forkoff = 0 +u.sfdir2.hdr.count = 0 +u.sfdir2.hdr.i8count = 0 +================================= + +*** create 25 dirents *** + + +================================= +core.forkoff = 0 +u.sfdir2.hdr.count = 25 +u.sfdir2.hdr.i8count = 0 +u.sfdir2.list[0].namelen = 6 +u.sfdir2.list[0].offset = 0x30 +u.sfdir2.list[0].name = "file.1" +u.sfdir2.list[1].namelen = 6 +u.sfdir2.list[1].offset = 0x48 +u.sfdir2.list[1].name = "file.2" +u.sfdir2.list[2].namelen = 6 +u.sfdir2.list[2].offset = 0x60 +u.sfdir2.list[2].name = "file.3" +u.sfdir2.list[3].namelen = 6 +u.sfdir2.list[3].offset = 0x78 +u.sfdir2.list[3].name = "file.4" +u.sfdir2.list[4].namelen = 6 +u.sfdir2.list[4].offset = 0x90 +u.sfdir2.list[4].name = "file.5" +u.sfdir2.list[5].namelen = 6 +u.sfdir2.list[5].offset = 0xa8 +u.sfdir2.list[5].name = "file.6" +u.sfdir2.list[6].namelen = 6 +u.sfdir2.list[6].offset = 0xc0 +u.sfdir2.list[6].name = "file.7" +u.sfdir2.list[7].namelen = 6 +u.sfdir2.list[7].offset = 0xd8 +u.sfdir2.list[7].name = "file.8" +u.sfdir2.list[8].namelen = 6 +u.sfdir2.list[8].offset = 0xf0 +u.sfdir2.list[8].name = "file.9" +u.sfdir2.list[9].namelen = 7 +u.sfdir2.list[9].offset = 0x108 +u.sfdir2.list[9].name = "file.10" +u.sfdir2.list[10].namelen = 7 +u.sfdir2.list[10].offset = 0x120 +u.sfdir2.list[10].name = "file.11" +u.sfdir2.list[11].namelen = 7 +u.sfdir2.list[11].offset = 0x138 +u.sfdir2.list[11].name = "file.12" +u.sfdir2.list[12].namelen = 7 +u.sfdir2.list[12].offset = 0x150 +u.sfdir2.list[12].name = "file.13" +u.sfdir2.list[13].namelen = 7 +u.sfdir2.list[13].offset = 0x168 +u.sfdir2.list[13].name = "file.14" +u.sfdir2.list[14].namelen = 7 +u.sfdir2.list[14].offset = 0x180 +u.sfdir2.list[14].name = "file.15" +u.sfdir2.list[15].namelen = 7 +u.sfdir2.list[15].offset = 0x198 +u.sfdir2.list[15].name = "file.16" +u.sfdir2.list[16].namelen = 7 +u.sfdir2.list[16].offset = 0x1b0 +u.sfdir2.list[16].name = "file.17" +u.sfdir2.list[17].namelen = 7 +u.sfdir2.list[17].offset = 0x1c8 +u.sfdir2.list[17].name = "file.18" +u.sfdir2.list[18].namelen = 7 +u.sfdir2.list[18].offset = 0x1e0 +u.sfdir2.list[18].name = "file.19" +u.sfdir2.list[19].namelen = 7 +u.sfdir2.list[19].offset = 0x1f8 +u.sfdir2.list[19].name = "file.20" +u.sfdir2.list[20].namelen = 7 +u.sfdir2.list[20].offset = 0x210 +u.sfdir2.list[20].name = "file.21" +u.sfdir2.list[21].namelen = 7 +u.sfdir2.list[21].offset = 0x228 +u.sfdir2.list[21].name = "file.22" +u.sfdir2.list[22].namelen = 7 +u.sfdir2.list[22].offset = 0x240 +u.sfdir2.list[22].name = "file.23" +u.sfdir2.list[23].namelen = 7 +u.sfdir2.list[23].offset = 0x258 +u.sfdir2.list[23].name = "file.24" +u.sfdir2.list[24].namelen = 7 +u.sfdir2.list[24].offset = 0x270 +u.sfdir2.list[24].name = "file.25" +================================= + +*** create EAs start 1 end 1 *** + + +================================= +ATTR +core.forkoff = 47 +u.sfdir2.hdr.count = 25 +u.sfdir2.hdr.i8count = 0 +u.sfdir2.list[0].namelen = 6 +u.sfdir2.list[0].offset = 0x30 +u.sfdir2.list[0].name = "file.1" +u.sfdir2.list[1].namelen = 6 +u.sfdir2.list[1].offset = 0x48 +u.sfdir2.list[1].name = "file.2" +u.sfdir2.list[2].namelen = 6 +u.sfdir2.list[2].offset = 0x60 +u.sfdir2.list[2].name = "file.3" +u.sfdir2.list[3].namelen = 6 +u.sfdir2.list[3].offset = 0x78 +u.sfdir2.list[3].name = "file.4" +u.sfdir2.list[4].namelen = 6 +u.sfdir2.list[4].offset = 0x90 +u.sfdir2.list[4].name = "file.5" +u.sfdir2.list[5].namelen = 6 +u.sfdir2.list[5].offset = 0xa8 +u.sfdir2.list[5].name = "file.6" +u.sfdir2.list[6].namelen = 6 +u.sfdir2.list[6].offset = 0xc0 +u.sfdir2.list[6].name = "file.7" +u.sfdir2.list[7].namelen = 6 +u.sfdir2.list[7].offset = 0xd8 +u.sfdir2.list[7].name = "file.8" +u.sfdir2.list[8].namelen = 6 +u.sfdir2.list[8].offset = 0xf0 +u.sfdir2.list[8].name = "file.9" +u.sfdir2.list[9].namelen = 7 +u.sfdir2.list[9].offset = 0x108 +u.sfdir2.list[9].name = "file.10" +u.sfdir2.list[10].namelen = 7 +u.sfdir2.list[10].offset = 0x120 +u.sfdir2.list[10].name = "file.11" +u.sfdir2.list[11].namelen = 7 +u.sfdir2.list[11].offset = 0x138 +u.sfdir2.list[11].name = "file.12" +u.sfdir2.list[12].namelen = 7 +u.sfdir2.list[12].offset = 0x150 +u.sfdir2.list[12].name = "file.13" +u.sfdir2.list[13].namelen = 7 +u.sfdir2.list[13].offset = 0x168 +u.sfdir2.list[13].name = "file.14" +u.sfdir2.list[14].namelen = 7 +u.sfdir2.list[14].offset = 0x180 +u.sfdir2.list[14].name = "file.15" +u.sfdir2.list[15].namelen = 7 +u.sfdir2.list[15].offset = 0x198 +u.sfdir2.list[15].name = "file.16" +u.sfdir2.list[16].namelen = 7 +u.sfdir2.list[16].offset = 0x1b0 +u.sfdir2.list[16].name = "file.17" +u.sfdir2.list[17].namelen = 7 +u.sfdir2.list[17].offset = 0x1c8 +u.sfdir2.list[17].name = "file.18" +u.sfdir2.list[18].namelen = 7 +u.sfdir2.list[18].offset = 0x1e0 +u.sfdir2.list[18].name = "file.19" +u.sfdir2.list[19].namelen = 7 +u.sfdir2.list[19].offset = 0x1f8 +u.sfdir2.list[19].name = "file.20" +u.sfdir2.list[20].namelen = 7 +u.sfdir2.list[20].offset = 0x210 +u.sfdir2.list[20].name = "file.21" +u.sfdir2.list[21].namelen = 7 +u.sfdir2.list[21].offset = 0x228 +u.sfdir2.list[21].name = "file.22" +u.sfdir2.list[22].namelen = 7 +u.sfdir2.list[22].offset = 0x240 +u.sfdir2.list[22].name = "file.23" +u.sfdir2.list[23].namelen = 7 +u.sfdir2.list[23].offset = 0x258 +u.sfdir2.list[23].name = "file.24" +u.sfdir2.list[24].namelen = 7 +u.sfdir2.list[24].offset = 0x270 +u.sfdir2.list[24].name = "file.25" +a.sfattr.hdr.totsize = 10 +a.sfattr.hdr.count = 1 +a.sfattr.list[0].namelen = 1 +a.sfattr.list[0].valuelen = 2 +a.sfattr.list[0].root = 0 +a.sfattr.list[0].secure = 0 +a.sfattr.list[0].name = "1" +a.sfattr.list[0].value = "\272\276" +================================= + +Try setting attr1 by db + +ATTR + +*** create EAs start 2 end 2 *** + + +================================= +ATTR +core.forkoff = 47 +u.sfdir2.hdr.count = 25 +u.sfdir2.hdr.i8count = 0 +u.sfdir2.list[0].namelen = 6 +u.sfdir2.list[0].offset = 0x30 +u.sfdir2.list[0].name = "file.1" +u.sfdir2.list[1].namelen = 6 +u.sfdir2.list[1].offset = 0x48 +u.sfdir2.list[1].name = "file.2" +u.sfdir2.list[2].namelen = 6 +u.sfdir2.list[2].offset = 0x60 +u.sfdir2.list[2].name = "file.3" +u.sfdir2.list[3].namelen = 6 +u.sfdir2.list[3].offset = 0x78 +u.sfdir2.list[3].name = "file.4" +u.sfdir2.list[4].namelen = 6 +u.sfdir2.list[4].offset = 0x90 +u.sfdir2.list[4].name = "file.5" +u.sfdir2.list[5].namelen = 6 +u.sfdir2.list[5].offset = 0xa8 +u.sfdir2.list[5].name = "file.6" +u.sfdir2.list[6].namelen = 6 +u.sfdir2.list[6].offset = 0xc0 +u.sfdir2.list[6].name = "file.7" +u.sfdir2.list[7].namelen = 6 +u.sfdir2.list[7].offset = 0xd8 +u.sfdir2.list[7].name = "file.8" +u.sfdir2.list[8].namelen = 6 +u.sfdir2.list[8].offset = 0xf0 +u.sfdir2.list[8].name = "file.9" +u.sfdir2.list[9].namelen = 7 +u.sfdir2.list[9].offset = 0x108 +u.sfdir2.list[9].name = "file.10" +u.sfdir2.list[10].namelen = 7 +u.sfdir2.list[10].offset = 0x120 +u.sfdir2.list[10].name = "file.11" +u.sfdir2.list[11].namelen = 7 +u.sfdir2.list[11].offset = 0x138 +u.sfdir2.list[11].name = "file.12" +u.sfdir2.list[12].namelen = 7 +u.sfdir2.list[12].offset = 0x150 +u.sfdir2.list[12].name = "file.13" +u.sfdir2.list[13].namelen = 7 +u.sfdir2.list[13].offset = 0x168 +u.sfdir2.list[13].name = "file.14" +u.sfdir2.list[14].namelen = 7 +u.sfdir2.list[14].offset = 0x180 +u.sfdir2.list[14].name = "file.15" +u.sfdir2.list[15].namelen = 7 +u.sfdir2.list[15].offset = 0x198 +u.sfdir2.list[15].name = "file.16" +u.sfdir2.list[16].namelen = 7 +u.sfdir2.list[16].offset = 0x1b0 +u.sfdir2.list[16].name = "file.17" +u.sfdir2.list[17].namelen = 7 +u.sfdir2.list[17].offset = 0x1c8 +u.sfdir2.list[17].name = "file.18" +u.sfdir2.list[18].namelen = 7 +u.sfdir2.list[18].offset = 0x1e0 +u.sfdir2.list[18].name = "file.19" +u.sfdir2.list[19].namelen = 7 +u.sfdir2.list[19].offset = 0x1f8 +u.sfdir2.list[19].name = "file.20" +u.sfdir2.list[20].namelen = 7 +u.sfdir2.list[20].offset = 0x210 +u.sfdir2.list[20].name = "file.21" +u.sfdir2.list[21].namelen = 7 +u.sfdir2.list[21].offset = 0x228 +u.sfdir2.list[21].name = "file.22" +u.sfdir2.list[22].namelen = 7 +u.sfdir2.list[22].offset = 0x240 +u.sfdir2.list[22].name = "file.23" +u.sfdir2.list[23].namelen = 7 +u.sfdir2.list[23].offset = 0x258 +u.sfdir2.list[23].name = "file.24" +u.sfdir2.list[24].namelen = 7 +u.sfdir2.list[24].offset = 0x270 +u.sfdir2.list[24].name = "file.25" +a.sfattr.hdr.totsize = 16 +a.sfattr.hdr.count = 2 +a.sfattr.list[0].namelen = 1 +a.sfattr.list[0].valuelen = 2 +a.sfattr.list[0].root = 0 +a.sfattr.list[0].secure = 0 +a.sfattr.list[0].name = "1" +a.sfattr.list[0].value = "\272\276" +a.sfattr.list[1].namelen = 1 +a.sfattr.list[1].valuelen = 2 +a.sfattr.list[1].root = 0 +a.sfattr.list[1].secure = 0 +a.sfattr.list[1].name = "2" +a.sfattr.list[1].value = "\272\276" +================================= =========================================================================== Index: xfstests/group =========================================================================== --- a/xfstests/group 2008-04-09 18:00:27.000000000 +1000 +++ b/xfstests/group 2008-04-09 19:28:53.924187450 +1000 @@ -273,3 +273,4 @@ filestreams dgc@sgi.com 183 rw other auto 184 metadata auto 185 dmapi auto +186 attr auto From owner-xfs@oss.sgi.com Wed Apr 9 01:17:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 01:17:39 -0700 (PDT) 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 m398HTXr029367 for ; Wed, 9 Apr 2008 01:17:30 -0700 X-ASG-Debug-ID: 1207729087-1854008f0000-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 F3CFA128A19C for ; Wed, 9 Apr 2008 01:18:07 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id VU2zqmLrnbRP2sgS for ; Wed, 09 Apr 2008 01:18:07 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JjVUu-0000no-71; Wed, 09 Apr 2008 08:17:36 +0000 Date: Wed, 9 Apr 2008 04:17:36 -0400 From: Christoph Hellwig To: Barry Naujok Cc: "xfs@oss.sgi.com" , xfs-dev X-ASG-Orig-Subj: Re: [REVIEW] cleanup - refactor xfs_dir2_leafn_lookup_int() Subject: Re: [REVIEW] cleanup - refactor xfs_dir2_leafn_lookup_int() Message-ID: <20080409081736.GA18976@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.17 (2007-11-01) 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: 1207729087 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.1, rules version 3.1.47272 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15307 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Wed, Apr 09, 2008 at 06:02:06PM +1000, Barry Naujok wrote: > + if (curbp) { > + /* For addname, giving back a free block. */ Given the function is only for addname anymore the first half of the comment doesn't make sense anymore. > + if (dep->namelen == args->namelen && memcmp(dep->name, > + args->name, args->namelen) == 0) { > + args->inumber = be64_to_cpu(dep->inumber); > + *indexp = index; > + state->extravalid = 1; > + state->extrablk.bp = curbp; > state->extrablk.blkno = curdb; > + state->extrablk.index = (int)((char *)dep - > + (char *)curbp->data); > state->extrablk.magic = XFS_DIR2_DATA_MAGIC; > + return XFS_ERROR(EEXIST); > } > } > /* > + * Didn't find a match. > + * If we are holding a buffer, give it back in case our caller > + * finds it useful. > + */ > + if (curbp) { > + /* Giving back a data block. */ > + state->extravalid = 1; > + state->extrablk.bp = curbp; > + state->extrablk.index = -1; > + state->extrablk.blkno = curdb; > + state->extrablk.magic = XFS_DIR2_DATA_MAGIC; Might be worth factoring these two out using a goto Otherwise the patch looks good. From owner-xfs@oss.sgi.com Wed Apr 9 01:47:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 01:47:26 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_65 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 m398lDk9001208 for ; Wed, 9 Apr 2008 01:47:15 -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 SAA29563; Wed, 9 Apr 2008 18:47:50 +1000 Date: Wed, 09 Apr 2008 18:49:29 +1000 To: "xfs@oss.sgi.com" , xfs-dev Subject: [REVIEW #2] cleanup - refactor xfs_dir2_leafn_lookup_int() From: "Barry Naujok" Organization: SGI Content-Type: multipart/mixed; boundary=----------pTyqiSRFmxcVjyw31j8o5M MIME-Version: 1.0 Message-ID: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15308 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs ------------pTyqiSRFmxcVjyw31j8o5M Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 Content-Transfer-Encoding: Quoted-Printable I've unified the state->extrablk info in the add and lookup paths and fixed a bug :) --- fs/xfs/xfs_dir2_node.c | 364=20=20 +++++++++++++++++++++++++++---------------------- 1 file changed, 205 insertions(+), 159 deletions(-) Index: kern_ci/fs/xfs/xfs_dir2_node.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_dir2_node.c +++ kern_ci/fs/xfs/xfs_dir2_node.c @@ -387,28 +387,26 @@ xfs_dir2_leafn_lasthash( } /* - * Look up a leaf entry in a node-format leaf block. - * If this is an addname then the extrablk in state is a freespace block, - * otherwise it's a data block. + * Look up a leaf entry for space to add a name in a node-format leaf=20= =20 block. + * The extrablk in state is a freespace block. */ -int -xfs_dir2_leafn_lookup_int( +STATIC int +xfs_dir2_leafn_lookup_for_addname( xfs_dabuf_t *bp, /* leaf buffer */ xfs_da_args_t *args, /* operation arguments */ int *indexp, /* out: leaf entry index */ xfs_da_state_t *state) /* state to fill in */ { - xfs_dabuf_t *curbp; /* current data/free buffer */ - xfs_dir2_db_t curdb; /* current data block number */ - xfs_dir2_db_t curfdb; /* current free block number */ - xfs_dir2_data_entry_t *dep; /* data block entry */ + xfs_dabuf_t *curbp =3D NULL; /* current data/free buffer */ + xfs_dir2_db_t curdb =3D -1; /* current data block number */ + xfs_dir2_db_t curfdb =3D -1; /* current free block number */ xfs_inode_t *dp; /* incore directory inode */ int error; /* error return value */ int fi; /* free entry index */ - xfs_dir2_free_t *free=3DNULL; /* free block structure */ + xfs_dir2_free_t *free =3D NULL; /* free block structure */ int index; /* leaf entry index */ xfs_dir2_leaf_t *leaf; /* leaf structure */ - int length=3D0; /* length of new data entry */ + int length; /* length of new data entry */ xfs_dir2_leaf_entry_t *lep; /* leaf entry */ xfs_mount_t *mp; /* filesystem mount point */ xfs_dir2_db_t newdb; /* new data block number */ @@ -431,33 +429,20 @@ xfs_dir2_leafn_lookup_int( /* * Do we have a buffer coming in? */ - if (state->extravalid) + if (state->extravalid) { + /* If so, it's a free block buffer, get the block number. */ curbp =3D state->extrablk.bp; - else - curbp =3D NULL; - /* - * For addname, it's a free block buffer, get the block number. - */ - if (args->addname) { - curfdb =3D curbp ? state->extrablk.blkno : -1; - curdb =3D -1; - length =3D xfs_dir2_data_entsize(args->namelen); - if ((free =3D (curbp ? curbp->data : NULL))) - ASSERT(be32_to_cpu(free->hdr.magic) =3D=3D XFS_DIR2_FREE_MAGIC); - } - /* - * For others, it's a data block buffer, get the block number. - */ - else { - curfdb =3D -1; - curdb =3D curbp ? state->extrablk.blkno : -1; + curfdb =3D state->extrablk.blkno; + free =3D curbp->data; + ASSERT(be32_to_cpu(free->hdr.magic) =3D=3D XFS_DIR2_FREE_MAGIC); } + length =3D xfs_dir2_data_entsize(args->namelen); /* * Loop over leaf entries with the right hash value. */ - for (lep =3D &leaf->ents[index]; - index < be16_to_cpu(leaf->hdr.count) && be32_to_cpu(lep->hashval)=20= =20 =3D=3D args->hashval; - lep++, index++) { + for (lep =3D &leaf->ents[index]; index < be16_to_cpu(leaf->hdr.count) && + be32_to_cpu(lep->hashval) =3D=3D args->hashval; + lep++, index++) { /* * Skip stale leaf entries. */ @@ -471,158 +456,218 @@ xfs_dir2_leafn_lookup_int( * For addname, we're looking for a place to put the new entry. * We want to use a data block with an entry of equal * hash value to ours if there is one with room. + * + * If this block isn't the data block we already have + * in hand, take a look at it. */ - if (args->addname) { + if (newdb !=3D curdb) { + curdb =3D newdb; /* - * If this block isn't the data block we already have - * in hand, take a look at it. + * Convert the data block to the free block + * holding its freespace information. */ - if (newdb !=3D curdb) { - curdb =3D newdb; - /* - * Convert the data block to the free block - * holding its freespace information. - */ - newfdb =3D xfs_dir2_db_to_fdb(mp, newdb); - /* - * If it's not the one we have in hand, - * read it in. - */ - if (newfdb !=3D curfdb) { - /* - * If we had one before, drop it. - */ - if (curbp) - xfs_da_brelse(tp, curbp); - /* - * Read the free block. - */ - if ((error =3D xfs_da_read_buf(tp, dp, - xfs_dir2_db_to_da(mp, - newfdb), - -1, &curbp, - XFS_DATA_FORK))) { - return error; - } - free =3D curbp->data; - ASSERT(be32_to_cpu(free->hdr.magic) =3D=3D - XFS_DIR2_FREE_MAGIC); - ASSERT((be32_to_cpu(free->hdr.firstdb) % - XFS_DIR2_MAX_FREE_BESTS(mp)) =3D=3D - 0); - ASSERT(be32_to_cpu(free->hdr.firstdb) <=3D curdb); - ASSERT(curdb < - be32_to_cpu(free->hdr.firstdb) + - be32_to_cpu(free->hdr.nvalid)); - } - /* - * Get the index for our entry. - */ - fi =3D xfs_dir2_db_to_fdindex(mp, curdb); - /* - * If it has room, return it. - */ - if (unlikely(be16_to_cpu(free->bests[fi]) =3D=3D NULLDATAOFF)) { - XFS_ERROR_REPORT("xfs_dir2_leafn_lookup_int", - XFS_ERRLEVEL_LOW, mp); - if (curfdb !=3D newfdb) - xfs_da_brelse(tp, curbp); - return XFS_ERROR(EFSCORRUPTED); - } - curfdb =3D newfdb; - if (be16_to_cpu(free->bests[fi]) >=3D length) { - *indexp =3D index; - state->extravalid =3D 1; - state->extrablk.bp =3D curbp; - state->extrablk.blkno =3D curfdb; - state->extrablk.index =3D fi; - state->extrablk.magic =3D - XFS_DIR2_FREE_MAGIC; - ASSERT(args->oknoent); - return XFS_ERROR(ENOENT); - } - } - } - /* - * Not adding a new entry, so we really want to find - * the name given to us. - */ - else { + newfdb =3D xfs_dir2_db_to_fdb(mp, newdb); /* - * If it's a different data block, go get it. + * If it's not the one we have in hand, read it in. */ - if (newdb !=3D curdb) { + if (newfdb !=3D curfdb) { /* - * If we had a block before, drop it. + * If we had one before, drop it. */ if (curbp) xfs_da_brelse(tp, curbp); /* - * Read the data block. + * Read the free block. */ - if ((error =3D - xfs_da_read_buf(tp, dp, - xfs_dir2_db_to_da(mp, newdb), -1, - &curbp, XFS_DATA_FORK))) { + error =3D xfs_da_read_buf(tp, dp, + xfs_dir2_db_to_da(mp, newfdb), + -1, &curbp, XFS_DATA_FORK); + if (error) return error; - } - xfs_dir2_data_check(dp, curbp); - curdb =3D newdb; + free =3D curbp->data; + ASSERT(be32_to_cpu(free->hdr.magic) =3D=3D + XFS_DIR2_FREE_MAGIC); + ASSERT((be32_to_cpu(free->hdr.firstdb) % + XFS_DIR2_MAX_FREE_BESTS(mp)) =3D=3D 0); + ASSERT(be32_to_cpu(free->hdr.firstdb) <=3D curdb); + ASSERT(curdb < be32_to_cpu(free->hdr.firstdb) + + be32_to_cpu(free->hdr.nvalid)); } /* - * Point to the data entry. + * Get the index for our entry. + */ + fi =3D xfs_dir2_db_to_fdindex(mp, curdb); + /* + * If it has room, return it. */ - dep =3D (xfs_dir2_data_entry_t *) - ((char *)curbp->data + - xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); - /* - * Compare the entry, return it if it matches. - */ - if (dep->namelen =3D=3D args->namelen && - dep->name[0] =3D=3D args->name[0] && - memcmp(dep->name, args->name, args->namelen) =3D=3D 0) { - args->inumber =3D be64_to_cpu(dep->inumber); - *indexp =3D index; - state->extravalid =3D 1; - state->extrablk.bp =3D curbp; - state->extrablk.blkno =3D curdb; - state->extrablk.index =3D - (int)((char *)dep - - (char *)curbp->data); - state->extrablk.magic =3D XFS_DIR2_DATA_MAGIC; - return XFS_ERROR(EEXIST); + if (unlikely(be16_to_cpu(free->bests[fi]) =3D=3D NULLDATAOFF)) { + XFS_ERROR_REPORT("xfs_dir2_leafn_lookup_int", + XFS_ERRLEVEL_LOW, mp); + if (curfdb !=3D newfdb) + xfs_da_brelse(tp, curbp); + return XFS_ERROR(EFSCORRUPTED); } + curfdb =3D newfdb; + if (be16_to_cpu(free->bests[fi]) >=3D length) + goto out; } } + /* Didn't find any space */ + fi =3D -1; +out: + ASSERT(args->oknoent); + if (curbp) { + /* Giving back a free block. */ + state->extravalid =3D 1; + state->extrablk.bp =3D curbp; + state->extrablk.index =3D fi; + state->extrablk.blkno =3D curfdb; + state->extrablk.magic =3D XFS_DIR2_FREE_MAGIC; + } else { + state->extravalid =3D 0; + } /* - * Didn't find a match. - * If we are holding a buffer, give it back in case our caller - * finds it useful. + * Return the index, that will be the insertion point. */ - if ((state->extravalid =3D (curbp !=3D NULL))) { - state->extrablk.bp =3D curbp; - state->extrablk.index =3D -1; + *indexp =3D index; + return XFS_ERROR(ENOENT); +} + +/* + * Look up a leaf entry in a node-format leaf block. + * The extrablk in state a data block. + */ +STATIC int +xfs_dir2_leafn_lookup_for_entry( + xfs_dabuf_t *bp, /* leaf buffer */ + xfs_da_args_t *args, /* operation arguments */ + int *indexp, /* out: leaf entry index */ + xfs_da_state_t *state) /* state to fill in */ +{ + xfs_dabuf_t *curbp =3D NULL; /* current data/free buffer */ + xfs_dir2_db_t curdb =3D -1; /* current data block number */ + xfs_dir2_data_entry_t *dep; /* data block entry */ + xfs_inode_t *dp; /* incore directory inode */ + int error; /* error return value */ + int di; /* data entry index */ + int index; /* leaf entry index */ + xfs_dir2_leaf_t *leaf; /* leaf structure */ + xfs_dir2_leaf_entry_t *lep; /* leaf entry */ + xfs_mount_t *mp; /* filesystem mount point */ + xfs_dir2_db_t newdb; /* new data block number */ + xfs_trans_t *tp; /* transaction pointer */ + + dp =3D args->dp; + tp =3D args->trans; + mp =3D dp->i_mount; + leaf =3D bp->data; + ASSERT(be16_to_cpu(leaf->hdr.info.magic) =3D=3D XFS_DIR2_LEAFN_MAGIC); +#ifdef __KERNEL__ + ASSERT(be16_to_cpu(leaf->hdr.count) > 0); +#endif + xfs_dir2_leafn_check(dp, bp); + /* + * Look up the hash value in the leaf entries. + */ + index =3D xfs_dir2_leaf_search_hash(args, bp); + /* + * Do we have a buffer coming in? + */ + if (state->extravalid) { + curbp =3D state->extrablk.bp; + curdb =3D state->extrablk.blkno; + } + /* + * Loop over leaf entries with the right hash value. + */ + for (lep =3D &leaf->ents[index]; index < be16_to_cpu(leaf->hdr.count) && + be32_to_cpu(lep->hashval) =3D=3D args->hashval; + lep++, index++) { /* - * For addname, giving back a free block. + * Skip stale leaf entries. */ - if (args->addname) { - state->extrablk.blkno =3D curfdb; - state->extrablk.magic =3D XFS_DIR2_FREE_MAGIC; - } + if (be32_to_cpu(lep->address) =3D=3D XFS_DIR2_NULL_DATAPTR) + continue; /* - * For other callers, giving back a data block. + * Pull the data block number from the entry. */ - else { - state->extrablk.blkno =3D curdb; - state->extrablk.magic =3D XFS_DIR2_DATA_MAGIC; + newdb =3D xfs_dir2_dataptr_to_db(mp, be32_to_cpu(lep->address)); + /* + * Not adding a new entry, so we really want to find + * the name given to us. + * + * If it's a different data block, go get it. + */ + if (newdb !=3D curdb) { + /* + * If we had a block before, drop it. + */ + if (curbp) + xfs_da_brelse(tp, curbp); + /* + * Read the data block. + */ + error =3D xfs_da_read_buf(tp, dp, xfs_dir2_db_to_da(mp, + newdb), -1, &curbp, XFS_DATA_FORK); + if (error) + return error; + xfs_dir2_data_check(dp, curbp); + curdb =3D newdb; } + /* + * Point to the data entry. + */ + dep =3D (xfs_dir2_data_entry_t *)((char *)curbp->data + + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); + /* + * Compare the entry, return it if it matches. + */ + if (dep->namelen =3D=3D args->namelen && memcmp(dep->name, + args->name, args->namelen) =3D=3D 0) { + args->inumber =3D be64_to_cpu(dep->inumber); + di =3D (int)((char *)dep - (char *)curbp->data); + error =3D EEXIST; + goto out; + } + } + /* Didn't find a match. */ + error =3D ENOENT; + di =3D -1; + ASSERT(index =3D=3D be16_to_cpu(leaf->hdr.count) || args->oknoent); +out: + if (curbp) { + /* Giving back a data block. */ + state->extravalid =3D 1; + state->extrablk.bp =3D curbp; + state->extrablk.index =3D di; + state->extrablk.blkno =3D curdb; + state->extrablk.magic =3D XFS_DIR2_DATA_MAGIC; + } else { + state->extravalid =3D 0; } /* - * Return the final index, that will be the insertion point. + * Return the index, that will be the insertion point. */ *indexp =3D index; - ASSERT(index =3D=3D be16_to_cpu(leaf->hdr.count) || args->oknoent); - return XFS_ERROR(ENOENT); + return XFS_ERROR(error); +} + +/* + * Look up a leaf entry in a node-format leaf block. + * If this is an addname then the extrablk in state is a freespace block, + * otherwise it's a data block. + */ +int +xfs_dir2_leafn_lookup_int( + xfs_dabuf_t *bp, /* leaf buffer */ + xfs_da_args_t *args, /* operation arguments */ + int *indexp, /* out: leaf entry index */ + xfs_da_state_t *state) /* state to fill in */ +{ + if (args->addname) + return xfs_dir2_leafn_lookup_for_addname(bp, args, indexp, + state); + return xfs_dir2_leafn_lookup_for_entry(bp, args, indexp, state); } /* @@ -823,9 +868,10 @@ xfs_dir2_leafn_rebalance( */ if (!state->inleaf) blk2->index =3D blk1->index - be16_to_cpu(leaf1->hdr.count); -=09 - /* - * Finally sanity check just to make sure we are not returning a=20=20 negative index + + /* + * Finally sanity check just to make sure we are not returning a + * negative index */ if(blk2->index < 0) { state->inleaf =3D 1; ------------pTyqiSRFmxcVjyw31j8o5M Content-Disposition: attachment; filename=refactor_leafn_lookup.patch Content-Type: text/x-patch; name=refactor_leafn_lookup.patch Content-Transfer-Encoding: Quoted-Printable The next step for case-insensitive support is to avoid polution of the dentry cache with entries pointing to the same inode, but with names that only differ in case. =20 To perform this, we will need to pass the actual filename that matched backup to the XFS/VFS interface and make sure the dentry cache only contains entries with the actual case-sensitive name. =20 But, before we can do this, it was found that the directory lookup code with multiple leaves was shared with code adding a name to that directory. Most of xfs_dir2_leafn_lookup_int() could be broken into two functions determined by if (args->addname) { } else { }. =20 For the following patch, only the lookup case needs to handle the various xfs_nameops, with case-insensitive match handling in addition to returning the actual name. =20 So, this patch separates xfs_dir2_leafn_lookup_int() into xfs_dir2_leafn_lookup_for_addname() and xfs_dir2_leafn_lookup_for_entry(). =20 xfs_dir2_leafn_lookup_for_addname() iterates through the data blocks looking for a suitable empty space to insert the name while xfs_dir2_leafn_lookup_for_entry() uses the xfs_nameops to find the entry. =20 xfs_dir2_leafn_lookup_for_entry() path also retains the data block where the first case-insensitive match occured as in the next patch which will return the name, the name is obtained from that block. =20 Signed-off-by: Barry Naujok =20 --- fs/xfs/xfs_dir2_node.c | 364 +++++++++++++++++++++++++++-----------------= ----- 1 file changed, 205 insertions(+), 159 deletions(-) =20 Index: kern_ci/fs/xfs/xfs_dir2_node.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_dir2_node.c +++ kern_ci/fs/xfs/xfs_dir2_node.c @@ -387,28 +387,26 @@ xfs_dir2_leafn_lasthash( } =20 /* - * Look up a leaf entry in a node-format leaf block. - * If this is an addname then the extrablk in state is a freespace block, - * otherwise it's a data block. + * Look up a leaf entry for space to add a name in a node-format leaf bloc= k. + * The extrablk in state is a freespace block. */ -int -xfs_dir2_leafn_lookup_int( +STATIC int +xfs_dir2_leafn_lookup_for_addname( xfs_dabuf_t *bp, /* leaf buffer */ xfs_da_args_t *args, /* operation arguments */ int *indexp, /* out: leaf entry index */ xfs_da_state_t *state) /* state to fill in */ { - xfs_dabuf_t *curbp; /* current data/free buffer */ - xfs_dir2_db_t curdb; /* current data block number */ - xfs_dir2_db_t curfdb; /* current free block number */ - xfs_dir2_data_entry_t *dep; /* data block entry */ + xfs_dabuf_t *curbp =3D NULL; /* current data/free buffer */ + xfs_dir2_db_t curdb =3D -1; /* current data block number */ + xfs_dir2_db_t curfdb =3D -1; /* current free block number */ xfs_inode_t *dp; /* incore directory inode */ int error; /* error return value */ int fi; /* free entry index */ - xfs_dir2_free_t *free=3DNULL; /* free block structure */ + xfs_dir2_free_t *free =3D NULL; /* free block structure */ int index; /* leaf entry index */ xfs_dir2_leaf_t *leaf; /* leaf structure */ - int length=3D0; /* length of new data entry */ + int length; /* length of new data entry */ xfs_dir2_leaf_entry_t *lep; /* leaf entry */ xfs_mount_t *mp; /* filesystem mount point */ xfs_dir2_db_t newdb; /* new data block number */ @@ -431,33 +429,20 @@ xfs_dir2_leafn_lookup_int( /* * Do we have a buffer coming in? */ - if (state->extravalid) + if (state->extravalid) { + /* If so, it's a free block buffer, get the block number. */ curbp =3D state->extrablk.bp; - else - curbp =3D NULL; - /* - * For addname, it's a free block buffer, get the block number. - */ - if (args->addname) { - curfdb =3D curbp ? state->extrablk.blkno : -1; - curdb =3D -1; - length =3D xfs_dir2_data_entsize(args->namelen); - if ((free =3D (curbp ? curbp->data : NULL))) - ASSERT(be32_to_cpu(free->hdr.magic) =3D=3D XFS_DIR2_FREE_MAGIC); - } - /* - * For others, it's a data block buffer, get the block number. - */ - else { - curfdb =3D -1; - curdb =3D curbp ? state->extrablk.blkno : -1; + curfdb =3D state->extrablk.blkno; + free =3D curbp->data; + ASSERT(be32_to_cpu(free->hdr.magic) =3D=3D XFS_DIR2_FREE_MAGIC); } + length =3D xfs_dir2_data_entsize(args->namelen); /* * Loop over leaf entries with the right hash value. */ - for (lep =3D &leaf->ents[index]; - index < be16_to_cpu(leaf->hdr.count) && be32_to_cpu(lep->hashval) = =3D=3D args->hashval; - lep++, index++) { + for (lep =3D &leaf->ents[index]; index < be16_to_cpu(leaf->hdr.count) && + be32_to_cpu(lep->hashval) =3D=3D args->hashval; + lep++, index++) { /* * Skip stale leaf entries. */ @@ -471,158 +456,218 @@ xfs_dir2_leafn_lookup_int( * For addname, we're looking for a place to put the new entry. * We want to use a data block with an entry of equal * hash value to ours if there is one with room. + * + * If this block isn't the data block we already have + * in hand, take a look at it. */ - if (args->addname) { + if (newdb !=3D curdb) { + curdb =3D newdb; /* - * If this block isn't the data block we already have - * in hand, take a look at it. + * Convert the data block to the free block + * holding its freespace information. */ - if (newdb !=3D curdb) { - curdb =3D newdb; - /* - * Convert the data block to the free block - * holding its freespace information. - */ - newfdb =3D xfs_dir2_db_to_fdb(mp, newdb); - /* - * If it's not the one we have in hand, - * read it in. - */ - if (newfdb !=3D curfdb) { - /* - * If we had one before, drop it. - */ - if (curbp) - xfs_da_brelse(tp, curbp); - /* - * Read the free block. - */ - if ((error =3D xfs_da_read_buf(tp, dp, - xfs_dir2_db_to_da(mp, - newfdb), - -1, &curbp, - XFS_DATA_FORK))) { - return error; - } - free =3D curbp->data; - ASSERT(be32_to_cpu(free->hdr.magic) =3D=3D - XFS_DIR2_FREE_MAGIC); - ASSERT((be32_to_cpu(free->hdr.firstdb) % - XFS_DIR2_MAX_FREE_BESTS(mp)) =3D=3D - 0); - ASSERT(be32_to_cpu(free->hdr.firstdb) <=3D curdb); - ASSERT(curdb < - be32_to_cpu(free->hdr.firstdb) + - be32_to_cpu(free->hdr.nvalid)); - } - /* - * Get the index for our entry. - */ - fi =3D xfs_dir2_db_to_fdindex(mp, curdb); - /* - * If it has room, return it. - */ - if (unlikely(be16_to_cpu(free->bests[fi]) =3D=3D NULLDATAOFF)) { - XFS_ERROR_REPORT("xfs_dir2_leafn_lookup_int", - XFS_ERRLEVEL_LOW, mp); - if (curfdb !=3D newfdb) - xfs_da_brelse(tp, curbp); - return XFS_ERROR(EFSCORRUPTED); - } - curfdb =3D newfdb; - if (be16_to_cpu(free->bests[fi]) >=3D length) { - *indexp =3D index; - state->extravalid =3D 1; - state->extrablk.bp =3D curbp; - state->extrablk.blkno =3D curfdb; - state->extrablk.index =3D fi; - state->extrablk.magic =3D - XFS_DIR2_FREE_MAGIC; - ASSERT(args->oknoent); - return XFS_ERROR(ENOENT); - } - } - } - /* - * Not adding a new entry, so we really want to find - * the name given to us. - */ - else { + newfdb =3D xfs_dir2_db_to_fdb(mp, newdb); /* - * If it's a different data block, go get it. + * If it's not the one we have in hand, read it in. */ - if (newdb !=3D curdb) { + if (newfdb !=3D curfdb) { /* - * If we had a block before, drop it. + * If we had one before, drop it. */ if (curbp) xfs_da_brelse(tp, curbp); /* - * Read the data block. + * Read the free block. */ - if ((error =3D - xfs_da_read_buf(tp, dp, - xfs_dir2_db_to_da(mp, newdb), -1, - &curbp, XFS_DATA_FORK))) { + error =3D xfs_da_read_buf(tp, dp, + xfs_dir2_db_to_da(mp, newfdb), + -1, &curbp, XFS_DATA_FORK); + if (error) return error; - } - xfs_dir2_data_check(dp, curbp); - curdb =3D newdb; + free =3D curbp->data; + ASSERT(be32_to_cpu(free->hdr.magic) =3D=3D + XFS_DIR2_FREE_MAGIC); + ASSERT((be32_to_cpu(free->hdr.firstdb) % + XFS_DIR2_MAX_FREE_BESTS(mp)) =3D=3D 0); + ASSERT(be32_to_cpu(free->hdr.firstdb) <=3D curdb); + ASSERT(curdb < be32_to_cpu(free->hdr.firstdb) + + be32_to_cpu(free->hdr.nvalid)); } /* - * Point to the data entry. + * Get the index for our entry. + */ + fi =3D xfs_dir2_db_to_fdindex(mp, curdb); + /* + * If it has room, return it. */ - dep =3D (xfs_dir2_data_entry_t *) - ((char *)curbp->data + - xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); - /* - * Compare the entry, return it if it matches. - */ - if (dep->namelen =3D=3D args->namelen && - dep->name[0] =3D=3D args->name[0] && - memcmp(dep->name, args->name, args->namelen) =3D=3D 0) { - args->inumber =3D be64_to_cpu(dep->inumber); - *indexp =3D index; - state->extravalid =3D 1; - state->extrablk.bp =3D curbp; - state->extrablk.blkno =3D curdb; - state->extrablk.index =3D - (int)((char *)dep - - (char *)curbp->data); - state->extrablk.magic =3D XFS_DIR2_DATA_MAGIC; - return XFS_ERROR(EEXIST); + if (unlikely(be16_to_cpu(free->bests[fi]) =3D=3D NULLDATAOFF)) { + XFS_ERROR_REPORT("xfs_dir2_leafn_lookup_int", + XFS_ERRLEVEL_LOW, mp); + if (curfdb !=3D newfdb) + xfs_da_brelse(tp, curbp); + return XFS_ERROR(EFSCORRUPTED); } + curfdb =3D newfdb; + if (be16_to_cpu(free->bests[fi]) >=3D length) + goto out; } } + /* Didn't find any space */ + fi =3D -1; +out: + ASSERT(args->oknoent); + if (curbp) { + /* Giving back a free block. */ + state->extravalid =3D 1; + state->extrablk.bp =3D curbp; + state->extrablk.index =3D fi; + state->extrablk.blkno =3D curfdb; + state->extrablk.magic =3D XFS_DIR2_FREE_MAGIC; + } else { + state->extravalid =3D 0; + } /* - * Didn't find a match. - * If we are holding a buffer, give it back in case our caller - * finds it useful. + * Return the index, that will be the insertion point. */ - if ((state->extravalid =3D (curbp !=3D NULL))) { - state->extrablk.bp =3D curbp; - state->extrablk.index =3D -1; + *indexp =3D index; + return XFS_ERROR(ENOENT); +} + +/* + * Look up a leaf entry in a node-format leaf block. + * The extrablk in state a data block. + */ +STATIC int +xfs_dir2_leafn_lookup_for_entry( + xfs_dabuf_t *bp, /* leaf buffer */ + xfs_da_args_t *args, /* operation arguments */ + int *indexp, /* out: leaf entry index */ + xfs_da_state_t *state) /* state to fill in */ +{ + xfs_dabuf_t *curbp =3D NULL; /* current data/free buffer */ + xfs_dir2_db_t curdb =3D -1; /* current data block number */ + xfs_dir2_data_entry_t *dep; /* data block entry */ + xfs_inode_t *dp; /* incore directory inode */ + int error; /* error return value */ + int di; /* data entry index */ + int index; /* leaf entry index */ + xfs_dir2_leaf_t *leaf; /* leaf structure */ + xfs_dir2_leaf_entry_t *lep; /* leaf entry */ + xfs_mount_t *mp; /* filesystem mount point */ + xfs_dir2_db_t newdb; /* new data block number */ + xfs_trans_t *tp; /* transaction pointer */ + + dp =3D args->dp; + tp =3D args->trans; + mp =3D dp->i_mount; + leaf =3D bp->data; + ASSERT(be16_to_cpu(leaf->hdr.info.magic) =3D=3D XFS_DIR2_LEAFN_MAGIC); +#ifdef __KERNEL__ + ASSERT(be16_to_cpu(leaf->hdr.count) > 0); +#endif + xfs_dir2_leafn_check(dp, bp); + /* + * Look up the hash value in the leaf entries. + */ + index =3D xfs_dir2_leaf_search_hash(args, bp); + /* + * Do we have a buffer coming in? + */ + if (state->extravalid) { + curbp =3D state->extrablk.bp; + curdb =3D state->extrablk.blkno; + } + /* + * Loop over leaf entries with the right hash value. + */ + for (lep =3D &leaf->ents[index]; index < be16_to_cpu(leaf->hdr.count) && + be32_to_cpu(lep->hashval) =3D=3D args->hashval; + lep++, index++) { /* - * For addname, giving back a free block. + * Skip stale leaf entries. */ - if (args->addname) { - state->extrablk.blkno =3D curfdb; - state->extrablk.magic =3D XFS_DIR2_FREE_MAGIC; - } + if (be32_to_cpu(lep->address) =3D=3D XFS_DIR2_NULL_DATAPTR) + continue; /* - * For other callers, giving back a data block. + * Pull the data block number from the entry. */ - else { - state->extrablk.blkno =3D curdb; - state->extrablk.magic =3D XFS_DIR2_DATA_MAGIC; + newdb =3D xfs_dir2_dataptr_to_db(mp, be32_to_cpu(lep->address)); + /* + * Not adding a new entry, so we really want to find + * the name given to us. + * + * If it's a different data block, go get it. + */ + if (newdb !=3D curdb) { + /* + * If we had a block before, drop it. + */ + if (curbp) + xfs_da_brelse(tp, curbp); + /* + * Read the data block. + */ + error =3D xfs_da_read_buf(tp, dp, xfs_dir2_db_to_da(mp, + newdb), -1, &curbp, XFS_DATA_FORK); + if (error) + return error; + xfs_dir2_data_check(dp, curbp); + curdb =3D newdb; } + /* + * Point to the data entry. + */ + dep =3D (xfs_dir2_data_entry_t *)((char *)curbp->data + + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); + /* + * Compare the entry, return it if it matches. + */ + if (dep->namelen =3D=3D args->namelen && memcmp(dep->name, + args->name, args->namelen) =3D=3D 0) { + args->inumber =3D be64_to_cpu(dep->inumber); + di =3D (int)((char *)dep - (char *)curbp->data); + error =3D EEXIST; + goto out; + } + } + /* Didn't find a match. */ + error =3D ENOENT; + di =3D -1; + ASSERT(index =3D=3D be16_to_cpu(leaf->hdr.count) || args->oknoent); +out: + if (curbp) { + /* Giving back a data block. */ + state->extravalid =3D 1; + state->extrablk.bp =3D curbp; + state->extrablk.index =3D di; + state->extrablk.blkno =3D curdb; + state->extrablk.magic =3D XFS_DIR2_DATA_MAGIC; + } else { + state->extravalid =3D 0; } /* - * Return the final index, that will be the insertion point. + * Return the index, that will be the insertion point. */ *indexp =3D index; - ASSERT(index =3D=3D be16_to_cpu(leaf->hdr.count) || args->oknoent); - return XFS_ERROR(ENOENT); + return XFS_ERROR(error); +} + +/* + * Look up a leaf entry in a node-format leaf block. + * If this is an addname then the extrablk in state is a freespace block, + * otherwise it's a data block. + */ +int +xfs_dir2_leafn_lookup_int( + xfs_dabuf_t *bp, /* leaf buffer */ + xfs_da_args_t *args, /* operation arguments */ + int *indexp, /* out: leaf entry index */ + xfs_da_state_t *state) /* state to fill in */ +{ + if (args->addname) + return xfs_dir2_leafn_lookup_for_addname(bp, args, indexp, + state); + return xfs_dir2_leafn_lookup_for_entry(bp, args, indexp, state); } =20 /* @@ -823,9 +868,10 @@ xfs_dir2_leafn_rebalance( */ if (!state->inleaf) blk2->index =3D blk1->index - be16_to_cpu(leaf1->hdr.count); -=09 - /*=20 - * Finally sanity check just to make sure we are not returning a negative= index=20 + + /* + * Finally sanity check just to make sure we are not returning a + * negative index */ if(blk2->index < 0) { state->inleaf =3D 1; ------------pTyqiSRFmxcVjyw31j8o5M-- From owner-xfs@oss.sgi.com Wed Apr 9 01:53:41 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 01:53:48 -0700 (PDT) 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 m398rda0002409 for ; Wed, 9 Apr 2008 01:53:41 -0700 X-ASG-Debug-ID: 1207731256-15a701e30000-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 E522276914A; Wed, 9 Apr 2008 01:54:17 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id JC9CDhcMg3LOAXvG; Wed, 09 Apr 2008 01:54:17 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JjW4O-0005wc-JQ; Wed, 09 Apr 2008 08:54:16 +0000 Date: Wed, 9 Apr 2008 04:54:16 -0400 From: Christoph Hellwig To: Barry Naujok Cc: "xfs@oss.sgi.com" , xfs-dev X-ASG-Orig-Subj: Re: [REVIEW #2] cleanup - refactor xfs_dir2_leafn_lookup_int() Subject: Re: [REVIEW #2] cleanup - refactor xfs_dir2_leafn_lookup_int() Message-ID: <20080409085416.GA10511@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.17 (2007-11-01) 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: 1207731257 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.1, rules version 3.1.47275 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15309 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Wed, Apr 09, 2008 at 06:49:29PM +1000, Barry Naujok wrote: > I've unified the state->extrablk info in the add and lookup paths > and fixed a bug :) Looks good. From owner-xfs@oss.sgi.com Wed Apr 9 03:28:36 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 03:28:44 -0700 (PDT) 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.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_45 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 m39ASZlX016559 for ; Wed, 9 Apr 2008 03:28:36 -0700 X-ASG-Debug-ID: 1207736951-552e02e20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from lucidpixels.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2CB21107B126 for ; Wed, 9 Apr 2008 03:29:11 -0700 (PDT) Received: from lucidpixels.com (lucidpixels.com [75.144.35.66]) by cuda.sgi.com with ESMTP id kNUgH1Cancpb2D1Y for ; Wed, 09 Apr 2008 03:29:11 -0700 (PDT) Received: by lucidpixels.com (Postfix, from userid 1001) id 469CA1C000266; Wed, 9 Apr 2008 06:28:39 -0400 (EDT) Date: Wed, 9 Apr 2008 06:28:39 -0400 (EDT) From: Justin Piszcz To: Barry Naujok cc: Jeffrey Sandel , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Lost+found Subject: Re: Lost+found In-Reply-To: Message-ID: References: <1207632033.11530.10.camel@localhost.localdomain> User-Agent: Alpine 1.10 (DEB 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Barracuda-Connect: lucidpixels.com[75.144.35.66] X-Barracuda-Start-Time: 1207736954 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.1, rules version 3.1.47280 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15310 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jpiszcz@lucidpixels.com Precedence: bulk X-list: xfs On Wed, 9 Apr 2008, Barry Naujok wrote: > On Tue, 08 Apr 2008 15:20:33 +1000, Jeffrey Sandel > wrote: > >> Recently I ran xfs_repair due to a firmware upgrade on an unmounted >> disk. The repair recovered the data but moved it to the lost+found >> directory. >> >> How do I recover file names and ownership? > > The only real options you have AFAIK is the file command to try and identify > what type of file it is and just manually inspecting the files. > > Then, you might be able to derive its filename and where it came from. > > Regards, > Barry. > Is there any chance this process could ever be improved so that the files are restored back to their original locations or there is something that keeps track of where they were located? Justin. From owner-xfs@oss.sgi.com Wed Apr 9 06:10:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 06:10:45 -0700 (PDT) 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.0 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 m39DAbdV013188 for ; Wed, 9 Apr 2008 06:10:38 -0700 X-ASG-Debug-ID: 1207746675-54f8024b0000-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 5213876AB55 for ; Wed, 9 Apr 2008 06:11:15 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 8a5YcZdmRB2AkJGI for ; Wed, 09 Apr 2008 06:11:15 -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 57E311800F1DD; Wed, 9 Apr 2008 08:11:14 -0500 (CDT) Message-ID: <47FCC071.40201@sandeen.net> Date: Wed, 09 Apr 2008 08:11:13 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Justin Piszcz CC: Barry Naujok , Jeffrey Sandel , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Lost+found Subject: Re: Lost+found References: <1207632033.11530.10.camel@localhost.localdomain> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1207746676 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.1, rules version 3.1.47290 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15311 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Justin Piszcz wrote: > > On Wed, 9 Apr 2008, Barry Naujok wrote: > >> On Tue, 08 Apr 2008 15:20:33 +1000, Jeffrey Sandel >> wrote: >> >>> Recently I ran xfs_repair due to a firmware upgrade on an unmounted >>> disk. The repair recovered the data but moved it to the lost+found >>> directory. >>> >>> How do I recover file names and ownership? >> The only real options you have AFAIK is the file command to try and identify >> what type of file it is and just manually inspecting the files. >> >> Then, you might be able to derive its filename and where it came from. >> >> Regards, >> Barry. >> > > Is there any chance this process could ever be improved so that the files > are restored back to their original locations or there is something that > keeps track of where they were located? The whole reason they're in lost+found is because they are "orphaned" - allocated & in use but not referenced by any directory... so the best xfs_repair can do is rename to lost+found with the inode number. Crosses my mind that one could probably write a generic tool which could work with a package manager db to check file md5sums in /lost+found, if the files happen to be system files installed via a package.... but if they're files from your homedir or whatnot, it's tougher. -Eric From owner-xfs@oss.sgi.com Wed Apr 9 06:29:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 06:29:21 -0700 (PDT) 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_45 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 m39DTCdj017000 for ; Wed, 9 Apr 2008 06:29:14 -0700 X-ASG-Debug-ID: 1207747790-626103c80000-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 3F90F107BA41; Wed, 9 Apr 2008 06:29:50 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id gK8izYb9s0nDCWMV; Wed, 09 Apr 2008 06:29:50 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JjaMz-0006a8-Jb; Wed, 09 Apr 2008 13:29:45 +0000 Date: Wed, 9 Apr 2008 09:29:45 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: Justin Piszcz , Barry Naujok , Jeffrey Sandel , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Lost+found Subject: Re: Lost+found Message-ID: <20080409132945.GA25114@infradead.org> References: <1207632033.11530.10.camel@localhost.localdomain> <47FCC071.40201@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <47FCC071.40201@sandeen.net> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207747791 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.1, rules version 3.1.47291 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15312 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Wed, Apr 09, 2008 at 08:11:13AM -0500, Eric Sandeen wrote: > The whole reason they're in lost+found is because they are "orphaned" - > allocated & in use but not referenced by any directory... so the best > xfs_repair can do is rename to lost+found with the inode number. At least until we get parent pointers. Niv, any updates? From owner-xfs@oss.sgi.com Wed Apr 9 08:19:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 08:19:44 -0700 (PDT) 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.5 required=5.0 tests=AWL,BAYES_00, SUBJECT_FUZZY_TION 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 m39FJb10004332 for ; Wed, 9 Apr 2008 08:19:38 -0700 X-ASG-Debug-ID: 1207754415-34e0026f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from an-out-0708.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A998776B93C for ; Wed, 9 Apr 2008 08:20:15 -0700 (PDT) Received: from an-out-0708.google.com (an-out-0708.google.com [209.85.132.245]) by cuda.sgi.com with ESMTP id RFA8LpO6GqJRtMqy for ; Wed, 09 Apr 2008 08:20:15 -0700 (PDT) Received: by an-out-0708.google.com with SMTP id c38so634933ana.75 for ; Wed, 09 Apr 2008 08:20:14 -0700 (PDT) Received: by 10.100.172.17 with SMTP id u17mr358008ane.138.1207753987956; Wed, 09 Apr 2008 08:13:07 -0700 (PDT) Received: by 10.100.131.20 with HTTP; Wed, 9 Apr 2008 08:13:07 -0700 (PDT) Message-ID: <18b102300804090813u24423515k4c478635494534dc@mail.gmail.com> Date: Wed, 9 Apr 2008 11:13:07 -0400 From: "James Klaas" To: xfs@oss.sgi.com X-ASG-Orig-Subj: Is my partition repairable? Subject: Is my partition repairable? MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline X-Barracuda-Connect: an-out-0708.google.com[209.85.132.245] X-Barracuda-Start-Time: 1207754415 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.1, rules version 3.1.47300 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15313 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jklaas@appalachian.dyndns.org Precedence: bulk X-list: xfs I've been struggling to recover/repair an XFS partition that is on a Linux software raid. This is on Ubuntu Feisty (7.04) with xfsprogs v2.8.18. When I try to mount the system, it attempts a recovery: [127094.470809] Filesystem "md0": Disabling barriers, not supported by the underlying device [127094.471954] XFS mounting filesystem md0 [127094.613551] Starting XFS recovery on filesystem: md0 (logdev: internal) [127094.858897] Filesystem "md0": XFS internal error xfs_btree_check_sblock at line 334 of file fs/xfs/xfs_btree.c. Caller 0xf8eda9fb [127094.858957] Pid: 8986, comm: mount Not tainted 2.6.24.3-test #1 [127094.859013] [] xfs_btree_check_sblock+0x5b/0xd0 [xfs] [127094.859146] [] xfs_inobt_lookup+0x1cb/0x450 [xfs] [127094.859209] [] xfs_inobt_lookup+0x1cb/0x450 [xfs] [127094.859277] [] kmem_zone_zalloc+0x28/0x60 [xfs] [127094.859347] [] xfs_difree+0x265/0x630 [xfs] [127094.859422] [] xfs_log_reserve+0xc0/0xe0 [xfs] [127094.859482] [] xfs_ifree+0x60/0xf0 [xfs] [127094.859539] [] xfs_trans_ijoin+0x2b/0x70 [xfs] [127094.859598] [] xfs_inactive+0x23f/0x4d0 [xfs] [127094.859660] [] xfs_itobp+0x1fd/0x220 [xfs] [127094.859718] [] xfs_fs_clear_inode+0x3a/0x80 [xfs] [127094.859783] [] clear_inode+0x90/0x140 [127094.859814] [] truncate_inode_pages+0x17/0x20 [127094.859845] [] generic_delete_inode+0xda/0xf0 [127094.859875] [] iput+0x5c/0x70 [127094.859902] [] xlog_recover_process_iunlinks+0x462/0x490 [xfs] [127094.859981] [] xlog_recover_finish+0xb7/0xc0 [xfs] [127094.860041] [] xfs_mountfs+0xbd3/0xdb0 [xfs] [127094.860120] [] kmem_zalloc+0x15/0x50 [xfs] [127094.860182] [] xfs_mount+0x3d3/0x400 [xfs] [127094.860244] [] xfs_fs_fill_super+0xa2/0x200 [xfs] [127094.860313] [] snprintf+0x1f/0x30 [127094.860343] [] disk_name+0x3c/0xc0 [127094.860375] [] strlcpy+0x20/0x80 [127094.860404] [] get_sb_bdev+0xf9/0x120 [127094.860446] [] xfs_fs_get_sb+0x20/0x30 [xfs] [127094.860502] [] xfs_fs_fill_super+0x0/0x200 [xfs] [127094.860560] [] vfs_kern_mount+0xa2/0x120 [127094.860595] [] do_kern_mount+0x3d/0xe0 [127094.860627] [] do_mount+0x5f3/0x6a0 [127094.860667] [] handle_mm_fault+0x630/0x680 [127094.860712] [] iput+0x35/0x70 [127094.860745] [] __user_walk_fd+0x49/0x60 [127094.860788] [] __alloc_pages+0x56/0x360 [127094.860823] [] error_code+0x6a/0x70 [127094.860865] [] __get_free_pages+0x4e/0x60 [127094.860893] [] copy_mount_options+0x40/0x150 [127094.860927] [] sys_mount+0x72/0xb0 [127094.860959] [] sysenter_past_esp+0x5f/0x85 [127094.861002] ======================= [127094.861025] xfs_difree: xfs_inobt_lookup_le returned() an error 117 on md0. Returning error. [127094.861071] xfs_inactive: xfs_ifree() returned an error = 117 on md0 [127094.861099] xfs_force_shutdown(md0,0x1) called from line 1769 of file fs/xfs/xfs_vnodeops.c. Return address = 0xf8f00cf0 [127094.861151] Filesystem "md0": I/O Error Detected. Shutting down filesystem: md0 [127094.861192] Please umount the filesystem, and rectify the problem(s) [127095.012602] Ending XFS recovery on filesystem: md0 (logdev: internal) I don't know why there is an I/O error on md0 as I am able to copy the system using dd with no I/O errors to another disk. I get the same erorrs when I try to mount the xfs filesystem from the copied disk. If I run xfs_repair: # xfs_repair /dev/md0 - creating 2 worker thread(s) Phase 1 - find and verify superblock... - reporting progress in intervals of 15 minutes Phase 2 - using internal log - zero log... ERROR: The filesystem has valuable metadata changes in a log which needs to be replayed. Mount the filesystem to replay the log, and unmount it before re-running xfs_repair. If you are unable to mount the filesystem, then use the -L option to destroy the log and attempt a repair. Note that destroying the log may cause corruption -- please attempt a mount of the filesystem before doing this. I get a long list of things though when I run "xfs_repair -n /dev/md0". Can I use any of the information in the output from "xfs_repair -n" to fix it? James From owner-xfs@oss.sgi.com Wed Apr 9 09:08:20 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 09:08:27 -0700 (PDT) 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.0 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 m39G8IAw011396 for ; Wed, 9 Apr 2008 09:08:20 -0700 X-ASG-Debug-ID: 1207757334-33a203880000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from minas.ics.muni.cz (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 592A776C5CC for ; Wed, 9 Apr 2008 09:08:55 -0700 (PDT) Received: from minas.ics.muni.cz (minas.ics.muni.cz [147.251.4.40]) by cuda.sgi.com with ESMTP id ipKQq3LPAXOzzrjy for ; Wed, 09 Apr 2008 09:08:55 -0700 (PDT) Received: from dior.ics.muni.cz (dior.ics.muni.cz [147.251.6.10]) by minas.ics.muni.cz (8.13.8/8.13.8/SuSE Linux 0.8) with ESMTP id m39G8rIe019763 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Wed, 9 Apr 2008 18:08:54 +0200 Received: from album.ics.muni.cz (album.ics.muni.cz [147.251.23.20]) by dior.ics.muni.cz (8.13.8+Sun/8.13.8) with SMTP id m39G8qSE010326 for ; Wed, 9 Apr 2008 18:08:53 +0200 (CEST) Received: by album.ics.muni.cz (sSMTP sendmail emulation); Wed, 9 Apr 2008 18:08:45 +0200 Date: Wed, 9 Apr 2008 18:08:45 +0200 From: petr.pisar@atlas.cz To: xfs@oss.sgi.com X-ASG-Orig-Subj: Czech translation for attr-2.4.41 Subject: Czech translation for attr-2.4.41 Message-ID: <20080409160843.GA20142@album.bayer.ipv6ia.org> Mail-Followup-To: xfs@oss.sgi.com MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="DBIVS5p969aUjpLe" Content-Disposition: inline User-Agent: Mutt/1.5.16 (2007-06-09) X-Muni-Spam-TestIP: 147.251.6.10 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-3.0 (minas.ics.muni.cz [147.251.4.35]); Wed, 09 Apr 2008 18:08:54 +0200 (CEST) X-Barracuda-Connect: minas.ics.muni.cz[147.251.4.40] X-Barracuda-Start-Time: 1207757336 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.47 X-Barracuda-Spam-Status: No, SCORE=-1.47 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47302 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.55 NO_REAL_NAME From: does not include a real name X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15314 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: petr.pisar@atlas.cz Precedence: bulk X-list: xfs --DBIVS5p969aUjpLe Content-Type: multipart/mixed; boundary="uAKRQypu60I7Lcqm" Content-Disposition: inline --uAKRQypu60I7Lcqm Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hello, I'v tranlated attr package into Czech language. Patch against version 2.4.41 is attached. -- Petr --uAKRQypu60I7Lcqm Content-Type: text/plain; charset=utf-8 Content-Disposition: attachment; filename="attr-2.4.41-cs.diff" Content-Transfer-Encoding: quoted-printable diff --git a/po/Makefile b/po/Makefile index 5d2541d..06c5a2e 100644 --- a/po/Makefile +++ b/po/Makefile @@ -6,7 +6,7 @@ TOPDIR =3D .. include $(TOPDIR)/include/builddefs =20 POTHEAD =3D $(PKG_NAME).pot -LINGUAS =3D de es fr gl nl pl sv +LINGUAS =3D cs de es fr gl nl pl sv LSRCFILES =3D $(LINGUAS:%=3D%.po) $(POTHEAD) LDIRT =3D $(POTHEAD) =20 diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..e73c98c --- /dev/null +++ b/po/cs.po @@ -0,0 +1,229 @@ +# Czech translation for attr. +# Copyright (C) 2008 authors of attr source code (msgids) +# This file is distributed under the same license as the attr package. +# Petr Pisar , 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: attr 2.4.41\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-02-11 17:34+1100\n" +"PO-Revision-Date: 2008-04-09 16:30+0200\n" +"Last-Translator: Petr Pisar \n" +"Language-Team: Czech \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=3DUTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../attr/attr.c:46 +#, c-format +msgid "" +"Usage: %s [-LRSq] -s attrname [-V attrvalue] pathname # set value\n" +" %s [-LRSq] -g attrname pathname # get value\n" +" %s [-LRSq] -r attrname pathname # remove attr\n" +" %s [-LRq] -l pathname # list attrs \n" +" -s reads a value from stdin and -g writes a value to stdout\n" +msgstr "" +"U=C5=BEit=C3=AD: %s [-LRSq] -s n=C3=A1zev_atributu [-V hodnota] cesta # = nastav=C3=AD hodnotu\n" +" %s [-LRSq] -g n=C3=A1zev_atributu cesta # zjist=C3= =AD hodnotu\n" +" %s [-LRSq] -r n=C3=A1zev_atributu cesta # odstran=C3= =AD atribut\n" +" %s [-LRq] -l cesta # vyp=C3=AD=C5=A1= e atributy\n" +" -s =C4=8Dte hodnotu ze standardn=C3=ADho vstupu a -g ji vypisuje na sta= ndardn=C3=AD " +"v=C3=BDstup.\n" + +#: ../attr/attr.c:83 ../attr/attr.c:100 ../attr/attr.c:109 ../attr/attr.c:= 118 +#, c-format +msgid "Only one of -s, -g, -r, or -l allowed\n" +msgstr "Povolen je pr=C3=A1v=C4=9B jeden z=C2=A0p=C5=99ep=C3=ADna=C4=8D=C5= =AF -s, -g, -r nebo -l\n" + +#: ../attr/attr.c:91 +#, c-format +msgid "-V only allowed with -s\n" +msgstr "-V=E2=80=AFje povoleno sej s -s\n" + +#: ../attr/attr.c:136 +#, c-format +msgid "Unrecognized option: %c\n" +msgstr "Nerozpoznan=C3=BD p=C5=99ep=C3=ADna=C4=8D: %c\n" + +#: ../attr/attr.c:143 +#, c-format +msgid "A filename to operate on is required\n" +msgstr "Jm=C3=A9no souboru, se kter=C3=BDm se bude pracovat, je vy=C5=BEad= ov=C3=A1no.\n" + +#: ../attr/attr.c:171 +#, c-format +msgid "Could not set \"%s\" for %s\n" +msgstr "Souboru %2$s nelze nastavit atribut =E2=80=9E%1$s=E2=80=9C\n" + +#: ../attr/attr.c:176 +#, c-format +msgid "Attribute \"%s\" set to a %d byte value for %s:\n" +msgstr "Atributu =E2=80=9E%1$s=E2=80=9C souboru %3$s nastavena %2$dbajtov= =C3=A1 hodnota:\n" + +#: ../attr/attr.c:194 +#, c-format +msgid "Could not get \"%s\" for %s\n" +msgstr "Ze souboru %2$s nelze z=C3=ADskat atribut =E2=80=9E%1$s=E2=80=9C\n" + +#: ../attr/attr.c:199 +#, c-format +msgid "Attribute \"%s\" had a %d byte value for %s:\n" +msgstr "Atribut =E2=80=9E%1$s=E2=80=9C souboru %3$s m=C4=9Bl %2$dbajtovou = hodnotu:\n" + +#: ../attr/attr.c:212 +#, c-format +msgid "Could not remove \"%s\" for %s\n" +msgstr "Ze souboru %2$s nelze odstranit atribut =E2=80=9E%1$s=E2=80=9C\n" + +#: ../attr/attr.c:230 +#, c-format +msgid "Could not list \"%s\" for %s\n" +msgstr "Ze souboru %2$s nelze vypsat atribut =E2=80=9E%1$s=E2=80=9C\n" + +#: ../attr/attr.c:240 +#, c-format +msgid "Attribute \"%s\" has a %d byte value for %s\n" +msgstr "Atribut =E2=80=9E%1$s=E2=80=9C souboru %3$s m=C3=A1 %2$dbajtovou h= odnotu\n" + +#: ../attr/attr.c:252 +#, c-format +msgid "At least one of -s, -g, -r, or -l is required\n" +msgstr "Alespo=C5=88 jeden z=C2=A0p=C5=99ep=C3=ADna=C4=8D=C5=AF -s, -g, -r= nebo -l je vy=C5=BEadov=C3=A1n\n" + +#: ../getfattr/getfattr.c:97 ../setfattr/setfattr.c:70 +msgid "No such attribute" +msgstr "Takov=C3=BD atribut neexistuje" + +#: ../getfattr/getfattr.c:255 +#, c-format +msgid "%s: Removing leading '/' from absolute path names\n" +msgstr "%s: Odstra=C5=88uji =C3=BAvodn=C3=AD =E2=80=9E/=E2=80=9C z=C2=A0ab= solutn=C3=AD cesty\n" + +#: ../getfattr/getfattr.c:372 +#, c-format +msgid "%s %s -- get extended attributes\n" +msgstr "%s %s=C2=A0=E2=80=93=C2=A0z=C3=ADsk=C3=A1 roz=C5=A1=C3=AD=C5=99en= =C3=A9 atributy\n" + +#: ../getfattr/getfattr.c:374 ../setfattr/setfattr.c:175 +#, c-format +msgid "Usage: %s %s\n" +msgstr "Pou=C5=BEit=C3=AD: %s %s\n" + +#: ../getfattr/getfattr.c:377 +#, c-format +msgid "" +" -n, --name=3Dname get the named extended attribute value\n" +" -d, --dump get all extended attribute values\n" +" -e, --encoding=3D... encode values (as 'text', 'hex' or 'base64')\= n" +" --match=3Dpattern only get attributes with names matching patte= rn\n" +" --only-values print the bare values only\n" +" -h, --no-dereference do not dereference symbolic links\n" +" --absolute-names don't strip leading '/' in pathnames\n" +" -R, --recursive recurse into subdirectories\n" +" -L, --logical logical walk, follow symbolic links\n" +" -P --physical physical walk, do not follow symbolic links\n" +" --version print version and exit\n" +" --help this help text\n" +msgstr "" +" -n, --name=3Dn=C3=A1zev zjist=C3=AD hodnotu jmenovan=C3=A9ho roz= =C5=A1=C3=AD=C5=99en=C3=A9ho atributu\n" +" -d, --dump zjist=C3=AD hodnoty v=C5=A1ech roz=C5=A1=C3=AD= =C5=99en=C3=BDch atribut=C5=AF\n" +" -e, --encoding=3D=E2=80=A6 zak=C3=B3duje hodnotu (jako =E2=80=9E= text=E2=80=9C, =E2=80=9Ehex=E2=80=9C nebo " +"=E2=80=9Ebase64=E2=80=9C)\n" +" --match=3Dvzor z=C3=ADsk=C3=A1 jen atributy, jejich=C5=BE jm= =C3=A9na vyhovuj=C3=AD vzoru\n" +" --only-values vyp=C3=AD=C5=A1e =C4=8Dist=C4=9B jenom hodnoty\= n" +" -h, --no-dereference nen=C3=A1sleduje symbolick=C3=A9 odkazy\n" +" --absolute-names neodstra=C5=88uje =C3=BAvodn=C3=AD =E2=80=9E/= =E2=80=9C z=C2=A0cest k=C2=A0soubor=C5=AFm\n" +" -R, --recursive sestupuje do podadres=C3=A1=C5=99=C5=AF\n" +" -L, --logical logick=C3=BD pr=C5=AFchod, n=C3=A1sleduje symbo= lick=C3=A9 odkazy\n" +" -P --physical fyzick=C3=BD pr=C5=AFchod, symbolick=C3=A9 odka= zy nen=C3=A1sleduje\n" +" --version vyp=C3=AD=C5=A1e verzi a skon=C4=8D=C3=AD\n" +" --help text t=C3=A9to n=C3=A1pov=C4=9Bdy\n" + +#: ../getfattr/getfattr.c:473 +#, c-format +msgid "%s: invalid regular expression \"%s\"\n" +msgstr "%s: chybn=C3=BD regul=C3=A1rn=C3=AD v=C3=BDraz =E2=80=9E%s=E2=80= =9C\n" + +#: ../getfattr/getfattr.c:487 +#, c-format +msgid "" +"Usage: %s %s\n" +"Try `%s --help' for more information.\n" +msgstr "" +"Pou=C5=BEit=C3=AD: %s %s\n" +"Pro v=C3=ADce informac=C3=AD zkuste =E2=80=9E%s --help=E2=80=9C.\n" + +#: ../setfattr/setfattr.c:123 +#, c-format +msgid "%s: %s: No filename found in line %d, aborting\n" +msgstr "%s: %s: =C5=BD=C3=A1dn=C3=A9 jm=C3=A9no souboru nenalezeno na =C5= =99=C3=A1dku %d, kon=C4=8D=C3=ADm.\n" + +#: ../setfattr/setfattr.c:127 +#, c-format +msgid "%s: No filename found in line %d of standard input, aborting\n" +msgstr "" +"%s: =C5=BD=C3=A1dn=C3=A9 jm=C3=A9no souboru nenalezeno na =C5=99=C3=A1dku= %d standardn=C3=ADho vstupu, kon=C4=8D=C3=ADm\n" + +#: ../setfattr/setfattr.c:174 +#, c-format +msgid "%s %s -- set extended attributes\n" +msgstr "%s %s=C2=A0=E2=80=93 nastav=C3=AD roz=C5=A1=C3=AD=C5=99en=C3=A9 at= ributy\n" + +#: ../setfattr/setfattr.c:176 +#, c-format +msgid " %s %s\n" +msgstr " %s %s\n" + +#: ../setfattr/setfattr.c:178 +#, c-format +msgid "" +" -n, --name=3Dname set the value of the named extended attribute= \n" +" -x, --remove=3Dname remove the named extended attribute\n" +" -v, --value=3Dvalue use value as the attribute value\n" +" -h, --no-dereference do not dereference symbolic links\n" +" --restore=3Dfile restore extended attributes\n" +" --version print version and exit\n" +" --help this help text\n" +msgstr "" +" -n, --name=3Dn=C3=A1zev nastav=C3=AD hodnotu jmenovan=C3=A9ho ro= z=C5=A1=C3=AD=C5=99en=C3=A9ho atributu\n" +" -x, --remove=3Dn=C3=A1zev odstran=C3=AD jmenovan=C3=BD roz=C5=A1= =C3=AD=C5=99en=C3=BD atribut\n" +" -v, --value=3Dhodnota jako hodnotu atributu pou=C5=BEije hodnotu\n" +" -h, --no-dereference do not dereference symbolic links\n" +" --restore=3Dsoubor obnov=C3=AD roz=C5=A1=C3=AD=C5=99en=C3=A9 atr= ibuty\n" +" --version vyp=C3=AD=C5=A1e verzi a skon=C4=8D=C3=AD\n" +" --help text t=C3=A9to n=C3=A1pov=C4=9Bdy\n" + +#: ../setfattr/setfattr.c:253 +#, c-format +msgid "" +"Usage: %s %s\n" +" %s %s\n" +"Try `%s --help' for more information.\n" +msgstr "" +"Pou=C5=BEit=C3=AD: %s %s\n" +" %s %s\n" +"Pro v=C3=ADce informac=C3=AD zkuste =E2=80=9E%s --help=E2=80=9C.\n" + +#: ../libattr/attr_copy_fd.c:82 ../libattr/attr_copy_fd.c:97 +#: ../libattr/attr_copy_file.c:80 ../libattr/attr_copy_file.c:95 +#, c-format +msgid "listing attributes of %s" +msgstr "vypisuji atribut souboru %s" + +#: ../libattr/attr_copy_fd.c:117 ../libattr/attr_copy_fd.c:134 +#: ../libattr/attr_copy_file.c:115 ../libattr/attr_copy_file.c:132 +#, c-format +msgid "getting attribute %s of %s" +msgstr "z=C3=ADsk=C3=A1v=C3=A1m atribut %s souboru %s" + +#: ../libattr/attr_copy_fd.c:147 ../libattr/attr_copy_fd.c:165 +#: ../libattr/attr_copy_file.c:144 ../libattr/attr_copy_file.c:163 +#, c-format +msgid "setting attributes for %s" +msgstr "nastavuji atributy souboru %s" + +#: ../libattr/attr_copy_fd.c:153 ../libattr/attr_copy_file.c:151 +#, c-format +msgid "setting attribute %s for %s" +msgstr "nastavuji atribut %s souboru %s" --uAKRQypu60I7Lcqm-- --DBIVS5p969aUjpLe Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.7 (GNU/Linux) iD8DBQFH/OoLuR4f4nEwzHIRAlPxAKCHSXl6ZoWZaJKEgqDbB8nwTDoMtwCggOq5 e6Oslqkjg10MO71rE6U0v0o= =Plwo -----END PGP SIGNATURE----- --DBIVS5p969aUjpLe-- From owner-xfs@oss.sgi.com Wed Apr 9 11:20:45 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 11:20:51 -0700 (PDT) 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.1 required=5.0 tests=AWL,BAYES_50,HTML_MESSAGE, J_CHICKENPOX_45 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 m39IKi7t032268 for ; Wed, 9 Apr 2008 11:20:45 -0700 X-ASG-Debug-ID: 1207765281-4f39022e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from exchange01.ortivawireless.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id AC089983ABB for ; Wed, 9 Apr 2008 11:21:21 -0700 (PDT) Received: from exchange01.ortivawireless.com (mail.ortivawireless.com [216.86.136.74]) by cuda.sgi.com with ESMTP id mGliif9nSCeLGPuD for ; Wed, 09 Apr 2008 11:21:21 -0700 (PDT) X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.4073 Importance: normal Priority: normal MIME-Version: 1.0 X-ASG-Orig-Subj: Recovering Data From Lost+Found Subject: Recovering Data From Lost+Found Date: Wed, 9 Apr 2008 11:25:28 -0700 Message-ID: <720665D03D82304C98BA1EEDCE3EA6FE7A206C@exchange01.ortivawireless.com> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: Recovering Data From Lost+Found thread-index: AcieXBh+7QfTyQOhQxKJmXibrAA0Qg== From: "Jeffrey Sandel" To: X-Barracuda-Connect: mail.ortivawireless.com[216.86.136.74] X-Barracuda-Start-Time: 1207765281 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=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47311 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 861 X-archive-position: 15315 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: JSandel@ortivawireless.com Precedence: bulk X-list: xfs Last week we ran a firmware upgrade on a Coraid box with the drives mounted. The firmware upgrade corrupted part of the data and caused input output errors for users trying to acess the NFS mount. We then repaired the xfs file system with xfs_repair and all of the data was dumped into the lost+found directory without filenames or ownership of the files displayed, only inode numbers. I want to restore the data to it's oiginal state before the firmware upgrade and before the xfs _repair. Is there a command in xfs that you can do this with. The NFS server is running Ubuntu 6.10. Thank you for your assistance with this matter. Jeffrey Sandel Network Manager Ortiva Wireless (858) 704-1524 - Office (619) 961-6346 - Mobile jsandel@ortivawireless.com [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Wed Apr 9 11:40:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 11:40:50 -0700 (PDT) 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 (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 m39IegoC002535 for ; Wed, 9 Apr 2008 11:40:43 -0700 X-ASG-Debug-ID: 1207766478-7a8600290000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from minas.ics.muni.cz (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 966EC76DD94 for ; Wed, 9 Apr 2008 11:41:18 -0700 (PDT) Received: from minas.ics.muni.cz (minas.ics.muni.cz [147.251.4.40]) by cuda.sgi.com with ESMTP id kbrVL2VhbHHDDEPI for ; Wed, 09 Apr 2008 11:41:18 -0700 (PDT) Received: from dior.ics.muni.cz (dior.ics.muni.cz [147.251.6.10]) by minas.ics.muni.cz (8.13.8/8.13.8/SuSE Linux 0.8) with ESMTP id m39IfGBR031952 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Wed, 9 Apr 2008 20:41:17 +0200 Received: from album.ics.muni.cz (album.ics.muni.cz [147.251.23.20]) by dior.ics.muni.cz (8.13.8+Sun/8.13.8) with SMTP id m39IfGm4015135 for ; Wed, 9 Apr 2008 20:41:16 +0200 (CEST) Received: by album.ics.muni.cz (sSMTP sendmail emulation); Wed, 9 Apr 2008 20:41:08 +0200 Date: Wed, 9 Apr 2008 20:41:08 +0200 From: petr.pisar@atlas.cz To: xfs@oss.sgi.com X-ASG-Orig-Subj: Portability of libattr Subject: Portability of libattr Message-ID: <20080409184103.GD20142@album.bayer.ipv6ia.org> Mail-Followup-To: xfs@oss.sgi.com MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="NGIwU0kFl1Z1A3An" Content-Disposition: inline User-Agent: Mutt/1.5.16 (2007-06-09) X-Muni-Spam-TestIP: 147.251.6.10 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-3.0 (minas.ics.muni.cz [147.251.4.35]); Wed, 09 Apr 2008 20:41:17 +0200 (CEST) X-Barracuda-Connect: minas.ics.muni.cz[147.251.4.40] X-Barracuda-Start-Time: 1207766480 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.47 X-Barracuda-Spam-Status: No, SCORE=-1.47 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47312 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.55 NO_REAL_NAME From: does not include a real name X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15316 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: petr.pisar@atlas.cz Precedence: bulk X-list: xfs --NGIwU0kFl1Z1A3An Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hello, I'm adding support for extended atributes into few applications. Unfortunatetally API for EA manipulation is not standartized and every operating system uses its own solution. I thought libattr from attr package could help me. However attr seems running on Linux (and maybe IRIX) only. Therefore I've decided to use libc functions from every system directly. I've succesfully ported my code to Linux, IRIX and Darwin (Max OS X). Their AE syscalls are very similar. However FreeBSD API is more different. Because I'm extending more applications I need to share the code. So, my qustions are: should I write my own library or should I extend libattr. As I can understand libattr code it's designed to port IRIX application on Linux. Am I right? Or are you going support more OS's in libattr? Or exists here some similar library providing unified interface fro more systems? -- Petr --NGIwU0kFl1Z1A3An Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.7 (GNU/Linux) iD8DBQFH/Q2/uR4f4nEwzHIRAkCrAJsFOvjgIGgcaDSrX83ONhOzaWOOvwCdFFaT jqKFnvlMxzfFvlEI43yymaQ= =B2Ha -----END PGP SIGNATURE----- --NGIwU0kFl1Z1A3An-- From owner-xfs@oss.sgi.com Wed Apr 9 11:54:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 11:54:16 -0700 (PDT) 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 m39Is72b004491 for ; Wed, 9 Apr 2008 11:54:09 -0700 X-ASG-Debug-ID: 1207767285-4ddf03800000-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 328FB1211D2E for ; Wed, 9 Apr 2008 11:54:45 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id QkUQ7YZPDHLoGQtu for ; Wed, 09 Apr 2008 11:54:45 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JjfRV-0001fn-AS for xfs@oss.sgi.com; Wed, 09 Apr 2008 18:54:45 +0000 Date: Wed, 9 Apr 2008 14:54:45 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Portability of libattr Subject: Re: Portability of libattr Message-ID: <20080409185445.GA30834@infradead.org> References: <20080409184103.GD20142@album.bayer.ipv6ia.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080409184103.GD20142@album.bayer.ipv6ia.org> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207767286 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.1, rules version 3.1.47313 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15317 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Wed, Apr 09, 2008 at 08:41:08PM +0200, petr.pisar@atlas.cz wrote: > Hello, > > I'm adding support for extended atributes into few applications. > Unfortunatetally API for EA manipulation is not standartized and every > operating system uses its own solution. I thought libattr from attr package > could help me. However attr seems running on Linux (and maybe IRIX) only. > > Therefore I've decided to use libc functions from every system directly. I've > succesfully ported my code to Linux, IRIX and Darwin (Max OS X). Their AE > syscalls are very similar. However FreeBSD API is more different. Because I'm > extending more applications I need to share the code. > > So, my qustions are: should I write my own library or should I extend libattr. > As I can understand libattr code it's designed to port IRIX application on > Linux. Am I right? Or are you going support more OS's in libattr? Or exists > here some similar library providing unified interface fro more systems? Note: I'm not the maintainer of libattr, so I'm not the one to decide. I think adding more systems is an excellent idea as it's a bit of a porting layer already. Russell will have to add FreeBSD support anyway once he ports xfsdump to FreeBSD :) From owner-xfs@oss.sgi.com Wed Apr 9 12:15:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 12:15:19 -0700 (PDT) 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_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 (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 m39JFB1u007878 for ; Wed, 9 Apr 2008 12:15:13 -0700 X-ASG-Debug-ID: 1207768549-1e6a024d0000-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 12AD39845FC for ; Wed, 9 Apr 2008 12:15:49 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 6rDpTA5qfQaOw4bF for ; Wed, 09 Apr 2008 12:15:49 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JjflO-0001LR-3M; Wed, 09 Apr 2008 19:15:18 +0000 Date: Wed, 9 Apr 2008 15:15:18 -0400 From: Christoph Hellwig To: David Chinner Cc: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: TAKE 979087 - Test 091 fails on sector size != 512 bytes Subject: Re: TAKE 979087 - Test 091 fails on sector size != 512 bytes Message-ID: <20080409191518.GA18486@infradead.org> References: <20080408022933.170C258C4C0F@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080408022933.170C258C4C0F@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207768550 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.1, rules version 3.1.47315 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15318 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Tue, Apr 08, 2008 at 12:29:32PM +1000, David Chinner wrote: > Test 091 fails on sector size != 512 bytes > > Test 091 assumes a direct I/O alignment of 512 bytes, > a hold over from 2.4 kernels. On 2.6. kernels, direct > I/O needs to be aligned to the sector size the filesystem > was mkfs'd with. Actually this makes 091 fail in my kvm test setup now: 091 49s ... - output mismatch (see 091.out.bad) 1a2,7 > 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 From owner-xfs@oss.sgi.com Wed Apr 9 13:17:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 13:17:54 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_23, J_CHICKENPOX_43 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 m39KHkX8021415 for ; Wed, 9 Apr 2008 13:17:48 -0700 X-ASG-Debug-ID: 1207772302-3d6201d60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C46C576E7B7 for ; Wed, 9 Apr 2008 13:18:22 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id lssgL0jXPfGt3HiV for ; Wed, 09 Apr 2008 13:18:22 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m39KIGF3002009 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Wed, 9 Apr 2008 22:18:17 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m39KIGl2002007 for xfs@oss.sgi.com; Wed, 9 Apr 2008 22:18:16 +0200 Date: Wed, 9 Apr 2008 22:18:16 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: test 001 oopses starting from today Subject: test 001 oopses starting from today Message-ID: <20080409201816.GB1866@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1207772303 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.1, rules version 3.1.47320 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15319 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs now that the big commit storm from last night hit cvs the tree seems rathe broken, already in xfsqa 001: 001 15s ...[ 79.522114] Assertion failed: ip->i_transp == tp, file: fs/xfs/xfs_trans_inode.c, line: 258 [ 79.525823] ------------[ cut here ]------------ [ 79.525900] kernel BUG at fs/xfs/support/debug.c:81! [ 79.525900] invalid opcode: 0000 [#1] SMP [ 79.525900] Modules linked in: xfs binfmt_misc nfsd auth_rpcgss exportfs af_packet nfs lockd nfs_acl sunrpc loop psmouse pcspkr serio_raw evdev [ 79.525900] [ 79.525900] Pid: 2634, comm: fill Not tainted (2.6.25-rc3 #38) [ 79.525900] EIP: 0060:[] EFLAGS: 00010286 CPU: 0 [ 79.525900] EIP is at assfail+0x1e/0x30 [xfs] [ 79.525900] EAX: 00000062 EBX: ef713c90 ECX: c011b450 EDX: ec8e7540 [ 79.525900] ESI: ef713c90 EDI: ec8ef2d8 EBP: eeba1d98 ESP: eeba1d88 [ 79.525900] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068 [ 79.525900] Process fill (pid: 2634, ti=eeba0000 task=ec8e7540 task.ti=eeba0000) [ 79.525900] Stack: f0a1366c f0a06195 f0a0617c 00000102 eeba1db0 f09e7d6f 00000001 ef713c90 [ 79.525900] eeba1dfc ec8ef2d8 eeba1e24 f09cd20a 0000000a 00000000 00000002 00000001 [ 79.525900] 00000040 00000002 eeba1e08 eeba1dfc 00000000 eeba1e14 ef713c90 eeba1e94 [ 79.525900] Call Trace: [ 79.525900] [] ? xfs_trans_log_inode+0x2f/0xb0 [xfs] [ 79.525900] [] ? xfs_itruncate_finish+0x56a/0x720 [xfs] [ 79.525900] [] ? xfs_free_eofblocks+0x2b3/0x2f0 [xfs] [ 79.525900] [] ? xfs_release+0x156/0x1b0 [xfs] [ 79.525900] [] ? xfs_file_release+0xe/0x20 [xfs] [ 79.525900] [] ? __fput+0xb6/0x190 [ 79.525900] [] ? fput+0x19/0x20 [ 79.525900] [] ? filp_close+0x47/0x70 [ 79.525900] [] ? put_files_struct+0x9b/0xb0 [ 79.525900] [] ? __exit_files+0x42/0x60 [ 79.525900] [] ? do_exit+0x172/0x730 [ 79.525900] [] ? up_read+0x16/0x30 [ 79.525900] [] ? do_page_fault+0x186/0x650 [ 79.525900] [] ? vfs_write+0xf8/0x130 [ 79.525900] [] ? do_sync_write+0x0/0x110 [ 79.525900] [] ? do_group_exit+0x29/0x80 [ 79.525900] [] ? sys_exit_group+0xf/0x20 [ 79.525900] [] ? sysenter_past_esp+0x5f/0xa5 [ 79.525900] ======================= [ 79.525900] Code: 00 e8 27 fc 80 cf c9 c3 90 8d 74 26 00 55 89 e5 83 ec 10 89 4c 24 0c 89 54 24 08 89 44 24 04 c7 04 24 6c 36 a1 f0 e8 a2 1f 72 cf <0f> 0b eb fe 8d b4 26 00 00 00 00 8d bc 27 00 00 00 00 55 83 e0 [ 79.525900] EIP: [] assfail+0x1e/0x30 [xfs] SS:ESP 0068:eeba1d88 [ 79.525906] ---[ end trace 9d447135ab7111e4 ]--- [ 79.526511] Fixing recursive fault but reboot is needed! From owner-xfs@oss.sgi.com Wed Apr 9 13:40:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 13:40:47 -0700 (PDT) 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.7 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 m39Kecsl024262 for ; Wed, 9 Apr 2008 13:40:38 -0700 X-ASG-Debug-ID: 1207773672-20b403e30000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx1.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8AC9676EF39 for ; Wed, 9 Apr 2008 13:41:13 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id vbQUjnywRSisojOd for ; Wed, 09 Apr 2008 13:41:13 -0700 (PDT) Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id m39Jrwju032550 for ; Wed, 9 Apr 2008 15:53:59 -0400 Received: from file.rdu.redhat.com (file.rdu.redhat.com [10.11.255.147]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m39JrwcL026226 for ; Wed, 9 Apr 2008 15:53:58 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by file.rdu.redhat.com (8.13.1/8.13.1) with ESMTP id m39Jrvjs013683 for ; Wed, 9 Apr 2008 15:53:58 -0400 Message-ID: <47FD1ED5.9000308@sandeen.net> Date: Wed, 09 Apr 2008 14:53:57 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (X11/20080226) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: Re: [PATCH] fix dir2 shortform structures on ARM old ABI Subject: Re: [PATCH] fix dir2 shortform structures on ARM old ABI References: <47DB4181.7040603@sandeen.net> In-Reply-To: <47DB4181.7040603@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 X-Barracuda-Connect: mx1.redhat.com[66.187.233.31] X-Barracuda-Start-Time: 1207773673 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.1, rules version 3.1.47320 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15320 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Eric Sandeen wrote: > This should fix the longstanding issues with xfs and old ABI > arm boxes, which lead to various asserts and xfs shutdowns, > and for which an (incorrect) patch has been floating around > for years. (Said patch made ARM internally consistent, but > altered the normal xfs on-disk format such that it looked > corrupted on other architectures): > http://lists.arm.linux.org.uk/lurker/message/20040311.002034.5ecf21a2.html So, I'm wondering what the sgi guys think of this. I know Jeff wants an all-singing, all-dancing pack-and-align patch, and maybe when it's ready it could replace this, but I wonder if maybe now this could go in just, you know, to fix the bug? :) Thanks, -Eric > Old ABI ARM has interesting packing & padding; for example > on ARM old abi: > > struct xfs_dir2_sf_entry { > __uint8_t namelen; /* 0 1 */ > > /* XXX 3 bytes hole, try to pack */ > > xfs_dir2_sf_off_t offset; /* 4 4 */ > __uint8_t name[1]; /* 8 1 */ > > /* XXX 3 bytes hole, try to pack */ > > xfs_dir2_inou_t inumber; /* 12 8 */ > > /* size: 20, cachelines: 1 */ > /* sum members: 14, holes: 2, sum holes: 6 */ > /* last cacheline: 20 bytes */ > }; > > but on x86: > > struct xfs_dir2_sf_entry { > __uint8_t namelen; /* 0 1 */ > xfs_dir2_sf_off_t offset; /* 1 2 */ > __uint8_t name[1]; /* 3 1 */ > xfs_dir2_inou_t inumber; /* 4 8 */ > > /* size: 12, cachelines: 1 */ > /* last cacheline: 12 bytes */ > }; > > ... this sort of discrepancy leads to problems. > > I've verified this patch by comparing the on-disk structure > layouts using pahole from the dwarves package, as well as > running through a bit of xfsqa under qemu-arm, modified so > that the check/repair phase after each test actually executes > check/repair from the x86 host, on the filesystem populated > by the arm emulator. Thus far it all looks good. > > There are 2 other structures with extra padding at the end, > but they don't seem to cause trouble. I suppose they could > be packed as well: xfs_dir2_data_unused_t and xfs_dir2_sf_t. > > Note that userspace needs a similar treatment, and any > filesystems which were running with the previous rogue > "fix" will now see corruption (either in the kernel, or > during xfs_repair) with this fix properly in place; it > may be worth teaching xfs_repair to identify and fix that > specific issue. > > Signed-off-by: Eric Sandeen > > --- > > Index: linux-2.6.24/fs/xfs/linux-2.6/xfs_linux.h > =================================================================== > --- linux-2.6.24.orig/fs/xfs/linux-2.6/xfs_linux.h > +++ linux-2.6.24/fs/xfs/linux-2.6/xfs_linux.h > @@ -300,4 +300,11 @@ static inline __uint64_t howmany_64(__ui > return x; > } > > +/* ARM old ABI has some weird alignment/padding */ > +#if defined(__arm__) && !defined(__ARM_EABI__) > +#define __arch_pack __attribute__((packed)) > +#else > +#define __arch_pack > +#endif > + > #endif /* __XFS_LINUX__ */ > Index: linux-2.6.24/fs/xfs/xfs_dir2_sf.h > =================================================================== > --- linux-2.6.24.orig/fs/xfs/xfs_dir2_sf.h > +++ linux-2.6.24/fs/xfs/xfs_dir2_sf.h > @@ -62,7 +62,7 @@ typedef union { > * Normalized offset (in a data block) of the entry, really xfs_dir2_data_off_t. > * Only need 16 bits, this is the byte offset into the single block form. > */ > -typedef struct { __uint8_t i[2]; } xfs_dir2_sf_off_t; > +typedef struct { __uint8_t i[2]; } __arch_pack xfs_dir2_sf_off_t; > > /* > * The parent directory has a dedicated field, and the self-pointer must > @@ -76,14 +76,14 @@ typedef struct xfs_dir2_sf_hdr { > __uint8_t count; /* count of entries */ > __uint8_t i8count; /* count of 8-byte inode #s */ > xfs_dir2_inou_t parent; /* parent dir inode number */ > -} xfs_dir2_sf_hdr_t; > +} __arch_pack xfs_dir2_sf_hdr_t; > > typedef struct xfs_dir2_sf_entry { > __uint8_t namelen; /* actual name length */ > xfs_dir2_sf_off_t offset; /* saved offset */ > __uint8_t name[1]; /* name, variable size */ > xfs_dir2_inou_t inumber; /* inode number, var. offset */ > -} xfs_dir2_sf_entry_t; > +} __arch_pack xfs_dir2_sf_entry_t; > > typedef struct xfs_dir2_sf { > xfs_dir2_sf_hdr_t hdr; /* shortform header */ > > > From owner-xfs@oss.sgi.com Wed Apr 9 14:41:06 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 14:41:15 -0700 (PDT) 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.7 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 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 m39Lf05f032597 for ; Wed, 9 Apr 2008 14:41:04 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id HAA15779; Thu, 10 Apr 2008 07:41:14 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m39LfDsT127615003; Thu, 10 Apr 2008 07:41:14 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m39Lf6FR127831764; Thu, 10 Apr 2008 07:41:06 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 10 Apr 2008 07:41:06 +1000 From: David Chinner To: Christoph Hellwig Cc: David Chinner , xfs@oss.sgi.com Subject: Re: TAKE 979087 - Test 091 fails on sector size != 512 bytes Message-ID: <20080409214106.GF108924158@sgi.com> References: <20080408022933.170C258C4C0F@chook.melbourne.sgi.com> <20080409191518.GA18486@infradead.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080409191518.GA18486@infradead.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15321 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 09, 2008 at 03:15:18PM -0400, Christoph Hellwig wrote: > On Tue, Apr 08, 2008 at 12:29:32PM +1000, David Chinner wrote: > > Test 091 fails on sector size != 512 bytes > > > > Test 091 assumes a direct I/O alignment of 512 bytes, > > a hold over from 2.4 kernels. On 2.6. kernels, direct > > I/O needs to be aligned to the sector size the filesystem > > was mkfs'd with. > > Actually this makes 091 fail in my kvm test setup now: > > 091 49s ... - output mismatch (see 091.out.bad) > 1a2,7 > > 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 Looks like a redirect issue. My bad. (stems from 091 failing later on 64k page size, and the above output not appearing in any of the output files when a test failure occurs.) Patch below. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group --- xfstests/091 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: xfs-cmds/xfstests/091 =================================================================== --- xfs-cmds.orig/xfstests/091 2008-04-08 12:25:08.000000000 +1000 +++ xfs-cmds/xfstests/091 2008-04-10 07:33:10.674694972 +1000 @@ -50,7 +50,7 @@ kernel=`uname -r | sed -e 's/\(2\..\).* # 2.6 Linux kernels support sector aligned direct I/O only if [ "$HOSTOS" = "Linux" -a "$kernel" = "2.6" ]; then - xfs_info $TEST_DIR | _filter_mkfs 2> $tmp.info + xfs_info $TEST_DIR | _filter_mkfs 2> $tmp.info > /dev/null if [ $? -eq 0 ]; then source $tmp.info bsize=$sectsz From owner-xfs@oss.sgi.com Wed Apr 9 16:01:49 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 16:01:56 -0700 (PDT) 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.0 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 m39N1jX5010763 for ; Wed, 9 Apr 2008 16:01:48 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA17514; Thu, 10 Apr 2008 09:02:23 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m39N2LsT127752550; Thu, 10 Apr 2008 09:02:22 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m39N2J8g127611717; Thu, 10 Apr 2008 09:02:19 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 10 Apr 2008 09:02:19 +1000 From: David Chinner To: Thor Kristoffersen Cc: David Chinner , Timothy Shimmin , xfs@oss.sgi.com Subject: Re: [patch] Re: Does XFS prevent disk spindown? Message-ID: <20080409230219.GM108924158@sgi.com> References: <20080401003005.GJ103491721@sgi.com> <47F1CF6D.2040103@sandeen.net> <47F9735E.8020900@sgi.com> <20080407215855.GE108924158@sgi.com> <20080409041113.GC108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15322 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 09, 2008 at 11:32:34PM +0200, Thor Kristoffersen wrote: > David Chinner writes: > >> = sectsz=512 sunit=0 blks, lazy-count=1 > >> realtime =none extsz=4096 blocks=0, rtextents=0 > >> > >> Is that what's causing it? I have never specified any lazy-count option > >> when I created or mounted the filesystem. I didn't even know it existed. > > > > Introduced in 2.6.22, and recently was made the default mkfs config. > > > > Try the patch below. > > Thanks a lot, David! Your patch worked perfectly. Also thanks to the > others who helped me track down this issue. Cool. I'll get that patch reviewed and checked in, then. > BTW, what are the consequences of setting lazy-count to 0? Less safety? > Reduced performance? One a single disk? No difference to performance, but significantly lower latency on metadata operations is seen when using lazy-count=1. If you have lots of disks, or low-latency caches in front of your disks, lazy-count=1 will prevent superblock updates from being the metadata performance limiting factor. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 9 17:16:24 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 17:16:30 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_45 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 m3A0GLee024569 for ; Wed, 9 Apr 2008 17:16:22 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA18733; Thu, 10 Apr 2008 10:16:54 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3A0GrsT127520505; Thu, 10 Apr 2008 10:16:53 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3A0GpJx127592470; Thu, 10 Apr 2008 10:16:51 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 10 Apr 2008 10:16:51 +1000 From: David Chinner To: Jeffrey Sandel Cc: xfs@oss.sgi.com Subject: Re: Recovering Data From Lost+Found Message-ID: <20080410001651.GN108924158@sgi.com> References: <720665D03D82304C98BA1EEDCE3EA6FE7A206C@exchange01.ortivawireless.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <720665D03D82304C98BA1EEDCE3EA6FE7A206C@exchange01.ortivawireless.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15323 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 09, 2008 at 11:25:28AM -0700, Jeffrey Sandel wrote: > Last week we ran a firmware upgrade on a Coraid box with the drives > mounted. The firmware upgrade corrupted part of the data and caused > input output errors for users trying to acess the NFS mount. We then > repaired the xfs file system with xfs_repair and all of the data was > dumped into the lost+found directory without filenames or ownership of > the files displayed, only inode numbers. I want to restore the data to > it's oiginal state before the firmware upgrade and before the xfs > _repair. Is there a command in xfs that you can do this with. Please check the archives before posting questions. There is a current thread on exactly this topic. You'll find the answer there.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 9 17:33:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 17:33:20 -0700 (PDT) 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 m3A0XCC9027010 for ; Wed, 9 Apr 2008 17:33:13 -0700 X-ASG-Debug-ID: 1207787628-48dd01cc0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp.getmail.no (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 69A45770C9C for ; Wed, 9 Apr 2008 17:33:48 -0700 (PDT) Received: from smtp.getmail.no (smtp.getmail.no [84.208.20.33]) by cuda.sgi.com with ESMTP id pOlN4f95XXIBUHKX for ; Wed, 09 Apr 2008 17:33:48 -0700 (PDT) Received: from pmxchannel-daemon.no-osl-m323-srv-004-z2.isp.get.no by no-osl-m323-srv-004-z2.isp.get.no (Sun Java System Messaging Server 6.2-7.05 (built Sep 5 2006)) id <0JZ200M3DUIFIV00@no-osl-m323-srv-004-z2.isp.get.no> for xfs@oss.sgi.com; Wed, 09 Apr 2008 23:32:39 +0200 (CEST) Received: from smtp.getmail.no ([10.5.16.1]) by no-osl-m323-srv-004-z2.isp.get.no (Sun Java System Messaging Server 6.2-7.05 (built Sep 5 2006)) with ESMTP id <0JZ200MM2UIARIA0@no-osl-m323-srv-004-z2.isp.get.no> for xfs@oss.sgi.com; Wed, 09 Apr 2008 23:32:34 +0200 (CEST) Received: from localhost ([84.215.109.218]) by no-osl-m323-srv-009-z1.isp.get.no (Sun Java System Messaging Server 6.2-7.05 (built Sep 5 2006)) with ESMTP id <0JZ2001YHUIAWD10@no-osl-m323-srv-009-z1.isp.get.no> for xfs@oss.sgi.com; Wed, 09 Apr 2008 23:32:34 +0200 (CEST) Received: from thor by localhost with local (Exim 4.69 #1 (Debian)) id 1JjhuE-0001zq-5X; Wed, 09 Apr 2008 23:32:34 +0200 Date: Wed, 09 Apr 2008 23:32:34 +0200 From: Thor Kristoffersen X-ASG-Orig-Subj: Re: [patch] Re: Does XFS prevent disk spindown? Subject: Re: [patch] Re: Does XFS prevent disk spindown? In-reply-to: <20080409041113.GC108924158@sgi.com> To: David Chinner Cc: Timothy Shimmin , xfs@oss.sgi.com Message-id: MIME-version: 1.0 Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7BIT References: <20080401003005.GJ103491721@sgi.com> <47F1CF6D.2040103@sandeen.net> <47F9735E.8020900@sgi.com> <20080407215855.GE108924158@sgi.com> <20080409041113.GC108924158@sgi.com> User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.1 (gnu/linux) X-Barracuda-Connect: smtp.getmail.no[84.208.20.33] X-Barracuda-Start-Time: 1207787631 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=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47336 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15324 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: thorkr@gmail.com Precedence: bulk X-list: xfs David Chinner writes: > On Tue, Apr 08, 2008 at 07:53:13AM +0200, Thor Kristoffersen wrote: >> David Chinner writes: >> >> > What does 'xfs_logprint -t' show in these "idle" states >> >> > after these writes? >> >> >> >> xfs_logprint produces output like the one shown below, so it does indeed >> >> look like it's writing to the journal. But why should it need to keep >> >> writing to the journal when there have been no updates to any files on that >> >> partition recently? >> > >> > Are you using lazy-count=1? (i.e. output of 'xfs_info ', please). >> >> Looks like I am: >> >> meta-data=/dev/sda3 isize=256 agcount=4, agsize=42676171 blks >> = sectsz=512 attr=2 >> data = bsize=4096 blocks=170704681, imaxpct=25 >> = sunit=0 swidth=0 blks >> naming =version 2 bsize=4096 >> log =internal bsize=4096 blocks=32768, version=2 >> = sectsz=512 sunit=0 blks, lazy-count=1 >> realtime =none extsz=4096 blocks=0, rtextents=0 >> >> Is that what's causing it? I have never specified any lazy-count option >> when I created or mounted the filesystem. I didn't even know it existed. > > Introduced in 2.6.22, and recently was made the default mkfs config. > > Try the patch below. Thanks a lot, David! Your patch worked perfectly. Also thanks to the others who helped me track down this issue. BTW, what are the consequences of setting lazy-count to 0? Less safety? Reduced performance? Thor From owner-xfs@oss.sgi.com Wed Apr 9 17:37:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 17:37:09 -0700 (PDT) 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.0 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 m3A0axTh027678 for ; Wed, 9 Apr 2008 17:37:01 -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 KAA19216; Thu, 10 Apr 2008 10:37:37 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 6DBC958C4C15; Thu, 10 Apr 2008 10:37:37 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Ensure errors from xfs_bdstrat() are correctly checked. Message-Id: <20080410003737.6DBC958C4C15@chook.melbourne.sgi.com> Date: Thu, 10 Apr 2008 10:37:37 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15325 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Ensure errors from xfs_bdstrat() are correctly checked. xfsbdstrat() is declared to return an error. That is never checked because the error is propagated by the xfs_buf_t that is passed through the function. Mark xfsbdstrat() as returning void and comment the prototype on the methods needed for error checking. Date: Thu Apr 10 10:37:02 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30823a fs/xfs/xfs_vnodeops.c - 1.748 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.c.diff?r1=text&tr1=1.748&r2=text&tr2=1.747&f=h - Ensure errors from xfs_bdstrat() are correctly checked. fs/xfs/xfs_log_recover.c - 1.341 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log_recover.c.diff?r1=text&tr1=1.341&r2=text&tr2=1.340&f=h - Ensure errors from xfs_bdstrat() are correctly checked. fs/xfs/xfs_mount.c - 1.426 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.c.diff?r1=text&tr1=1.426&r2=text&tr2=1.425&f=h - Ensure errors from xfs_bdstrat() are correctly checked. fs/xfs/xfs_trans_buf.c - 1.130 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_trans_buf.c.diff?r1=text&tr1=1.130&r2=text&tr2=1.129&f=h - Ensure errors from xfs_bdstrat() are correctly checked. fs/xfs/linux-2.6/xfs_lrw.h - 1.63 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_lrw.h.diff?r1=text&tr1=1.63&r2=text&tr2=1.62&f=h - Ensure errors from xfs_bdstrat() are correctly checked. fs/xfs/linux-2.6/xfs_lrw.c - 1.278 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_lrw.c.diff?r1=text&tr1=1.278&r2=text&tr2=1.277&f=h - Ensure errors from xfs_bdstrat() are correctly checked. From owner-xfs@oss.sgi.com Wed Apr 9 17:38:52 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 17:39:00 -0700 (PDT) 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.0 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 m3A0cnQ8028146 for ; Wed, 9 Apr 2008 17:38:51 -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 KAA19274; Thu, 10 Apr 2008 10:39:27 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 538A758C4C15; Thu, 10 Apr 2008 10:39:27 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Ensure xfs_bawrite() errors are checked. Message-Id: <20080410003927.538A758C4C15@chook.melbourne.sgi.com> Date: Thu, 10 Apr 2008 10:39:27 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15326 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Ensure xfs_bawrite() errors are checked. xfs_bawrite() can return immediate error status on async writes. Unlike xfsbdstrat() we don't ever check the error on the buffer after the call, so we currently do not catch errors at all here. Ensure we catch and propagate or warn to the syslog about up-front async write errors. Date: Thu Apr 10 10:39:03 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30824a fs/xfs/xfs_buf_item.c - 1.165 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_buf_item.c.diff?r1=text&tr1=1.165&r2=text&tr2=1.164&f=h - Ensure xfs_bawrite() errors are checked. fs/xfs/xfs_inode_item.c - 1.134 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_inode_item.c.diff?r1=text&tr1=1.134&r2=text&tr2=1.133&f=h - Ensure xfs_bawrite() errors are checked. fs/xfs/xfs_inode.c - 1.497 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_inode.c.diff?r1=text&tr1=1.497&r2=text&tr2=1.496&f=h - Ensure xfs_bawrite() errors are checked. fs/xfs/quota/xfs_dquot_item.c - 1.21 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_dquot_item.c.diff?r1=text&tr1=1.21&r2=text&tr2=1.20&f=h - Ensure xfs_bawrite() errors are checked. fs/xfs/quota/xfs_dquot.c - 1.32 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_dquot.c.diff?r1=text&tr1=1.32&r2=text&tr2=1.31&f=h - Ensure xfs_bawrite() errors are checked. From owner-xfs@oss.sgi.com Wed Apr 9 17:40:42 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 17:40:49 -0700 (PDT) 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.0 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 m3A0ed9h028620 for ; Wed, 9 Apr 2008 17:40:41 -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 KAA19332; Thu, 10 Apr 2008 10:41:17 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 6D96658C4C15; Thu, 10 Apr 2008 10:41:17 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - xfs_bdwrite() does not return errors. Message-Id: <20080410004117.6D96658C4C15@chook.melbourne.sgi.com> Date: Thu, 10 Apr 2008 10:41:17 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15327 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs xfs_bdwrite() does not return errors. xfs_bdwrite() cannot return an error; it only queues buffers to the delayed write list and as such never encounters anything that can fail. Mark it void. Date: Thu Apr 10 10:41:01 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30825a fs/xfs/linux-2.6/xfs_buf.h - 1.124 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_buf.h.diff?r1=text&tr1=1.124&r2=text&tr2=1.123&f=h - xfs_bdwrite() does not return errors. fs/xfs/linux-2.6/xfs_buf.c - 1.254 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_buf.c.diff?r1=text&tr1=1.254&r2=text&tr2=1.253&f=h - xfs_bdwrite() does not return errors. From owner-xfs@oss.sgi.com Wed Apr 9 17:42:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 17:42:25 -0700 (PDT) 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.0 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 m3A0gEJU029094 for ; Wed, 9 Apr 2008 17:42:17 -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 KAA19383; Thu, 10 Apr 2008 10:42:52 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 100DB58C4C15; Thu, 10 Apr 2008 10:42:52 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Catch unwritten extent conversion errors. Message-Id: <20080410004252.100DB58C4C15@chook.melbourne.sgi.com> Date: Thu, 10 Apr 2008 10:42:52 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15328 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Catch unwritten extent conversion errors. On unwritten I/O completion, we fail to propagate an error when converting the extent to a written extent. This means that the I/O silently fails. propagate the error onto the ioend so that the inode is marked with an error appropriately. Date: Thu Apr 10 10:42:31 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30826a fs/xfs/linux-2.6/xfs_aops.c - 1.161 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_aops.c.diff?r1=text&tr1=1.161&r2=text&tr2=1.160&f=h - Catch unwritten extent conversion errors. From owner-xfs@oss.sgi.com Wed Apr 9 17:45:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 17:45:18 -0700 (PDT) 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.0 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 m3A0j7jV029709 for ; Wed, 9 Apr 2008 17:45:10 -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 KAA19543; Thu, 10 Apr 2008 10:45:45 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 8562C58C4C15; Thu, 10 Apr 2008 10:45:45 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - xfs_iflush_fork() never returns an error. Message-Id: <20080410004545.8562C58C4C15@chook.melbourne.sgi.com> Date: Thu, 10 Apr 2008 10:45:45 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15329 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs xfs_iflush_fork() never returns an error. xfs_iflush_fork() never returns an error. Mark it void and clean up the code calling it that checks for errors. Date: Thu Apr 10 10:45:27 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30827a fs/xfs/xfs_inode.c - 1.498 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_inode.c.diff?r1=text&tr1=1.498&r2=text&tr2=1.497&f=h - xfs_iflush_fork() never returns an error. From owner-xfs@oss.sgi.com Wed Apr 9 17:47:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 17:47:14 -0700 (PDT) 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.0 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 m3A0l4TQ030196 for ; Wed, 9 Apr 2008 17:47:06 -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 KAA19603; Thu, 10 Apr 2008 10:47:42 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 5B4C858C4C15; Thu, 10 Apr 2008 10:47:42 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Mark xfs_bulkstat_one_dinode() void. Message-Id: <20080410004742.5B4C858C4C15@chook.melbourne.sgi.com> Date: Thu, 10 Apr 2008 10:47:42 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15330 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs xfs_bulkstat_one_dinode() never returns an error. Mark it void. Date: Thu Apr 10 10:47:12 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30828a fs/xfs/xfs_itable.c - 1.163 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_itable.c.diff?r1=text&tr1=1.163&r2=text&tr2=1.162&f=h - Make xfs_bulkstat_one_dinode() void. From owner-xfs@oss.sgi.com Wed Apr 9 17:49:01 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 17:49:08 -0700 (PDT) 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.0 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 m3A0mwbC030668 for ; Wed, 9 Apr 2008 17:49:00 -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 KAA19674; Thu, 10 Apr 2008 10:49:36 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 8772558C4C15; Thu, 10 Apr 2008 10:49:36 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Catch errors from xfs_imap() Message-Id: <20080410004936.8772558C4C15@chook.melbourne.sgi.com> Date: Thu, 10 Apr 2008 10:49:36 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15331 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Catch errors from xfs_imap(). Catch errors from xfs_imap() in log recovery when we might be trying to map an invalid inode number due to a corrupted log. Date: Thu Apr 10 10:49:21 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30829a fs/xfs/xfs_log_recover.c - 1.342 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log_recover.c.diff?r1=text&tr1=1.342&r2=text&tr2=1.341&f=h - Catch errors from xfs_imap(). From owner-xfs@oss.sgi.com Wed Apr 9 17:51:47 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 17:51:55 -0700 (PDT) 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.0 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 m3A0pijl031213 for ; Wed, 9 Apr 2008 17:51:46 -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 KAA19806; Thu, 10 Apr 2008 10:52:22 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 6ACB158C4C15; Thu, 10 Apr 2008 10:52:22 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Don't allow silent errors in xfs_inactive(). Message-Id: <20080410005222.6ACB158C4C15@chook.melbourne.sgi.com> Date: Thu, 10 Apr 2008 10:52:22 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15332 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Don't allow silent errors in xfs_inactive(). xfs_inactive() fails to report errors when committing the inactive transaction. Hence we can get silent failures either finishing off the truncation or committing the transaction. Even if we get errors, we need to continue, so simply warn loudly to the system if we get errors here. Date: Thu Apr 10 10:52:04 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30830a fs/xfs/xfs_vnodeops.c - 1.749 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.c.diff?r1=text&tr1=1.749&r2=text&tr2=1.748&f=h - Don't allow silent errors in xfs_inactive(). From owner-xfs@oss.sgi.com Wed Apr 9 17:53:47 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 17:53:55 -0700 (PDT) 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.0 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 m3A0rjnp031714 for ; Wed, 9 Apr 2008 17:53:46 -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 KAA19867; Thu, 10 Apr 2008 10:54:23 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 0AA5C58C4C15; Thu, 10 Apr 2008 10:54:23 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Check for errors when changing buffer pointers. Message-Id: <20080410005423.0AA5C58C4C15@chook.melbourne.sgi.com> Date: Thu, 10 Apr 2008 10:54:23 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15333 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Check for errors when changing buffer pointers. xfs_buf_associate_memory() can fail, but the return is never checked. Propagate the error through XFS_BUF_SET_PTR() so that failures are detected. Date: Thu Apr 10 10:54:04 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30831a fs/xfs/xfs_log_recover.c - 1.343 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log_recover.c.diff?r1=text&tr1=1.343&r2=text&tr2=1.342&f=h - Check for errors when changing buffer pointers. From owner-xfs@oss.sgi.com Wed Apr 9 18:10:50 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 18:11:00 -0700 (PDT) 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.0 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 m3A1AkEk001551 for ; Wed, 9 Apr 2008 18:10:49 -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 LAA20077; Thu, 10 Apr 2008 11:01:44 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 94DA258C4C15; Thu, 10 Apr 2008 11:01:44 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 980084 - Catch log unmount failures. Message-Id: <20080410010144.94DA258C4C15@chook.melbourne.sgi.com> Date: Thu, 10 Apr 2008 11:01:44 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15334 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Catch log unmount failures. Unmounting the log can fail. unlikely, but it can. Catch all the error conditions an make sure it's propagated upwards. Date: Thu Apr 10 11:01:28 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30833a fs/xfs/xfs_log.c - 1.356 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log.c.diff?r1=text&tr1=1.356&r2=text&tr2=1.355&f=h - Catch log unmount failures. From owner-xfs@oss.sgi.com Wed Apr 9 18:10:53 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 18:11:10 -0700 (PDT) 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.0 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 m3A1AkEm001551 for ; Wed, 9 Apr 2008 18:10:52 -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 KAA19928; Thu, 10 Apr 2008 10:59:43 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id C707C58C4C15; Thu, 10 Apr 2008 10:59:42 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Sanitise xfs_log_force error checking. Message-Id: <20080410005942.C707C58C4C15@chook.melbourne.sgi.com> Date: Thu, 10 Apr 2008 10:59:42 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15335 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Sanitise xfs_log_force error checking. xfs_log_force() is declared to return an error, but we almost never check it. We don't need to check it in most cases; if there's a log I/O error then we'll be shutting down the filesystem anyway and that means we'll catch the error somewhere else. However, on certain calls we should be returning an error - sync transactions, fsync, sync writes, etc. so this isn't a pure black and white distinction. Hence make xfs_log_force() a void function that issues a warning to the syslog on error, and call _xfs_log_force() in all the places where we actually care about the error status returned. Date: Thu Apr 10 10:59:08 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30832a fs/xfs/xfs_log.h - 1.81 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log.h.diff?r1=text&tr1=1.81&r2=text&tr2=1.80&f=h - Sanitise xfs_log_force error checking. fs/xfs/xfs_log.c - 1.355 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log.c.diff?r1=text&tr1=1.355&r2=text&tr2=1.354&f=h - Sanitise xfs_log_force error checking. fs/xfs/xfs_rw.c - 1.400 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_rw.c.diff?r1=text&tr1=1.400&r2=text&tr2=1.399&f=h - Sanitise xfs_log_force error checking. fs/xfs/linux-2.6/xfs_ksyms.c - 1.82 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_ksyms.c.diff?r1=text&tr1=1.82&r2=text&tr2=1.81&f=h - Sanitise xfs_log_force error checking. From owner-xfs@oss.sgi.com Wed Apr 9 18:47:10 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 18:47:16 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_15 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 m3A1l6pn006148 for ; Wed, 9 Apr 2008 18:47:09 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA20879; Thu, 10 Apr 2008 11:47:40 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3A1ldsT127218544; Thu, 10 Apr 2008 11:47:40 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3A1lcJL127842388; Thu, 10 Apr 2008 11:47:38 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 10 Apr 2008 11:47:38 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [patch] fix up xfsbdstrat b0rkage Message-ID: <20080410014737.GO108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15336 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Not sure how this got through testing, but it's screwed. --- Don't error out on good I/Os in xfsbdstrat(). Signed-off-by: Dave Chinner --- fs/xfs/linux-2.6/xfs_lrw.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_lrw.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_lrw.c 2008-04-10 11:02:30.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_lrw.c 2008-04-10 11:40:54.533326543 +1000 @@ -885,8 +885,10 @@ xfsbdstrat( struct xfs_buf *bp) { ASSERT(mp); - if (!XFS_FORCED_SHUTDOWN(mp)) + if (!XFS_FORCED_SHUTDOWN(mp)) { xfs_buf_iorequest(bp); + return; + } xfs_buftrace("XFSBDSTRAT IOERROR", bp); xfs_bioerror_relse(bp); From owner-xfs@oss.sgi.com Wed Apr 9 19:03:34 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 19:03:40 -0700 (PDT) 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_15 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 m3A23Ubo007970 for ; Wed, 9 Apr 2008 19:03:32 -0700 Received: from cxfsmac10.melbourne.sgi.com (cxfsmac10.melbourne.sgi.com [134.14.55.100]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA21152; Thu, 10 Apr 2008 12:04:04 +1000 Message-ID: <47FD7594.10206@sgi.com> Date: Thu, 10 Apr 2008 12:04:04 +1000 From: Donald Douwsma User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [patch] fix up xfsbdstrat b0rkage References: <20080410014737.GO108924158@sgi.com> In-Reply-To: <20080410014737.GO108924158@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15337 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: donaldd@sgi.com Precedence: bulk X-list: xfs David Chinner wrote: > Not sure how this got through testing, but it's screwed. > > --- > > Don't error out on good I/Os in xfsbdstrat(). > > Signed-off-by: Dave Chinner > --- > fs/xfs/linux-2.6/xfs_lrw.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_lrw.c > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_lrw.c 2008-04-10 11:02:30.000000000 +1000 > +++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_lrw.c 2008-04-10 11:40:54.533326543 +1000 > @@ -885,8 +885,10 @@ xfsbdstrat( > struct xfs_buf *bp) > { > ASSERT(mp); > - if (!XFS_FORCED_SHUTDOWN(mp)) > + if (!XFS_FORCED_SHUTDOWN(mp)) { > xfs_buf_iorequest(bp); > + return; > + } > > xfs_buftrace("XFSBDSTRAT IOERROR", bp); > xfs_bioerror_relse(bp); Looks good Dave, Don From owner-xfs@oss.sgi.com Wed Apr 9 20:13:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 20:14:46 -0700 (PDT) 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.0 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 m3A3DYsb016384 for ; Wed, 9 Apr 2008 20:13:37 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA22686; Thu, 10 Apr 2008 13:14:07 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3A3E6sT127702064; Thu, 10 Apr 2008 13:14:07 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3A3E5Fa125543655; Thu, 10 Apr 2008 13:14:05 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 10 Apr 2008 13:14:05 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [patch] ensure inodes are joined in xfs_itruncate_finish Message-ID: <20080410031405.GR108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15338 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On success, we still need to join the inode to the current transaction in xfs_itruncate_finish(). Fixes regression from error handling changes. Note that this does some comment reformatting (to wrap at 80 columns) for comments that were modified. Signed-off-by: Dave Chinner --- fs/xfs/xfs_inode.c | 149 +++++++++++++++++++++++++---------------------------- 1 file changed, 71 insertions(+), 78 deletions(-) Index: 2.6.x-xfs-new/fs/xfs/xfs_inode.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_inode.c 2008-04-10 11:02:38.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_inode.c 2008-04-10 12:27:43.005660375 +1000 @@ -1464,51 +1464,50 @@ xfs_itruncate_start( } /* - * Shrink the file to the given new_size. The new - * size must be smaller than the current size. - * This will free up the underlying blocks - * in the removed range after a call to xfs_itruncate_start() - * or xfs_atruncate_start(). - * - * The transaction passed to this routine must have made - * a permanent log reservation of at least XFS_ITRUNCATE_LOG_RES. - * This routine may commit the given transaction and - * start new ones, so make sure everything involved in - * the transaction is tidy before calling here. - * Some transaction will be returned to the caller to be - * committed. The incoming transaction must already include - * the inode, and both inode locks must be held exclusively. - * The inode must also be "held" within the transaction. On - * return the inode will be "held" within the returned transaction. - * This routine does NOT require any disk space to be reserved - * for it within the transaction. - * - * The fork parameter must be either xfs_attr_fork or xfs_data_fork, - * and it indicates the fork which is to be truncated. For the - * attribute fork we only support truncation to size 0. - * - * We use the sync parameter to indicate whether or not the first - * transaction we perform might have to be synchronous. For the attr fork, - * it needs to be so if the unlink of the inode is not yet known to be - * permanent in the log. This keeps us from freeing and reusing the - * blocks of the attribute fork before the unlink of the inode becomes - * permanent. - * - * For the data fork, we normally have to run synchronously if we're - * being called out of the inactive path or we're being called - * out of the create path where we're truncating an existing file. - * Either way, the truncate needs to be sync so blocks don't reappear - * in the file with altered data in case of a crash. wsync filesystems - * can run the first case async because anything that shrinks the inode - * has to run sync so by the time we're called here from inactive, the - * inode size is permanently set to 0. - * - * Calls from the truncate path always need to be sync unless we're - * in a wsync filesystem and the file has already been unlinked. - * - * The caller is responsible for correctly setting the sync parameter. - * It gets too hard for us to guess here which path we're being called - * out of just based on inode state. + * Shrink the file to the given new_size. The new size must be smaller than + * the current size. This will free up the underlying blocks in the removed + * range after a call to xfs_itruncate_start() or xfs_atruncate_start(). + * + * The transaction passed to this routine must have made a permanent log + * reservation of at least XFS_ITRUNCATE_LOG_RES. This routine may commit the + * given transaction and start new ones, so make sure everything involved in + * the transaction is tidy before calling here. Some transaction will be + * returned to the caller to be committed. The incoming transaction must + * already include the inode, and both inode locks must be held exclusively. + * The inode must also be "held" within the transaction. On return the inode + * will be "held" within the returned transaction. This routine does NOT + * require any disk space to be reserved for it within the transaction. + * + * The fork parameter must be either xfs_attr_fork or xfs_data_fork, and it + * indicates the fork which is to be truncated. For the attribute fork we only + * support truncation to size 0. + * + * We use the sync parameter to indicate whether or not the first transaction + * we perform might have to be synchronous. For the attr fork, it needs to be + * so if the unlink of the inode is not yet known to be permanent in the log. + * This keeps us from freeing and reusing the blocks of the attribute fork + * before the unlink of the inode becomes permanent. + * + * For the data fork, we normally have to run synchronously if we're being + * called out of the inactive path or we're being called out of the create path + * where we're truncating an existing file. Either way, the truncate needs to + * be sync so blocks don't reappear in the file with altered data in case of a + * crash. wsync filesystems can run the first case async because anything that + * shrinks the inode has to run sync so by the time we're called here from + * inactive, the inode size is permanently set to 0. + * + * Calls from the truncate path always need to be sync unless we're in a wsync + * filesystem and the file has already been unlinked. + * + * The caller is responsible for correctly setting the sync parameter. It gets + * too hard for us to guess here which path we're being called out of just + * based on inode state. + * + * If we get an error, we must return with the inode locked and linked into the + * current transaction. This keeps things simple for the higher level code, + * because it always knows that the inode is locked and held in the transaction + * that returns to it whether errors occur or not. We don't mark the inode + * dirty on error so that transactions can be easily aborted if possible. */ int xfs_itruncate_finish( @@ -1687,45 +1686,51 @@ xfs_itruncate_finish( */ error = xfs_bmap_finish(tp, &free_list, &committed); ntp = *tp; + if (committed) { + /* link the inode into the next xact in the chain */ + xfs_trans_ijoin(ntp, ip, + XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); + xfs_trans_ihold(ntp, ip); + } + if (error) { /* - * If the bmap finish call encounters an error, - * return to the caller where the transaction - * can be properly aborted. We just need to - * make sure we're not holding any resources - * that we were not when we came in. + * If the bmap finish call encounters an error, return + * to the caller where the transaction can be properly + * aborted. We just need to make sure we're not + * holding any resources that we were not when we came + * in. * - * Aborting from this point might lose some - * blocks in the file system, but oh well. + * Aborting from this point might lose some blocks in + * the file system, but oh well. */ xfs_bmap_cancel(&free_list); - if (committed) - goto error_join; return error; } if (committed) { /* - * The first xact was committed, so add the inode to - * the new one. Mark it dirty so it will be logged and + * Mark the inode dirty so it will be logged and * moved forward in the log as part of every commit. */ - xfs_trans_ijoin(ntp, ip, - XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); - xfs_trans_ihold(ntp, ip); xfs_trans_log_inode(ntp, ip, XFS_ILOG_CORE); } + ntp = xfs_trans_dup(ntp); error = xfs_trans_commit(*tp, 0); *tp = ntp; - if (error) - goto error_join; - error = xfs_trans_reserve(ntp, 0, XFS_ITRUNCATE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, - XFS_ITRUNCATE_LOG_COUNT); - if (error) - goto error_join; + /* link the inode into the next transaction in the chain */ + xfs_trans_ijoin(ntp, ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); + xfs_trans_ihold(ntp, ip); + + if (!error) + error = xfs_trans_reserve(ntp, 0, + XFS_ITRUNCATE_LOG_RES(mp), 0, + XFS_TRANS_PERM_LOG_RES, + XFS_ITRUNCATE_LOG_COUNT); + if (error) + return error; } /* * Only update the size in the case of the data fork, but @@ -1757,18 +1762,6 @@ xfs_itruncate_finish( (ip->i_d.di_nextents == 0)); xfs_itrunc_trace(XFS_ITRUNC_FINISH2, ip, 0, new_size, 0, 0); return 0; - -error_join: - /* - * Add the inode being truncated to the next chained transaction. This - * keeps things simple for the higher level code, because it always - * knows that the inode is locked and held in the transaction that - * returns to it whether errors occur or not. We don't mark the inode - * dirty so that this transaction can be easily aborted if possible. - */ - xfs_trans_ijoin(ntp, ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); - xfs_trans_ihold(ntp, ip); - return error; } From owner-xfs@oss.sgi.com Wed Apr 9 20:20:58 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 20:21:05 -0700 (PDT) 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.0 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 m3A3Kscc021925 for ; Wed, 9 Apr 2008 20:20:57 -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 NAA22911; Thu, 10 Apr 2008 13:21:29 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id E612358C4C15; Thu, 10 Apr 2008 13:21:28 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980084 - Don't error out on good I/Os in xfsbdstrat Message-Id: <20080410032128.E612358C4C15@chook.melbourne.sgi.com> Date: Thu, 10 Apr 2008 13:21:28 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15339 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Don't error out on good I/Os. xfsbdstrat() made all I/Os error out, good or bad. Fix it. Date: Thu Apr 10 13:21:03 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: donaldd@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30836a fs/xfs/linux-2.6/xfs_lrw.c - 1.279 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_lrw.c.diff?r1=text&tr1=1.279&r2=text&tr2=1.278&f=h - Don't error out on good I/Os in xfsbdstrat() From owner-xfs@oss.sgi.com Wed Apr 9 20:25:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 20:25:33 -0700 (PDT) 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.0 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 m3A3PMhb022567 for ; Wed, 9 Apr 2008 20:25:25 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA23013; Thu, 10 Apr 2008 13:25:57 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3A3PusT127727274; Thu, 10 Apr 2008 13:25:57 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3A3Pt6o126820371; Thu, 10 Apr 2008 13:25:55 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 10 Apr 2008 13:25:55 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [patch] fix logic error in xfs_alloc_ag_vextent_near() Message-ID: <20080410032555.GS108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15340 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Fix a logic error in xfs_alloc_ag_vextent_near(). This is a regression introduced by the error handling changes. Signed-off-by: Dave Chinner --- fs/xfs/xfs_alloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: 2.6.x-xfs-new/fs/xfs/xfs_alloc.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_alloc.c 2008-04-10 10:00:50.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_alloc.c 2008-04-10 13:10:17.948126881 +1000 @@ -838,7 +838,7 @@ xfs_alloc_ag_vextent_near( XFS_WANT_CORRUPTED_GOTO(i == 1, error0); xfs_alloc_compute_aligned(ltbno, ltlen, args->alignment, args->minlen, <bnoa, <lena); - if (ltlena >= args->minlen) + if (ltlena < args->minlen) continue; args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); xfs_alloc_fix_len(args); From owner-xfs@oss.sgi.com Wed Apr 9 20:26:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 20:27:05 -0700 (PDT) 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.0 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 m3A3QrNc022981 for ; Wed, 9 Apr 2008 20:26:55 -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 NAA23044; Thu, 10 Apr 2008 13:27:27 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 0087E58C4C15; Thu, 10 Apr 2008 13:27:26 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - cleanup: refactor xfs_dir2_leafn_lookup_int() Message-Id: <20080410032727.0087E58C4C15@chook.melbourne.sgi.com> Date: Thu, 10 Apr 2008 13:27:26 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15341 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Split xfs_dir2_leafn_lookup_int into its two pieces of functionality Date: Thu Apr 10 13:26:21 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/2.6.x-xfs Inspected by: hch The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30834a fs/xfs/xfs_dir2_node.c - 1.61 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2_node.c.diff?r1=text&tr1=1.61&r2=text&tr2=1.60&f=h - Split xfs_dir2_leafn_lookup_int into its two pieces of functionality From owner-xfs@oss.sgi.com Wed Apr 9 21:19:31 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 21:19:39 -0700 (PDT) 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.0 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 m3A4JSaQ028254 for ; Wed, 9 Apr 2008 21:19:29 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA24168; Thu, 10 Apr 2008 14:20:02 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3A4K2sT127886579; Thu, 10 Apr 2008 14:20:02 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3A4K1Vp127808500; Thu, 10 Apr 2008 14:20:01 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 10 Apr 2008 14:20:01 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [patch] remove unnecessary periodic superblock logging. Message-ID: <20080410042001.GF108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15342 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Remove periodic logging of in-core superblock counters. xfssyncd triggers the logging of superblock counters every 30s if the filesystem is made with lazy-count=1. This will prevent disks from idling and spinning down as there will be a log write every 30s. With the way counter recovery works for lazy-count=1, this code is unnecessary and provides no real benefit, so just remove it. Signed-off-by: Dave Chinner --- fs/xfs/linux-2.6/xfs_super.c | 3 +-- fs/xfs/linux-2.6/xfs_vfs.h | 1 - fs/xfs/xfs_vfsops.c | 13 ------------- 3 files changed, 1 insertion(+), 16 deletions(-) Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_super.c 2008-04-10 10:02:14.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_super.c 2008-04-10 10:02:58.419346393 +1000 @@ -1028,8 +1028,7 @@ xfs_sync_worker( int error; if (!(mp->m_flags & XFS_MOUNT_RDONLY)) - error = xfs_sync(mp, SYNC_FSDATA | SYNC_BDFLUSH | SYNC_ATTR | - SYNC_REFCACHE | SYNC_SUPER); + error = xfs_sync(mp, SYNC_FSDATA | SYNC_BDFLUSH | SYNC_ATTR); mp->m_sync_seq++; wake_up(&mp->m_wait_single_sync_task); } Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_vfs.h =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_vfs.h 2008-04-10 10:00:25.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_vfs.h 2008-04-10 10:02:58.419346393 +1000 @@ -49,7 +49,6 @@ typedef struct bhv_vfs_sync_work { #define SYNC_REFCACHE 0x0040 /* prune some of the nfs ref cache */ #define SYNC_REMOUNT 0x0080 /* remount readonly, no dummy LRs */ #define SYNC_IOWAIT 0x0100 /* wait for all I/O to complete */ -#define SYNC_SUPER 0x0200 /* flush superblock to disk */ /* * When remounting a filesystem read-only or freezing the filesystem, Index: 2.6.x-xfs-new/fs/xfs/xfs_vfsops.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_vfsops.c 2008-04-10 10:01:54.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_vfsops.c 2008-04-10 10:03:35.288729547 +1000 @@ -1326,21 +1326,8 @@ xfs_syncsub( } /* - * If asked, update the disk superblock with incore counter values if we - * are using non-persistent counters so that they don't get too far out - * of sync if we crash or get a forced shutdown. We don't want to force - * this to disk, just get a transaction into the iclogs.... - */ - if (flags & SYNC_SUPER) { - error = xfs_log_sbcount(mp, 0); - if (error) - last_error = error; - } - - /* * Now check to see if the log needs a "dummy" transaction. */ - if (!(flags & SYNC_REMOUNT) && xfs_log_need_covered(mp)) { xfs_trans_t *tp; xfs_inode_t *ip; From owner-xfs@oss.sgi.com Wed Apr 9 21:26:31 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 21:26:38 -0700 (PDT) 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.0 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 m3A4QRFP029146 for ; Wed, 9 Apr 2008 21:26:30 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA24232; Thu, 10 Apr 2008 14:27:02 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3A4R2sT127892595; Thu, 10 Apr 2008 14:27:02 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3A4R1lT127925158; Thu, 10 Apr 2008 14:27:01 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 10 Apr 2008 14:27:01 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [patch] xfsqa - fix redirection in 091 Message-ID: <20080410042701.GG108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15343 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Fix the filtering of xfsinfo by punting stdout to /dev/null. Signed-off-by: Dave Chinner --- xfstests/091 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: xfs-cmds/xfstests/091 =================================================================== --- xfs-cmds.orig/xfstests/091 2008-04-08 12:25:08.000000000 +1000 +++ xfs-cmds/xfstests/091 2008-04-10 07:33:10.674694972 +1000 @@ -50,7 +50,7 @@ kernel=`uname -r | sed -e 's/\(2\..\).* # 2.6 Linux kernels support sector aligned direct I/O only if [ "$HOSTOS" = "Linux" -a "$kernel" = "2.6" ]; then - xfs_info $TEST_DIR | _filter_mkfs 2> $tmp.info + xfs_info $TEST_DIR | _filter_mkfs 2> $tmp.info > /dev/null if [ $? -eq 0 ]; then source $tmp.info bsize=$sectsz From owner-xfs@oss.sgi.com Wed Apr 9 21:30:52 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 21:31:00 -0700 (PDT) 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.0 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 m3A4UmI3029911 for ; Wed, 9 Apr 2008 21:30:51 -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 OAA24470; Thu, 10 Apr 2008 14:31:22 +1000 To: "David Chinner" , xfs-dev Subject: Re: [patch] xfsqa - fix redirection in 091 From: "Barry Naujok" Organization: SGI Cc: xfs-oss Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080410042701.GG108924158@sgi.com> Date: Thu, 10 Apr 2008 14:31:59 +1000 Message-ID: In-Reply-To: <20080410042701.GG108924158@sgi.com> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m3A4UqI3029923 X-archive-position: 15344 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Thu, 10 Apr 2008 14:27:01 +1000, David Chinner wrote: > Fix the filtering of xfsinfo by punting stdout to /dev/null. Ok. > Signed-off-by: Dave Chinner > --- > xfstests/091 | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > Index: xfs-cmds/xfstests/091 > =================================================================== > --- xfs-cmds.orig/xfstests/091 2008-04-08 12:25:08.000000000 +1000 > +++ xfs-cmds/xfstests/091 2008-04-10 07:33:10.674694972 +1000 > @@ -50,7 +50,7 @@ kernel=`uname -r | sed -e 's/\(2\..\).* > # 2.6 Linux kernels support sector aligned direct I/O only > if [ "$HOSTOS" = "Linux" -a "$kernel" = "2.6" ]; then > - xfs_info $TEST_DIR | _filter_mkfs 2> $tmp.info > + xfs_info $TEST_DIR | _filter_mkfs 2> $tmp.info > /dev/null > if [ $? -eq 0 ]; then > source $tmp.info > bsize=$sectsz > > From owner-xfs@oss.sgi.com Wed Apr 9 21:32:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 21:32:35 -0700 (PDT) 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.9 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 m3A4WNjd030346 for ; Wed, 9 Apr 2008 21:32:25 -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 OAA24514; Thu, 10 Apr 2008 14:32:58 +1000 Message-ID: <47FD987A.40804@sgi.com> Date: Thu, 10 Apr 2008 14:32:58 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [patch] xfsqa - fix redirection in 091 References: <20080410042701.GG108924158@sgi.com> In-Reply-To: <20080410042701.GG108924158@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15345 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs David Chinner wrote: > Fix the filtering of xfsinfo by punting stdout to /dev/null. > > Signed-off-by: Dave Chinner > --- > xfstests/091 | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > Index: xfs-cmds/xfstests/091 > =================================================================== > --- xfs-cmds.orig/xfstests/091 2008-04-08 12:25:08.000000000 +1000 > +++ xfs-cmds/xfstests/091 2008-04-10 07:33:10.674694972 +1000 > @@ -50,7 +50,7 @@ kernel=`uname -r | sed -e 's/\(2\..\).* > > # 2.6 Linux kernels support sector aligned direct I/O only > if [ "$HOSTOS" = "Linux" -a "$kernel" = "2.6" ]; then > - xfs_info $TEST_DIR | _filter_mkfs 2> $tmp.info > + xfs_info $TEST_DIR | _filter_mkfs 2> $tmp.info > /dev/null > if [ $? -eq 0 ]; then > source $tmp.info > bsize=$sectsz fine --Tim From owner-xfs@oss.sgi.com Wed Apr 9 21:34:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 21:34:10 -0700 (PDT) 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.0 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 m3A4Xxbo030828 for ; Wed, 9 Apr 2008 21:34:02 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA24556; Thu, 10 Apr 2008 14:34:34 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3A4YYsT127938848; Thu, 10 Apr 2008 14:34:34 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3A4YWk7125626509; Thu, 10 Apr 2008 14:34:32 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 10 Apr 2008 14:34:32 +1000 From: David Chinner To: David Chinner Cc: Christoph Hellwig , xfs-dev , xfs-oss Subject: Re: [Patch] unique per-AG inode generation number initialisation Message-ID: <20080410043432.GH108924158@sgi.com> References: <20080401231815.GW103491721@sgi.com> <20080407125738.GD27350@infradead.org> <20080407215203.GB108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080407215203.GB108924158@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15346 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Ping? Any further concerns on this? I'd like to get this resolved quickly..... Cheers, Dave. On Tue, Apr 08, 2008 at 07:52:03AM +1000, David Chinner wrote: > On Mon, Apr 07, 2008 at 08:57:38AM -0400, Christoph Hellwig wrote: > > I don't really like this. The chance to hit a previously used generation > > seems to high. > > The chance to hit an existing generation number is almost non-existant. > > The counter is incremented on every allocation and not just when > inode chunks are allocated on disk. Hence a series of "allocate > chunk, unlink + free chunk, realloc chunk" is guaranteed to get a > higher generation number on reallocation, as is the "allocate a > chunk, while [1] {allocate; unlink}, unlink chunk, reallocate > chunk." These are the issues that are causing use problems right > now. > > The generation number won't get reused at all until it wraps at 2^32 > allocations within the AG, and then you've got to have a chunk of inodes > get freed and reallocated at the same time the counter matches an inode > generation number. While not impossible, it'll be pretty rare.... > > > What about making the first few bits of each generation > > number a per-ag counter that's incremented anytime we deallocate an inode > > cluster? > > First thing I considered - increment on chunk freeing is not > sufficient guarantee of short-term uniqueness. To guarantee short > term uniqueness, the generation number used to initialise the inode > chunk if it is immediately reallocated needs to be greater than the > maximum used by any inode in the chunk that got freed. Now the "counter" > becomes a "maximum generation number used in the AG" value. This > also adds significant complexity to xfs_icluster_free() as we have to > look at every inode in the chunk and not just the ones that are > in-core. > > FWIW, the biggest complexity with this approach is wrapping - how do > you tell what the highest highest generation number in the inode > chunk being freed is when some have wrapped through zero? > > I basically gave up on this approach because of the extra complexity > and nasty, untestable corner cases it introduced into code that is > already complex. A simple incrementing counter solves the short-term > uniqueness problem while still making it very hard to get duplicates in > the long term. If you really, really need long term uniqueness, then > use 'ikeep'. > > Cheers, > > Dave. > -- > Dave Chinner > Principal Engineer > SGI Australian Software Group -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 9 21:35:34 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 21:35:42 -0700 (PDT) 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.0 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 m3A4ZVQr031295 for ; Wed, 9 Apr 2008 21:35:33 -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 OAA24618; Thu, 10 Apr 2008 14:36:05 +1000 To: "David Chinner" , xfs-dev Subject: Re: [patch] fix logic error in xfs_alloc_ag_vextent_near() From: "Barry Naujok" Organization: SGI Cc: xfs-oss Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080410032555.GS108924158@sgi.com> Date: Thu, 10 Apr 2008 14:36:43 +1000 Message-ID: In-Reply-To: <20080410032555.GS108924158@sgi.com> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m3A4ZYQr031303 X-archive-position: 15347 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Thu, 10 Apr 2008 13:25:55 +1000, David Chinner wrote: > Fix a logic error in xfs_alloc_ag_vextent_near(). This is > a regression introduced by the error handling changes. Ah, I see how you made the mistake, looks good now. (ie. was if (!xfs_alloc_compute_aligned() continue;) > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_alloc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > Index: 2.6.x-xfs-new/fs/xfs/xfs_alloc.c > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_alloc.c 2008-04-10 10:00:50.000000000 > +1000 > +++ 2.6.x-xfs-new/fs/xfs/xfs_alloc.c 2008-04-10 13:10:17.948126881 +1000 > @@ -838,7 +838,7 @@ xfs_alloc_ag_vextent_near( > XFS_WANT_CORRUPTED_GOTO(i == 1, error0); > xfs_alloc_compute_aligned(ltbno, ltlen, args->alignment, > args->minlen, <bnoa, <lena); > - if (ltlena >= args->minlen) > + if (ltlena < args->minlen) > continue; > args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); > xfs_alloc_fix_len(args); From owner-xfs@oss.sgi.com Wed Apr 9 21:42:31 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 21:42:38 -0700 (PDT) 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.0 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 m3A4gQ0j032218 for ; Wed, 9 Apr 2008 21:42:30 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA24746; Thu, 10 Apr 2008 14:43:00 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3A4h0sT127749861; Thu, 10 Apr 2008 14:43:00 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3A4gxn9126976387; Thu, 10 Apr 2008 14:42:59 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 10 Apr 2008 14:42:59 +1000 From: David Chinner To: David Chinner Cc: xfs-dev , xfs-oss Subject: Re: [patch] xfsqa - 008 is unreliable on 64k page size Message-ID: <20080410044259.GI108924158@sgi.com> References: <20080408013833.GN108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080408013833.GN108924158@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15348 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Ping? On Tue, Apr 08, 2008 at 11:38:33AM +1000, David Chinner wrote: > Test 008 is unreliable on 64k page size. The I/O size is large > enough that the probability of extent merging results in intermittent > failures due to fewer extents that the +/- 10% tolerance allows. > > Fix by making the files larger. > > Signed-off-by: Dave Chinner > --- > xfstests/008 | 10 +++++----- > xfstests/008.out | 10 +++++----- > 2 files changed, 10 insertions(+), 10 deletions(-) > > Index: xfs-cmds/xfstests/008 > =================================================================== > --- xfs-cmds.orig/xfstests/008 2006-11-14 19:57:39.000000000 +1100 > +++ xfs-cmds/xfstests/008 2008-04-08 10:18:10.641024202 +1000 > @@ -79,13 +79,13 @@ _setup_testdir > > rm -f $here/$seq.out.full > > -_do_test 1 50 "-l 5000000 -c 50 -b $pgsize" > -_do_test 2 100 "-l 10000000 -c 100 -b $pgsize" > -_do_test 3 100 "-l 10000000 -c 100 -b 512" # test partial pages > +_do_test 1 50 "-l 50000000 -c 50 -b $pgsize" > +_do_test 2 100 "-l 100000000 -c 100 -b $pgsize" > +_do_test 3 100 "-l 100000000 -c 100 -b 512" # test partial pages > > # rinse, lather, repeat for direct IO > -_do_test 4 50 "-d -l 5000000 -c 50 -b $pgsize" > -_do_test 5 100 "-d -l 10000000 -c 100 -b $pgsize" > +_do_test 4 50 "-d -l 50000000 -c 50 -b $pgsize" > +_do_test 5 100 "-d -l 100000000 -c 100 -b $pgsize" > # note: direct IO requires page aligned IO > > # todo: realtime. > Index: xfs-cmds/xfstests/008.out > =================================================================== > --- xfs-cmds.orig/xfstests/008.out 2006-11-14 19:57:39.000000000 +1100 > +++ xfs-cmds/xfstests/008.out 2008-04-08 11:25:52.584176769 +1000 > @@ -1,21 +1,21 @@ > QA output created by 008 > > -randholes.1 : -l 5000000 -c 50 -b PGSIZE > +randholes.1 : -l 50000000 -c 50 -b PGSIZE > ------------------------------------------ > holes is in range > > -randholes.2 : -l 10000000 -c 100 -b PGSIZE > +randholes.2 : -l 100000000 -c 100 -b PGSIZE > ------------------------------------------ > holes is in range > > -randholes.3 : -l 10000000 -c 100 -b 512 > +randholes.3 : -l 100000000 -c 100 -b 512 > ------------------------------------------ > holes is in range > > -randholes.4 : -d -l 5000000 -c 50 -b PGSIZE > +randholes.4 : -d -l 50000000 -c 50 -b PGSIZE > ------------------------------------------ > holes is in range > > -randholes.5 : -d -l 10000000 -c 100 -b PGSIZE > +randholes.5 : -d -l 100000000 -c 100 -b PGSIZE > ------------------------------------------ > holes is in range -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 9 21:48:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 21:48:50 -0700 (PDT) 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.0 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 m3A4mdIS000625 for ; Wed, 9 Apr 2008 21:48: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 OAA24939; Thu, 10 Apr 2008 14:49:14 +1000 Date: Thu, 10 Apr 2008 14:49:55 +1000 To: "David Chinner" , xfs-dev Subject: Re: [patch] remove unnecessary periodic superblock logging. From: "Barry Naujok" Organization: SGI Cc: xfs-oss Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080410042001.GF108924158@sgi.com> Message-ID: In-Reply-To: <20080410042001.GF108924158@sgi.com> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m3A4mhIS000634 X-archive-position: 15349 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Thu, 10 Apr 2008 14:20:01 +1000, David Chinner wrote: > Remove periodic logging of in-core superblock counters. > > xfssyncd triggers the logging of superblock counters every > 30s if the filesystem is made with lazy-count=1. This will > prevent disks from idling and spinning down as there will > be a log write every 30s. With the way counter recovery > works for lazy-count=1, this code is unnecessary and provides > no real benefit, so just remove it. I'm happy with this (xfs_initialize_perag_data() does the global counter recovery during mount). > Signed-off-by: Dave Chinner > --- > fs/xfs/linux-2.6/xfs_super.c | 3 +-- > fs/xfs/linux-2.6/xfs_vfs.h | 1 - > fs/xfs/xfs_vfsops.c | 13 ------------- > 3 files changed, 1 insertion(+), 16 deletions(-) > > Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_super.c > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_super.c 2008-04-10 > 10:02:14.000000000 +1000 > +++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_super.c 2008-04-10 > 10:02:58.419346393 +1000 > @@ -1028,8 +1028,7 @@ xfs_sync_worker( > int error; > if (!(mp->m_flags & XFS_MOUNT_RDONLY)) > - error = xfs_sync(mp, SYNC_FSDATA | SYNC_BDFLUSH | SYNC_ATTR | > - SYNC_REFCACHE | SYNC_SUPER); > + error = xfs_sync(mp, SYNC_FSDATA | SYNC_BDFLUSH | SYNC_ATTR); > mp->m_sync_seq++; > wake_up(&mp->m_wait_single_sync_task); > } > Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_vfs.h > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_vfs.h 2008-04-10 > 10:00:25.000000000 +1000 > +++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_vfs.h 2008-04-10 > 10:02:58.419346393 +1000 > @@ -49,7 +49,6 @@ typedef struct bhv_vfs_sync_work { > #define SYNC_REFCACHE 0x0040 /* prune some of the nfs ref cache */ > #define SYNC_REMOUNT 0x0080 /* remount readonly, no dummy LRs */ > #define SYNC_IOWAIT 0x0100 /* wait for all I/O to complete */ > -#define SYNC_SUPER 0x0200 /* flush superblock to disk */ > /* > * When remounting a filesystem read-only or freezing the filesystem, > Index: 2.6.x-xfs-new/fs/xfs/xfs_vfsops.c > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_vfsops.c 2008-04-10 10:01:54.000000000 > +1000 > +++ 2.6.x-xfs-new/fs/xfs/xfs_vfsops.c 2008-04-10 10:03:35.288729547 +1000 > @@ -1326,21 +1326,8 @@ xfs_syncsub( > } > /* > - * If asked, update the disk superblock with incore counter values if > we > - * are using non-persistent counters so that they don't get too far out > - * of sync if we crash or get a forced shutdown. We don't want to force > - * this to disk, just get a transaction into the iclogs.... > - */ > - if (flags & SYNC_SUPER) { > - error = xfs_log_sbcount(mp, 0); > - if (error) > - last_error = error; > - } > - > - /* > * Now check to see if the log needs a "dummy" transaction. > */ > - > if (!(flags & SYNC_REMOUNT) && xfs_log_need_covered(mp)) { > xfs_trans_t *tp; > xfs_inode_t *ip; > > From owner-xfs@oss.sgi.com Wed Apr 9 21:51:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 21:51:44 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_73 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 m3A4pX1Y001187 for ; Wed, 9 Apr 2008 21:51:36 -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 OAA25001; Thu, 10 Apr 2008 14:52:07 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 4A84758C4C15; Thu, 10 Apr 2008 14:52:07 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 979087 - xfsqa - fix redirection in 091 Message-Id: <20080410045207.4A84758C4C15@chook.melbourne.sgi.com> Date: Thu, 10 Apr 2008 14:52:07 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15350 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Fix the filtering of xfsinfo by punting stdout to /dev/null. Date: Thu Apr 10 14:51:29 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/xfs-cmds Inspected by: bnaujok,tes The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:30837a xfstests/091 - 1.8 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/091.diff?r1=text&tr1=1.8&r2=text&tr2=1.7&f=h - Fix the filtering of xfsinfo by punting stdout to /dev/null. From owner-xfs@oss.sgi.com Wed Apr 9 22:00:29 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 22:00:37 -0700 (PDT) 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.0 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 m3A50QYH002336 for ; Wed, 9 Apr 2008 22:00:28 -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 PAA25227; Thu, 10 Apr 2008 15:01:01 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 5037E58C4C15; Thu, 10 Apr 2008 15:01:01 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 907752 - Add Czech translation to attr Message-Id: <20080410050101.5037E58C4C15@chook.melbourne.sgi.com> Date: Thu, 10 Apr 2008 15:01:01 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15351 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Date: Thu Apr 10 15:00:13 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/xfs-cmds Inspected by: petr.pisar@atlas.cz The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:30839a attr/po/cs.po - 1.1 - new http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/attr/po/cs.po attr/doc/CHANGES - 1.87 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/attr/doc/CHANGES.diff?r1=text&tr1=1.87&r2=text&tr2=1.86&f=h attr/po/Makefile - 1.11 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/attr/po/Makefile.diff?r1=text&tr1=1.11&r2=text&tr2=1.10&f=h - Add Czech translation From owner-xfs@oss.sgi.com Wed Apr 9 22:01:21 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 22:01:29 -0700 (PDT) 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.0 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 m3A51Ii4002521 for ; Wed, 9 Apr 2008 22:01:20 -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 PAA25247; Thu, 10 Apr 2008 15:01:52 +1000 To: petr.pisar@atlas.cz, xfs@oss.sgi.com Subject: Re: Czech translation for attr-2.4.41 From: "Barry Naujok" Organization: SGI Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080409160843.GA20142@album.bayer.ipv6ia.org> Content-Transfer-Encoding: 7bit Date: Thu, 10 Apr 2008 15:02:36 +1000 Message-ID: In-Reply-To: <20080409160843.GA20142@album.bayer.ipv6ia.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15352 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Thu, 10 Apr 2008 02:08:45 +1000, wrote: > Hello, > > I'v tranlated attr package into Czech language. Patch against version > 2.4.41 > is attached. > > -- Petr Will appear in xfs-cmds CVS tree within a few hours. Regards, Barry. From owner-xfs@oss.sgi.com Wed Apr 9 22:01:35 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 22:01:44 -0700 (PDT) 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.0 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 m3A51VBI002580 for ; Wed, 9 Apr 2008 22:01:34 -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 PAA25258; Thu, 10 Apr 2008 15:02:06 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 3EC8558C4C15; Thu, 10 Apr 2008 15:02:06 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 980084 - fix logic error in xfs_alloc_ag_vextent_near() Message-Id: <20080410050206.3EC8558C4C15@chook.melbourne.sgi.com> Date: Thu, 10 Apr 2008 15:02:06 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15353 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs fix logic error in xfs_alloc_ag_vextent_near() Fix a logic error in xfs_alloc_ag_vextent_near(). This is a regression introduced by the error handling changes. Date: Thu Apr 10 15:01:27 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: bnaujok@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30838a fs/xfs/xfs_alloc.c - 1.193 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_alloc.c.diff?r1=text&tr1=1.193&r2=text&tr2=1.192&f=h - Fix a logic error introduced by the error handling changes. From owner-xfs@oss.sgi.com Wed Apr 9 22:12:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 22:13:06 -0700 (PDT) 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.0 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 m3A5CtaC004309 for ; Wed, 9 Apr 2008 22:12:58 -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 PAA25433; Thu, 10 Apr 2008 15:13:30 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 01A5C58C4C15; Thu, 10 Apr 2008 15:13:29 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 980145 - Remove periodic logging of in-core superblock counters. Message-Id: <20080410051330.01A5C58C4C15@chook.melbourne.sgi.com> Date: Thu, 10 Apr 2008 15:13:29 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15354 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Remove periodic logging of in-core superblock counters. xfssyncd triggers the logging of superblock counters every 30s if the filesystem is made with lazy-count=1. This will prevent disks from idling and spinning down as there will be a log write every 30s. With the way counter recovery works for lazy-count=1, this code is unnecessary and provides no real benefit, so just remove it. Date: Thu Apr 10 15:13:10 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: bnaujok@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30840a fs/xfs/xfs_vfsops.c - 1.561 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vfsops.c.diff?r1=text&tr1=1.561&r2=text&tr2=1.560&f=h - Remove periodic logging of in-core superblock counters. fs/xfs/linux-2.6/xfs_vfs.h - 1.81 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_vfs.h.diff?r1=text&tr1=1.81&r2=text&tr2=1.80&f=h - Remove periodic logging of in-core superblock counters. fs/xfs/linux-2.6/xfs_super.c - 1.413 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.413&r2=text&tr2=1.412&f=h - Remove periodic logging of in-core superblock counters. From owner-xfs@oss.sgi.com Wed Apr 9 22:29:01 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 22:29:09 -0700 (PDT) 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.9 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 m3A5Su7K006391 for ; Wed, 9 Apr 2008 22:28:59 -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 PAA25681; Thu, 10 Apr 2008 15:29:30 +1000 Message-ID: <47FDA5BA.3080401@sgi.com> Date: Thu, 10 Apr 2008 15:29:30 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: David Chinner CC: Barry Naujok , xfs-dev , xfs-oss Subject: Re: [patch] remove unnecessary periodic superblock logging. References: <20080410042001.GF108924158@sgi.com> In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15355 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Barry Naujok wrote: > On Thu, 10 Apr 2008 14:20:01 +1000, David Chinner wrote: > >> Remove periodic logging of in-core superblock counters. >> >> xfssyncd triggers the logging of superblock counters every >> 30s if the filesystem is made with lazy-count=1. This will >> prevent disks from idling and spinning down as there will >> be a log write every 30s. With the way counter recovery >> works for lazy-count=1, this code is unnecessary and provides >> no real benefit, so just remove it. > > I'm happy with this (xfs_initialize_perag_data() does the > global counter recovery during mount). > So we only do the sb count logging at unmount type times... xfs_attr_quiesce() and xfs_unmountfs(), when no log recovery will happen. Hmmm...so why do we have to log it out at these times? I'm forgetting how this works. --Tim >> Signed-off-by: Dave Chinner >> --- >> fs/xfs/linux-2.6/xfs_super.c | 3 +-- >> fs/xfs/linux-2.6/xfs_vfs.h | 1 - >> fs/xfs/xfs_vfsops.c | 13 ------------- >> 3 files changed, 1 insertion(+), 16 deletions(-) >> >> Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_super.c >> =================================================================== >> --- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_super.c 2008-04-10 >> 10:02:14.000000000 +1000 >> +++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_super.c 2008-04-10 >> 10:02:58.419346393 +1000 >> @@ -1028,8 +1028,7 @@ xfs_sync_worker( >> int error; >> if (!(mp->m_flags & XFS_MOUNT_RDONLY)) >> - error = xfs_sync(mp, SYNC_FSDATA | SYNC_BDFLUSH | SYNC_ATTR | >> - SYNC_REFCACHE | SYNC_SUPER); >> + error = xfs_sync(mp, SYNC_FSDATA | SYNC_BDFLUSH | SYNC_ATTR); >> mp->m_sync_seq++; >> wake_up(&mp->m_wait_single_sync_task); >> } >> Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_vfs.h >> =================================================================== >> --- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_vfs.h 2008-04-10 >> 10:00:25.000000000 +1000 >> +++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_vfs.h 2008-04-10 >> 10:02:58.419346393 +1000 >> @@ -49,7 +49,6 @@ typedef struct bhv_vfs_sync_work { >> #define SYNC_REFCACHE 0x0040 /* prune some of the nfs ref >> cache */ >> #define SYNC_REMOUNT 0x0080 /* remount readonly, no dummy LRs */ >> #define SYNC_IOWAIT 0x0100 /* wait for all I/O to complete */ >> -#define SYNC_SUPER 0x0200 /* flush superblock to disk */ >> /* >> * When remounting a filesystem read-only or freezing the filesystem, >> Index: 2.6.x-xfs-new/fs/xfs/xfs_vfsops.c >> =================================================================== >> --- 2.6.x-xfs-new.orig/fs/xfs/xfs_vfsops.c 2008-04-10 >> 10:01:54.000000000 +1000 >> +++ 2.6.x-xfs-new/fs/xfs/xfs_vfsops.c 2008-04-10 10:03:35.288729547 >> +1000 >> @@ -1326,21 +1326,8 @@ xfs_syncsub( >> } >> /* >> - * If asked, update the disk superblock with incore counter >> values if we >> - * are using non-persistent counters so that they don't get too >> far out >> - * of sync if we crash or get a forced shutdown. We don't want to >> force >> - * this to disk, just get a transaction into the iclogs.... >> - */ >> - if (flags & SYNC_SUPER) { >> - error = xfs_log_sbcount(mp, 0); >> - if (error) >> - last_error = error; >> - } >> - >> - /* >> * Now check to see if the log needs a "dummy" transaction. >> */ >> - >> if (!(flags & SYNC_REMOUNT) && xfs_log_need_covered(mp)) { >> xfs_trans_t *tp; >> xfs_inode_t *ip; >> >> > > > From owner-xfs@oss.sgi.com Wed Apr 9 22:35:32 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 22:35:38 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_47, J_CHICKENPOX_63 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 m3A5ZS15007281 for ; Wed, 9 Apr 2008 22:35:31 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA25885; Thu, 10 Apr 2008 15:36:03 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3A5a2sT127790012; Thu, 10 Apr 2008 15:36:02 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3A5a1hj127814815; Thu, 10 Apr 2008 15:36:01 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 10 Apr 2008 15:36:01 +1000 From: David Chinner To: Timothy Shimmin Cc: xfs-dev , xfs-oss , asg-qa Subject: Re: REVIEW XFSQA test out xfs_attr_shortform_bytesfit attr2/attr1 fix Message-ID: <20080410053601.GK108924158@sgi.com> References: <47FC79FC.5020803@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <47FC79FC.5020803@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15356 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 09, 2008 at 06:10:36PM +1000, Timothy Shimmin wrote: > Hi there, > > A test to test out Eric's fix for xfs_attr_shortform_bytesfit > bug when going from attr2 to attr1. > > With TOT kernel, without patch, one can see the corrupted inline > dirents. With patch, all is well. > > The 186.out _should_ be output'ing ATTR2 for the db version > command but I'm awaiting Barry's xfsprogs checkin to fix that one - > and then I will regenerate it. Really? I'm seeing it fail with ATTR2 in the xfs_db output... dgc@budgie:~/xfstests$ sudo ./check 186 FSTYP -- xfs (debug) PLATFORM -- Linux/ia64 budgie 2.6.25-rc3-dgc-xfs MKFS_OPTIONS -- -f -bsize=4096 /dev/sdb6 MOUNT_OPTIONS -- /dev/sdb6 /mnt/scratch 186 - output mismatch (see 186.out.bad) 13a14 > ATTR2 98a100 > ATTR2 Failures: 186 Failed 1 of 1 tests dgc@budgie:~/xfstests$ So the first is supposed to be there, but the second shows: .... ================================= ATTR ATTR2 core.forkoff = 47 .... Are both supposed to be present? Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 9 22:48:40 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 22:48:47 -0700 (PDT) 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.0 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 m3A5mb6U008706 for ; Wed, 9 Apr 2008 22:48:39 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA26201; Thu, 10 Apr 2008 15:49:15 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3A5nEsT127850753; Thu, 10 Apr 2008 15:49:15 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3A5nD97127810356; Thu, 10 Apr 2008 15:49:13 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 10 Apr 2008 15:49:13 +1000 From: David Chinner To: Timothy Shimmin Cc: David Chinner , Barry Naujok , xfs-dev , xfs-oss Subject: Re: [patch] remove unnecessary periodic superblock logging. Message-ID: <20080410054913.GL108924158@sgi.com> References: <20080410042001.GF108924158@sgi.com> <47FDA5BA.3080401@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <47FDA5BA.3080401@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15357 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, Apr 10, 2008 at 03:29:30PM +1000, Timothy Shimmin wrote: > Barry Naujok wrote: > >On Thu, 10 Apr 2008 14:20:01 +1000, David Chinner wrote: > > > >>Remove periodic logging of in-core superblock counters. > >> > >>xfssyncd triggers the logging of superblock counters every > >>30s if the filesystem is made with lazy-count=1. This will > >>prevent disks from idling and spinning down as there will > >>be a log write every 30s. With the way counter recovery > >>works for lazy-count=1, this code is unnecessary and provides > >>no real benefit, so just remove it. > > > >I'm happy with this (xfs_initialize_perag_data() does the > >global counter recovery during mount). > > > > So we only do the sb count logging at unmount type times... > xfs_attr_quiesce() and xfs_unmountfs(), > when no log recovery will happen. > Hmmm...so why do we have to log it out at these times? > I'm forgetting how this works. xfs_log_sbcount() sync's the incore counters to the superblock buffer transactionally. Not strictly necessary, but for consistency with other superblock updates..... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 9 23:47:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 09 Apr 2008 23:48:03 -0700 (PDT) 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 m3A6luIS014758 for ; Wed, 9 Apr 2008 23:47:56 -0700 X-ASG-Debug-ID: 1207810113-7941022e0000-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 82A1E107C904; Wed, 9 Apr 2008 23:48:33 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id k47BMfOjXSspkBgE; Wed, 09 Apr 2008 23:48:33 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JjqaG-00018P-Vz; Thu, 10 Apr 2008 06:48:32 +0000 Date: Thu, 10 Apr 2008 02:48:32 -0400 From: Christoph Hellwig To: David Chinner Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [patch] ensure inodes are joined in xfs_itruncate_finish Subject: Re: [patch] ensure inodes are joined in xfs_itruncate_finish Message-ID: <20080410064832.GA24941@infradead.org> References: <20080410031405.GR108924158@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080410031405.GR108924158@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207810114 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.1, rules version 3.1.47361 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15358 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, Apr 10, 2008 at 01:14:05PM +1000, David Chinner wrote: > On success, we still need to join the inode to the current > transaction in xfs_itruncate_finish(). Fixes regression from > error handling changes. > > Note that this does some comment reformatting (to wrap at > 80 columns) for comments that were modified. The fix looks good to me, and makes xfsqa survive a little longer. It now fails in xfs_alloc_ag_vextent/xfs_alloc_ag_vextent_near/ xfs_alloc_fix_len. I suspect your next patch fixes that, but while already commited it's unfortunately not in public CVS yet.. From owner-xfs@oss.sgi.com Thu Apr 10 00:43:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 10 Apr 2008 00:43:15 -0700 (PDT) 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 m3A7h7fn027616 for ; Thu, 10 Apr 2008 00:43:08 -0700 X-ASG-Debug-ID: 1207813422-604300790000-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 23B1B107CC5A; Thu, 10 Apr 2008 00:43:43 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id kkqErjN4vETGMrfI; Thu, 10 Apr 2008 00:43:43 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JjrRe-0003WJ-JK; Thu, 10 Apr 2008 07:43:42 +0000 Date: Thu, 10 Apr 2008 03:43:42 -0400 From: Christoph Hellwig To: David Chinner Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [patch] fix logic error in xfs_alloc_ag_vextent_near() Subject: Re: [patch] fix logic error in xfs_alloc_ag_vextent_near() Message-ID: <20080410074342.GA13126@infradead.org> References: <20080410032555.GS108924158@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080410032555.GS108924158@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207813426 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.1, rules version 3.1.47365 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15359 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, Apr 10, 2008 at 01:25:55PM +1000, David Chinner wrote: > Fix a logic error in xfs_alloc_ag_vextent_near(). This is > a regression introduced by the error handling changes. With this one onto of the truncate fix xfsqa nows doesn't cause an oops or regressions on xfsqa. From owner-xfs@oss.sgi.com Thu Apr 10 00:51:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 10 Apr 2008 00:51:50 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,WEIRD_PORT 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 m3A7pbEY028697 for ; Thu, 10 Apr 2008 00:51:41 -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 RAA28476; Thu, 10 Apr 2008 17:52:08 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id C88B958C4C15; Thu, 10 Apr 2008 17:52:08 +1000 (EST) Date: Thu, 10 Apr 2008 17:52:08 +1000 To: torvalds@linux-foundation.org Cc: linux-kernel@vger.kernel.org, xfs@oss.sgi.com, akpm@linux-foundation.org Subject: [GIT PULL] XFS update for 2.6.25-rc9 User-Agent: nail 11.25 7/29/05 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-Id: <20080410075208.C88B958C4C15@chook.melbourne.sgi.com> From: lachlan@sgi.com (Lachlan McIlroy) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15360 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Please pull from the for-linus branch: git pull git://oss.sgi.com:8090/xfs/xfs-2.6.git for-linus This will update the following files: fs/xfs/linux-2.6/xfs_ioctl.c | 2 +- fs/xfs/quota/xfs_qm.c | 6 +- fs/xfs/quota/xfs_qm_bhv.c | 2 +- fs/xfs/quota/xfs_qm_syscalls.c | 4 +- fs/xfs/xfs_attr_leaf.c | 6 +- fs/xfs/xfs_bmap.c | 18 +++--- fs/xfs/xfs_bmap_btree.h | 2 +- fs/xfs/xfs_dir2.c | 2 +- fs/xfs/xfs_fsops.c | 24 +++++----- fs/xfs/xfs_ialloc.c | 6 +- fs/xfs/xfs_inode.c | 6 +- fs/xfs/xfs_inode_item.c | 4 +- fs/xfs/xfs_itable.c | 2 +- fs/xfs/xfs_log.c | 14 +++--- fs/xfs/xfs_log_priv.h | 4 +- fs/xfs/xfs_log_recover.c | 16 +++--- fs/xfs/xfs_mount.c | 59 +++++++++++++++++----- fs/xfs/xfs_sb.h | 107 ++++++++++++++------------------------- fs/xfs/xfs_utils.c | 6 +- fs/xfs/xfs_vfsops.c | 9 ++-- fs/xfs/xfs_vnodeops.c | 2 +- 21 files changed, 153 insertions(+), 148 deletions(-) through these commits: commit e6957ea48429aeda4f5d51af4238231d44b0dc4a Author: Eric Sandeen Date: Thu Apr 10 12:19:34 2008 +1000 [XFS] Ensure "both" features2 slots are consistent Since older kernels may look in the sb_bad_features2 slot for flags, rather than zeroing it out on fixup, we should make it equal to the sb_features2 value. Also, if the ATTR2 flag was not found prior to features2 fixup, it was not set in the mount flags, so re-check after the fixup so that the current session will use the feature. Also fix up the comments to reflect these changes. SGI-PV: 980085 SGI-Modid: xfs-linux-melb:xfs-kern:30778a Signed-off-by: Eric Sandeen Signed-off-by: David Chinner Signed-off-by: Lachlan McIlroy commit ee1c090825bf2f1cb9712489c234eabf69a9a78f Author: David Chinner Date: Thu Mar 6 13:45:50 2008 +1100 [XFS] Fix superblock features2 field alignment problem Due to the xfs_dsb_t structure not being 64 bit aligned, the last field of the on-disk superblock can vary in location This causes problems when the filesystem gets moved to a different platform, or there is a 32 bit userspace and 64 bit kernel. This patch detects the defect at mount time, logs a warning such as: XFS: correcting sb_features alignment problem in dmesg and corrects the problem so that everything is OK. it also blacklists the bad field in the superblock so it does not get used for something else later on. SGI-PV: 977636 SGI-Modid: xfs-linux-melb:xfs-kern:30539a Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Eric Sandeen Signed-off-by: Lachlan McIlroy commit 6211870992502efdccf9cd6bae155c83277835fa Author: Eric Sandeen Date: Thu Mar 6 13:44:28 2008 +1100 [XFS] remove shouting-indirection macros from xfs_sb.h Remove macro-to-small-function indirection from xfs_sb.h, and remove some which are completely unused. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30528a Signed-off-by: Eric Sandeen Signed-off-by: Donald Douwsma Signed-off-by: Lachlan McIlroy From owner-xfs@oss.sgi.com Thu Apr 10 01:50:44 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 10 Apr 2008 01:50:51 -0700 (PDT) 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=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 m3A8ogYI002484 for ; Thu, 10 Apr 2008 01:50:44 -0700 X-ASG-Debug-ID: 1207817479-202103230000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 563FD773538 for ; Thu, 10 Apr 2008 01:51:20 -0700 (PDT) Received: from smtp8-g19.free.fr (smtp8-g19.free.fr [212.27.42.65]) by cuda.sgi.com with ESMTP id c852ZzmV1sX56lkp for ; Thu, 10 Apr 2008 01:51:20 -0700 (PDT) Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by smtp8-g19.free.fr (Postfix) with ESMTP id 3F66517F526; Thu, 10 Apr 2008 10:51:19 +0200 (CEST) Received: from harpe.intellique.com (labo.djinux.com [82.225.196.72]) by smtp8-g19.free.fr (Postfix) with ESMTP id 448EA17F587; Thu, 10 Apr 2008 10:51:18 +0200 (CEST) Date: Thu, 10 Apr 2008 10:51:20 +0200 From: Emmanuel Florac To: Eric Sandeen Cc: Justin Piszcz , Barry Naujok , Jeffrey Sandel , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Lost+found Subject: Re: Lost+found Message-ID: <20080410105120.153ea739@harpe.intellique.com> In-Reply-To: <47FCC071.40201@sandeen.net> References: <1207632033.11530.10.camel@localhost.localdomain> <47FCC071.40201@sandeen.net> Organization: Intellique X-Mailer: Claws Mail 3.0.2 (GTK+ 2.12.9; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp8-g19.free.fr[212.27.42.65] X-Barracuda-Start-Time: 1207817481 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.1, rules version 3.1.47370 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m3A8oiYI002486 X-archive-position: 15361 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Wed, 09 Apr 2008 08:11:13 -0500 Eric Sandeen écrivait: > Crosses my mind that one could probably write a generic tool which > could work with a package manager db to check file md5sums > in /lost+found, if the files happen to be system files installed via > a package.... Yup, I've done something similar when I used a PC with a bugged via chipset which regularly broke apart filesystems under heavy load... I used a tool named afick to index the whole disks (it stores md5 of everything in a small db) and with some tinkering I was able to restore everything from lost+found each time some filesystem went belly up (once a month...) -- ---------------------------------------- Emmanuel Florac | Intellique ---------------------------------------- From owner-xfs@oss.sgi.com Thu Apr 10 04:19:10 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 10 Apr 2008 04:19:32 -0700 (PDT) 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.0 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 m3ABJ74Z022427 for ; Thu, 10 Apr 2008 04:19: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 VAA02373; Thu, 10 Apr 2008 21:19:40 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id ECD4058C4C15; Thu, 10 Apr 2008 21:19:39 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 980084 - Ensure the inode is joined in xfs_itruncate_finish Message-Id: <20080410111939.ECD4058C4C15@chook.melbourne.sgi.com> Date: Thu, 10 Apr 2008 21:19:39 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15362 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Ensure the inode is joined in xfs_itruncate_finish On success, we still need to join the inode to the current transaction in xfs_itruncate_finish(). Fixes regression from error handling changes. Date: Thu Apr 10 21:19:22 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30845a fs/xfs/xfs_inode.c - 1.499 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_inode.c.diff?r1=text&tr1=1.499&r2=text&tr2=1.498&f=h - Ensure the inode is always joined to the current transaction in xfs_itruncate_finish(). From owner-xfs@oss.sgi.com Thu Apr 10 11:43:23 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 10 Apr 2008 11:44:39 -0700 (PDT) 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 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 m3AIhKw8003653 for ; Thu, 10 Apr 2008 11:43:23 -0700 X-ASG-Debug-ID: 1207853036-3b64005a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B04A799FFA3 for ; Thu, 10 Apr 2008 11:43:56 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id BBLjskEKgwhn2qkb for ; Thu, 10 Apr 2008 11:43:56 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3AIhnF3006898 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 10 Apr 2008 20:43:49 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3AIhnLR006896 for xfs@oss.sgi.com; Thu, 10 Apr 2008 20:43:49 +0200 Date: Thu, 10 Apr 2008 20:43:49 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 1/2] simplify xfs_lookup Subject: [PATCH 1/2] simplify xfs_lookup Message-ID: <20080410184349.GA6771@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1207853039 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.1, rules version 3.1.47409 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15363 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Opencode xfs-kill-xfs_dir_lookup_int here, which gets rid of a lock roundtrip, and lots of stack space. Also kill the di_mode == 0 check that has been done in xfs_iget for a few years now. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.c 2008-04-09 20:02:27.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.c 2008-04-09 20:03:42.000000000 +0200 @@ -1767,8 +1767,7 @@ xfs_lookup( struct xfs_name *name, xfs_inode_t **ipp) { - xfs_inode_t *ip; - xfs_ino_t e_inum; + xfs_ino_t inum; int error; uint lock_mode; @@ -1778,12 +1777,21 @@ xfs_lookup( return XFS_ERROR(EIO); lock_mode = xfs_ilock_map_shared(dp); - error = xfs_dir_lookup_int(dp, lock_mode, name, &e_inum, &ip); - if (!error) { - *ipp = ip; - xfs_itrace_ref(ip); - } + error = xfs_dir_lookup(NULL, dp, name, &inum); xfs_iunlock_map_shared(dp, lock_mode); + + if (error) + goto out; + + error = xfs_iget(dp->i_mount, NULL, inum, 0, 0, ipp, 0); + if (error) + goto out; + + xfs_itrace_ref(*ipp); + return 0; + + out: + *ipp = NULL; return error; } From owner-xfs@oss.sgi.com Thu Apr 10 11:48:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 10 Apr 2008 11:48:35 -0700 (PDT) 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 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 m3AImRX1004350 for ; Thu, 10 Apr 2008 11:48:27 -0700 X-ASG-Debug-ID: 1207853344-602703450000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D0668778478 for ; Thu, 10 Apr 2008 11:49:04 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id 9gxA00ypJCtFvvxw for ; Thu, 10 Apr 2008 11:49:04 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3AImwF3007182 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 10 Apr 2008 20:48:58 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3AImwTN007180 for xfs@oss.sgi.com; Thu, 10 Apr 2008 20:48:58 +0200 Date: Thu, 10 Apr 2008 20:48:58 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 1/2] kill parent == child checks in xfs_remove and xfs_rmdir Subject: [PATCH 1/2] kill parent == child checks in xfs_remove and xfs_rmdir Message-ID: <20080410184858.GC6771@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1207853345 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.1, rules version 3.1.47410 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15364 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs VFS guaranteed these can't happen. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.c 2008-03-21 17:15:21.000000000 +0100 +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.c 2008-03-21 17:16:34.000000000 +0100 @@ -2312,7 +2312,7 @@ xfs_remove( xfs_itrace_ref(ip); error = XFS_QM_DQATTACH(mp, dp, 0); - if (!error && dp != ip) + if (!error) error = XFS_QM_DQATTACH(mp, ip, 0); if (error) { REMOVE_DEBUG_TRACE(__LINE__); @@ -2360,15 +2360,9 @@ xfs_remove( * inodes locked. */ xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL); - if (dp != ip) { - /* - * Increment vnode ref count only in this case since - * there's an extra vnode reference in the case where - * dp == ip. - */ - IHOLD(dp); - xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); - } + + IHOLD(dp); + xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); /* * Entry must exist since we did a lookup in xfs_lock_dir_and_entry. @@ -2887,7 +2881,7 @@ xfs_rmdir( * Get the dquots for the inodes. */ error = XFS_QM_DQATTACH(mp, dp, 0); - if (!error && dp != cdp) + if (!error) error = XFS_QM_DQATTACH(mp, cdp, 0); if (error) { IRELE(cdp); @@ -2936,14 +2930,7 @@ xfs_rmdir( } xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL); - if (dp != cdp) { - /* - * Only increment the parent directory vnode count if - * we didn't bump it in looking up cdp. The only time - * we don't bump it is when we're looking up ".". - */ - VN_HOLD(dir_vp); - } + VN_HOLD(dir_vp); xfs_itrace_ref(cdp); xfs_trans_ijoin(tp, cdp, XFS_ILOCK_EXCL); From owner-xfs@oss.sgi.com Thu Apr 10 11:48:35 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 10 Apr 2008 11:48:41 -0700 (PDT) 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_65 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 m3AImXOV004379 for ; Thu, 10 Apr 2008 11:48:35 -0700 X-ASG-Debug-ID: 1207853350-2dfd004a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9645F77847A for ; Thu, 10 Apr 2008 11:49:10 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id RSALObmAuYrK1AHl for ; Thu, 10 Apr 2008 11:49:10 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3AIn4F3007208 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 10 Apr 2008 20:49:04 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3AIn4rr007206 for xfs@oss.sgi.com; Thu, 10 Apr 2008 20:49:04 +0200 Date: Thu, 10 Apr 2008 20:49:04 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 2/2] kill usesless IHOLD calls in xfs_remove and xfs_rmdir Subject: [PATCH 2/2] kill usesless IHOLD calls in xfs_remove and xfs_rmdir Message-ID: <20080410184904.GD6771@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1207853351 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.1, rules version 3.1.47410 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15365 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs The VFS always has an inode reference when we call these functions. So we only need to grab a signle reference to each inode that's joined to a transaction - all the other bumping and dropping is as useless as the comments describing the IRIX semantics. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.c 2008-04-10 11:24:07.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.c 2008-04-10 11:24:46.000000000 +0200 @@ -2306,20 +2306,6 @@ xfs_remove( return error; } - /* - * We need to get a reference to ip before we get our log - * reservation. The reason for this is that we cannot call - * xfs_iget for an inode for which we do not have a reference - * once we've acquired a log reservation. This is because the - * inode we are trying to get might be in xfs_inactive going - * for a log reservation. Since we'll have to wait for the - * inactive code to complete before returning from xfs_iget, - * we need to make sure that we don't have log space reserved - * when we call xfs_iget. Instead we get an unlocked reference - * to the inode before getting our log reservation. - */ - IHOLD(ip); - xfs_itrace_entry(ip); xfs_itrace_ref(ip); @@ -2328,7 +2314,6 @@ xfs_remove( error = XFS_QM_DQATTACH(mp, ip, 0); if (error) { REMOVE_DEBUG_TRACE(__LINE__); - IRELE(ip); goto std_return; } @@ -2355,7 +2340,6 @@ xfs_remove( ASSERT(error != ENOSPC); REMOVE_DEBUG_TRACE(__LINE__); xfs_trans_cancel(tp, 0); - IRELE(ip); return error; } @@ -2363,7 +2347,6 @@ xfs_remove( if (error) { REMOVE_DEBUG_TRACE(__LINE__); xfs_trans_cancel(tp, cancel_flags); - IRELE(ip); goto std_return; } @@ -2371,6 +2354,7 @@ xfs_remove( * At this point, we've gotten both the directory and the entry * inodes locked. */ + IHOLD(ip); xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL); IHOLD(dp); @@ -2404,12 +2388,6 @@ xfs_remove( link_zero = (ip)->i_d.di_nlink==0; /* - * Take an extra ref on the inode so that it doesn't - * go to xfs_inactive() from within the commit. - */ - IHOLD(ip); - - /* * If this is a synchronous mount, make sure that the * remove transaction goes to disk before returning to * the user. @@ -2425,10 +2403,8 @@ xfs_remove( } error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES); - if (error) { - IRELE(ip); + if (error) goto std_return; - } /* * If we are using filestreams, kill the stream association. @@ -2440,7 +2416,6 @@ xfs_remove( xfs_filestream_deassociate(ip); xfs_itrace_exit(ip); - IRELE(ip); /* Fall through to std_return with error = 0 */ std_return: @@ -2469,8 +2444,6 @@ xfs_remove( cancel_flags |= XFS_TRANS_ABORT; xfs_trans_cancel(tp, cancel_flags); - IRELE(ip); - goto std_return; } @@ -2842,7 +2815,6 @@ xfs_rmdir( struct xfs_name *name, xfs_inode_t *cdp) { - bhv_vnode_t *dir_vp = XFS_ITOV(dp); xfs_mount_t *mp = dp->i_mount; xfs_trans_t *tp; int error; @@ -2868,27 +2840,12 @@ xfs_rmdir( } /* - * We need to get a reference to cdp before we get our log - * reservation. The reason for this is that we cannot call - * xfs_iget for an inode for which we do not have a reference - * once we've acquired a log reservation. This is because the - * inode we are trying to get might be in xfs_inactive going - * for a log reservation. Since we'll have to wait for the - * inactive code to complete before returning from xfs_iget, - * we need to make sure that we don't have log space reserved - * when we call xfs_iget. Instead we get an unlocked reference - * to the inode before getting our log reservation. - */ - IHOLD(cdp); - - /* * Get the dquots for the inodes. */ error = XFS_QM_DQATTACH(mp, dp, 0); if (!error) error = XFS_QM_DQATTACH(mp, cdp, 0); if (error) { - IRELE(cdp); REMOVE_DEBUG_TRACE(__LINE__); goto std_return; } @@ -2915,7 +2872,6 @@ xfs_rmdir( if (error) { ASSERT(error != ENOSPC); cancel_flags = 0; - IRELE(cdp); goto error_return; } XFS_BMAP_INIT(&free_list, &first_block); @@ -2929,14 +2885,13 @@ xfs_rmdir( error = xfs_lock_dir_and_entry(dp, cdp); if (error) { xfs_trans_cancel(tp, cancel_flags); - IRELE(cdp); goto std_return; } + IHOLD(dp); xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL); - VN_HOLD(dir_vp); - xfs_itrace_ref(cdp); + IHOLD(cdp); xfs_trans_ijoin(tp, cdp, XFS_ILOCK_EXCL); ASSERT(cdp->i_d.di_nlink >= 2); @@ -2990,12 +2945,6 @@ xfs_rmdir( last_cdp_link = (cdp)->i_d.di_nlink==0; /* - * Take an extra ref on the child vnode so that it - * does not go to xfs_inactive() from within the commit. - */ - IHOLD(cdp); - - /* * If this is a synchronous mount, make sure that the * rmdir transaction goes to disk before returning to * the user. @@ -3009,19 +2958,15 @@ xfs_rmdir( xfs_bmap_cancel(&free_list); xfs_trans_cancel(tp, (XFS_TRANS_RELEASE_LOG_RES | XFS_TRANS_ABORT)); - IRELE(cdp); goto std_return; } error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES); if (error) { - IRELE(cdp); goto std_return; } - IRELE(cdp); - /* Fall through to std_return with error = 0 or the errno * from xfs_trans_commit. */ std_return: From owner-xfs@oss.sgi.com Thu Apr 10 12:00:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 10 Apr 2008 12:00:58 -0700 (PDT) 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 m3AJ0cj0005992 for ; Thu, 10 Apr 2008 12:00:39 -0700 X-ASG-Debug-ID: 1207854074-42f600b50002-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 10D429A04E1 for ; Thu, 10 Apr 2008 12:01:16 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id SAvGZiGeJYbWh7fF for ; Thu, 10 Apr 2008 12:01:16 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3AIiDF3006923 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 10 Apr 2008 20:44:14 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3AIiDxB006921 for xfs@oss.sgi.com; Thu, 10 Apr 2008 20:44:13 +0200 Date: Thu, 10 Apr 2008 20:44:13 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 2/2] simplify xfs_lock_for_rename Subject: [PATCH 2/2] simplify xfs_lock_for_rename Message-ID: <20080410184413.GB6771@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1207854077 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.1, rules version 3.1.47409 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15367 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs as with lookup merge what's left of xfs_dir_lookup_int into it, kill a useless lock roundtrip left over from IRIX and kill a bunch of useless variables. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/xfs_rename.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_rename.c 2008-04-09 20:30:08.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_rename.c 2008-04-10 08:58:50.000000000 +0200 @@ -67,10 +67,6 @@ xfs_rename_unlock4( } } -#ifdef DEBUG -int xfs_rename_skip, xfs_rename_nskip; -#endif - /* * The following routine will acquire the locks required for a rename * operation. The code understands the semantics of renames and will @@ -92,47 +88,33 @@ xfs_lock_for_rename( xfs_inode_t **i_tab,/* out: array of inode returned, sorted */ int *num_inodes) /* out: number of inodes in array */ { - xfs_inode_t *ip2 = NULL; xfs_inode_t *temp; - xfs_ino_t inum1, inum2; + xfs_ino_t inum2; int error; int i, j; uint lock_mode; - int diff_dirs = (dp1 != dp2); - /* - * First, find out the current inums of the entries so that we - * can determine the initial locking order. We'll have to - * sanity check stuff after all the locks have been acquired - * to see if we still have the right inodes, directories, etc. - */ - lock_mode = xfs_ilock_map_shared(dp1); + *ipp2 = NULL; + IHOLD(ip1); xfs_itrace_ref(ip1); - inum1 = ip1->i_ino; - - /* - * Unlock dp1 and lock dp2 if they are different. - */ - if (diff_dirs) { - xfs_iunlock_map_shared(dp1, lock_mode); - lock_mode = xfs_ilock_map_shared(dp2); + lock_mode = xfs_ilock_map_shared(dp2); + error = xfs_dir_lookup(NULL, dp2, name2, &inum2); + if (!error) { + xfs_iunlock(dp2, lock_mode); + error = xfs_iget(dp2->i_mount, NULL, inum2, 0, 0, ipp2, 0); + xfs_ilock(dp2, lock_mode); } - error = xfs_dir_lookup_int(dp2, lock_mode, name2, &inum2, &ip2); if (error == ENOENT) { /* target does not need to exist. */ inum2 = 0; } else if (error) { - /* - * If dp2 and dp1 are the same, the next line unlocks dp1. - * Got it? - */ xfs_iunlock_map_shared(dp2, lock_mode); - IRELE (ip1); + IRELE(ip1); return error; } else { - xfs_itrace_ref(ip2); + xfs_itrace_ref(*ipp2); } /* @@ -150,9 +132,8 @@ xfs_lock_for_rename( i_tab[3] = NULL; } else { *num_inodes = 4; - i_tab[3] = ip2; + i_tab[3] = *ipp2; } - *ipp2 = i_tab[3]; /* * Sort the elements via bubble sort. (Remember, there are at @@ -178,14 +159,8 @@ xfs_lock_for_rename( */ if (i_tab[0] == dp2 && lock_mode == XFS_ILOCK_SHARED) { -#ifdef DEBUG - xfs_rename_skip++; -#endif xfs_lock_inodes(i_tab, *num_inodes, 1, XFS_ILOCK_SHARED); } else { -#ifdef DEBUG - xfs_rename_nskip++; -#endif xfs_iunlock_map_shared(dp2, lock_mode); xfs_lock_inodes(i_tab, *num_inodes, 0, XFS_ILOCK_SHARED); } Index: linux-2.6-xfs/fs/xfs/xfs_utils.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_utils.c 2008-04-09 20:30:08.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_utils.c 2008-04-10 08:46:27.000000000 +0200 @@ -41,49 +41,6 @@ #include "xfs_utils.h" -int -xfs_dir_lookup_int( - xfs_inode_t *dp, - uint lock_mode, - struct xfs_name *name, - xfs_ino_t *inum, - xfs_inode_t **ipp) -{ - int error; - - xfs_itrace_entry(dp); - - error = xfs_dir_lookup(NULL, dp, name, inum); - if (!error) { - /* - * Unlock the directory. We do this because we can't - * hold the directory lock while doing the vn_get() - * in xfs_iget(). Doing so could cause us to hold - * a lock while waiting for the inode to finish - * being inactive while it's waiting for a log - * reservation in the inactive routine. - */ - xfs_iunlock(dp, lock_mode); - error = xfs_iget(dp->i_mount, NULL, *inum, 0, 0, ipp, 0); - xfs_ilock(dp, lock_mode); - - if (error) { - *ipp = NULL; - } else if ((*ipp)->i_d.di_mode == 0) { - /* - * The inode has been freed. Something is - * wrong so just get out of here. - */ - xfs_iunlock(dp, lock_mode); - xfs_iput_new(*ipp, 0); - *ipp = NULL; - xfs_ilock(dp, lock_mode); - error = XFS_ERROR(ENOENT); - } - } - return error; -} - /* * Allocates a new inode from disk and return a pointer to the * incore copy. This routine will internally commit the current Index: linux-2.6-xfs/fs/xfs/xfs_utils.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_utils.h 2008-04-09 20:30:08.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_utils.h 2008-04-10 08:46:27.000000000 +0200 @@ -21,8 +21,6 @@ #define IRELE(ip) VN_RELE(XFS_ITOV(ip)) #define IHOLD(ip) VN_HOLD(XFS_ITOV(ip)) -extern int xfs_dir_lookup_int(xfs_inode_t *, uint, struct xfs_name *, - xfs_ino_t *, xfs_inode_t **); extern int xfs_truncate_file(xfs_mount_t *, xfs_inode_t *); extern int xfs_dir_ialloc(xfs_trans_t **, xfs_inode_t *, mode_t, xfs_nlink_t, xfs_dev_t, cred_t *, prid_t, int, From owner-xfs@oss.sgi.com Thu Apr 10 12:00:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 10 Apr 2008 12:00:54 -0700 (PDT) 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 m3AJ0atB005979 for ; Thu, 10 Apr 2008 12:00:37 -0700 X-ASG-Debug-ID: 1207854074-42f600b50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 83BFF9A04CB for ; Thu, 10 Apr 2008 12:01:14 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id 1YBExU2JRqQaUSYA for ; Thu, 10 Apr 2008 12:01:14 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3AIsjF3007684 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 10 Apr 2008 20:54:45 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3AIsjkj007682 for xfs@oss.sgi.com; Thu, 10 Apr 2008 20:54:45 +0200 Date: Thu, 10 Apr 2008 20:54:45 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: odd code in xfs_remove Subject: odd code in xfs_remove Message-ID: <20080410185445.GA7521@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1207854075 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.1, rules version 3.1.47409 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15366 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs unlike xfs_rmdir or xfs_rename xfs_remove always passes 0 instead of the reserved blocks to xfs_dir_removename which means the latter always operated in the ENOSPC mode. This seems rather strange to me, so a second pair of eyes, especially on a tree with history back to day 0 would be nice. From owner-xfs@oss.sgi.com Thu Apr 10 12:04:24 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 10 Apr 2008 12:04:30 -0700 (PDT) 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 m3AJ4LTU006951 for ; Thu, 10 Apr 2008 12:04:23 -0700 X-ASG-Debug-ID: 1207854299-42f600d00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id AD1019A9140 for ; Thu, 10 Apr 2008 12:04:59 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id dDI37RxjDCDe4gy2 for ; Thu, 10 Apr 2008 12:04:59 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3AJ4rF3008183 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 10 Apr 2008 21:04:53 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3AJ4reK008181 for xfs@oss.sgi.com; Thu, 10 Apr 2008 21:04:53 +0200 Date: Thu, 10 Apr 2008 21:04:53 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: iget behaviour in xlog_recover_process_iunlinks Subject: iget behaviour in xlog_recover_process_iunlinks Message-ID: <20080410190453.GA8083@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1207854300 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.1, rules version 3.1.47409 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15368 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs shouldn't we call xfs_iget with the XFS_IGET_CREATE flag here? the code seems to be perfectly happy with zero-ed out inodes as long as di_next_unlinked is valid. From owner-xfs@oss.sgi.com Thu Apr 10 17:20:47 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 10 Apr 2008 17:21:06 -0700 (PDT) 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.0 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 m3B0Kgm5013444 for ; Thu, 10 Apr 2008 17:20: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 KAA20458; Fri, 11 Apr 2008 10:21:13 +1000 Date: Fri, 11 Apr 2008 10:24:43 +1000 To: "Christoph Hellwig" , xfs@oss.sgi.com Subject: Re: [PATCH 2/2] simplify xfs_lock_for_rename From: "Barry Naujok" Organization: SGI Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080410184413.GB6771@lst.de> Message-ID: In-Reply-To: <20080410184413.GB6771@lst.de> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m3B0Klm5013452 X-archive-position: 15369 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Fri, 11 Apr 2008 04:44:13 +1000, Christoph Hellwig wrote: > as with lookup merge what's left of xfs_dir_lookup_int into it, kill > a useless lock roundtrip left over from IRIX and kill a bunch of useless > variables. > > > Signed-off-by: Christoph Hellwig > > Index: linux-2.6-xfs/fs/xfs/xfs_rename.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_rename.c 2008-04-09 20:30:08.000000000 > +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_rename.c 2008-04-10 08:58:50.000000000 +0200 > @@ -67,10 +67,6 @@ xfs_rename_unlock4( > } > } > -#ifdef DEBUG > -int xfs_rename_skip, xfs_rename_nskip; > -#endif > - > /* > * The following routine will acquire the locks required for a rename > * operation. The code understands the semantics of renames and will > @@ -92,47 +88,33 @@ xfs_lock_for_rename( > xfs_inode_t **i_tab,/* out: array of inode returned, sorted */ > int *num_inodes) /* out: number of inodes in array */ > { > - xfs_inode_t *ip2 = NULL; > xfs_inode_t *temp; > - xfs_ino_t inum1, inum2; > + xfs_ino_t inum2; > int error; > int i, j; > uint lock_mode; > - int diff_dirs = (dp1 != dp2); > - /* > - * First, find out the current inums of the entries so that we > - * can determine the initial locking order. We'll have to > - * sanity check stuff after all the locks have been acquired > - * to see if we still have the right inodes, directories, etc. > - */ > - lock_mode = xfs_ilock_map_shared(dp1); > + *ipp2 = NULL; > + Isn't it bad form to modify these (passed in params to return values with - ipp2, i_tab, num_inodes) on error cases? Barry. From owner-xfs@oss.sgi.com Thu Apr 10 19:06:45 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 10 Apr 2008 19:07:04 -0700 (PDT) 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_45 autolearn=no version=3.3.0-r574664 Received: from relay.sgi.com (relay1.corp.sgi.com [192.26.58.214]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m3B26iT1024968 for ; Thu, 10 Apr 2008 19:06:45 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by relay1.corp.sgi.com (Postfix) with ESMTP id 51AF58F8063; Thu, 10 Apr 2008 19:07:15 -0700 (PDT) Received: from itchy (xaiki@itchy.melbourne.sgi.com [134.14.55.96]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3B276jm349905; Fri, 11 Apr 2008 12:07:07 +1000 (AEST) From: Niv Sardi To: Christoph Hellwig Cc: Eric Sandeen , Justin Piszcz , Barry Naujok , Jeffrey Sandel , xfs@oss.sgi.com Subject: Re: Lost+found References: <1207632033.11530.10.camel@localhost.localdomain> <47FCC071.40201@sandeen.net> <20080409132945.GA25114@infradead.org> Date: Fri, 11 Apr 2008 12:07:07 +1000 In-Reply-To: <20080409132945.GA25114@infradead.org> (Christoph Hellwig's message of "Wed, 9 Apr 2008 09:29:45 -0400") Message-ID: User-Agent: Gnus/5.110007 (No Gnus v0.7) Emacs/23.0.60 (i486-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15370 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig writes: > On Wed, Apr 09, 2008 at 08:11:13AM -0500, Eric Sandeen wrote: >> The whole reason they're in lost+found is because they are "orphaned" - >> allocated & in use but not referenced by any directory... so the best >> xfs_repair can do is rename to lost+found with the inode number. > > At least until we get parent pointers. Niv, any updates? I was lost in DMAPI land for a while, I'll resume work on PP next week, patches up for review soonish after I fix some issues. Cheers, -- Niv Sardi From owner-xfs@oss.sgi.com Thu Apr 10 19:14:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 10 Apr 2008 19:14:28 -0700 (PDT) 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.9 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 m3B2EFE9026336 for ; Thu, 10 Apr 2008 19:14:17 -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 MAA22405; Fri, 11 Apr 2008 12:14:47 +1000 Message-ID: <47FEC997.5060506@sgi.com> Date: Fri, 11 Apr 2008 12:14:47 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: iget behaviour in xlog_recover_process_iunlinks References: <20080410190453.GA8083@lst.de> In-Reply-To: <20080410190453.GA8083@lst.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15371 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig wrote: > shouldn't we call xfs_iget with the XFS_IGET_CREATE flag here? > > the code seems to be perfectly happy with zero-ed out inodes as long as > di_next_unlinked is valid. > So looking at this code... we look at each bucket in the AGI bucket list and walk the di_next_unlinked list of inodes. We do an xfs_iget with 0 for flags which will mean in xfs_iget_core it will error out if it finds an inode with zeroed mode (which happens on inodes which have been zeroed b/c it is new or inativated with the mode reset in xfs_ifree, however, it wouldn't all be zeroed as di_next_unlinked is non zero). And yet in the xlog_recover_process_iunlinks() it later checks for a zero mode or not. > if (ip->i_d.di_mode == 0) > xfs_iput_new(ip, 0); > else > IRELE(ip); .... > void > xfs_iput_new(xfs_inode_t *ip, > uint lock_flags) > { > struct inode *inode = ip->i_vnode; > > xfs_itrace_entry(ip); > > if ((ip->i_d.di_mode == 0)) { > ASSERT(!xfs_iflags_test(ip, XFS_IRECLAIMABLE)); > make_bad_inode(inode); > } > if (inode->i_state & I_NEW) > unlock_new_inode(inode); > if (lock_flags) > xfs_iunlock(ip, lock_flags); > IRELE(ip); > } And if it does get an error from xfs_iget, it will ditch the rest of the list and the bucket. So yeah to me it looks like we need XFS_IGET_CREATE or we have handling code for zero mode which never happens or we are risking ditching some unlinked inodes. Was that what you were noticing? --Tim From owner-xfs@oss.sgi.com Thu Apr 10 19:31:21 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 10 Apr 2008 19:31:40 -0700 (PDT) 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.0 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 m3B2VG40028934 for ; Thu, 10 Apr 2008 19:31:20 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA22778; Fri, 11 Apr 2008 12:31:49 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3B2VlsT128502035; Fri, 11 Apr 2008 12:31:48 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3B2VjJ6129035568; Fri, 11 Apr 2008 12:31:45 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Fri, 11 Apr 2008 12:31:45 +1000 From: David Chinner To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: odd code in xfs_remove Message-ID: <20080411023145.GK103491721@sgi.com> References: <20080410185445.GA7521@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080410185445.GA7521@lst.de> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15372 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, Apr 10, 2008 at 08:54:45PM +0200, Christoph Hellwig wrote: > unlike xfs_rmdir or xfs_rename xfs_remove always passes 0 instead of the > reserved blocks to xfs_dir_removename which means the latter always > operated in the ENOSPC mode. This seems rather strange to me, so a > second pair of eyes, especially on a tree with history back to day 0 > would be nice. Originially, back in the days of dir1 (1994) when xfs_dir_removename() was expanded to take a block count, only xfs_rename() passed a value in (MAX_EXT_NEEDED). Both xfs_rmdir and xfs_remove passed zero. Then some time later (pv 519072): irix/kern/fs/xfs/xfs_vnodeops.c - 1.356 - Add more vnode tracing points. Remove some cruft from merge errors. Speed up xfs_remove by getting a real space reservation unless the fs is full, then reverting to a zero space reservation (bug 519072). The speed up was for dir v1, which doesn't exist on linux. Then in pv 653987: irix/kern/fs/xfs/xfs_vnodeops.c - 1.395 - In xfs_link, call xfs_dir_canenter before xfs_dir_createname if we have no space reservation. In xfs_rmdir, get a 0 space reservation if we can't get the real space reservation (as is done for xfs_remove). In xfs_symlink, properly account for resblks throughout so we don't make it go negative to a xfs_bmapi call. The key point here is that in rev 1.395, the variable resblks got passed into xfs_dir_removename(), whilst in 1.356, it didn't. This was work that preceeded dir v2, so was probably fixing bugs found as a result. The remove name case with resblks = 0 avoids block allocation during modification of the alloc btree to insert newly freed blocks at ENOSPC; instead it just leaves the empty leaf block in place in the directory. Looks like no harm is done by this and it's a rarely hit corner case, but it would appear that we should be passing in resblks in remove if only to avoid a potential transaction reservation overrun.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Thu Apr 10 19:44:35 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 10 Apr 2008 19:44:53 -0700 (PDT) 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.0 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 m3B2iTnu030350 for ; Thu, 10 Apr 2008 19:44:33 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA22856; Fri, 11 Apr 2008 12:45:00 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3B2ixsT129024589; Fri, 11 Apr 2008 12:44:59 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3B2iv23128964183; Fri, 11 Apr 2008 12:44:57 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Fri, 11 Apr 2008 12:44:57 +1000 From: David Chinner To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: iget behaviour in xlog_recover_process_iunlinks Message-ID: <20080411024457.GL103491721@sgi.com> References: <20080410190453.GA8083@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080410190453.GA8083@lst.de> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15373 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, Apr 10, 2008 at 09:04:53PM +0200, Christoph Hellwig wrote: > shouldn't we call xfs_iget with the XFS_IGET_CREATE flag here? > > the code seems to be perfectly happy with zero-ed out inodes as long as > di_next_unlinked is valid. Don't think so - di_mode is not zero'd until the inode is removed from the unlinked list. Hence if it requires recovery from the unlinked list, then INACTIVE transaction that removes it from the unlinked list and sets di_mode to zero has not been replayed at all. XFS_IGET_CREATE is only needed for inodes with a zero di_mode.... IOWs, I'm not sure how you'd get an inode with a zero mode on the unlinked list at all, and certainly the current xfs_iget() call should not return any inodes with a zero di_mode. So why is there special code to handle this in recovery? Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Thu Apr 10 20:35:58 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 10 Apr 2008 20:36:26 -0700 (PDT) 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.0 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 m3B3ZsPF007307 for ; Thu, 10 Apr 2008 20:35:56 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA23726; Fri, 11 Apr 2008 13:36:30 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3B3aTsT128962803; Fri, 11 Apr 2008 13:36:29 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3B3aSjc128304480; Fri, 11 Apr 2008 13:36:28 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Fri, 11 Apr 2008 13:36:28 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [patch] xfsqa - 166 - fix filter for stripe aligned filesystems Message-ID: <20080411033628.GN103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15374 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Flags has extra bits set in it xfs_bmap output when the filesyste is using stripe alignment. Fix the test to only look at the unwritten flag. Capture the xfs_bmap output as well so failures can be debugged easily. Signed-off-by: Dave Chinner --- xfstests/166 | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) Index: xfs-cmds/xfstests/166 =================================================================== --- xfs-cmds.orig/xfstests/166 2008-03-25 15:29:35.000000000 +1100 +++ xfs-cmds/xfstests/166 2008-04-11 13:33:31.220068950 +1000 @@ -17,6 +17,7 @@ here=`pwd` tmp=/tmp/$$ status=1 # failure is the default! trap "_cleanup; exit \$status" 0 1 2 3 15 +rm $seq.full _cleanup() { @@ -39,9 +40,14 @@ _filter_blocks() unwritten2 = ((1048576/512) / 2) - 2 * written_size } - if ($7) { - size = "RIGHT" - flags = "GOOD" + /* is the extent unwritten? */ + unwritten_ext = 0; + if ($7 >= 10000) + unwritten_ext = 1; + + size = "RIGHT" + flags = "GOOD" + if (unwritten_ext) { if (unwritten1) { if ($6 != unwritten1) size = "WRONG" @@ -49,11 +55,7 @@ _filter_blocks() } else if ($6 != unwritten2) { size = "WRONG" } - if ($7 < 10000) - flags = "BAD" } else { - size = "RIGHT" - flags = "GOOD" if ($6 != written_size) size = "WRONG" } @@ -77,6 +79,7 @@ FILE_SIZE=1048576 rm -f $TEST_FILE $TEST_PROG $FILE_SIZE $TEST_FILE +xfs_bmap -vp $TEST_FILE >> $seq.full xfs_bmap -vp $TEST_FILE | _filter_blocks status=0 From owner-xfs@oss.sgi.com Thu Apr 10 21:39:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 10 Apr 2008 21:39:26 -0700 (PDT) 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.0 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 m3B4cxpU012868 for ; Thu, 10 Apr 2008 21:39:03 -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 OAA24890; Fri, 11 Apr 2008 14:39:29 +1000 Date: Fri, 11 Apr 2008 14:40:09 +1000 To: "Christoph Hellwig" , xfs@oss.sgi.com Subject: Re: [PATCH 2/2] simplify xfs_lock_for_rename From: "Barry Naujok" Organization: SGI Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080410184413.GB6771@lst.de> Message-ID: In-Reply-To: <20080410184413.GB6771@lst.de> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m3B4d5pU012870 X-archive-position: 15375 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Fri, 11 Apr 2008 04:44:13 +1000, Christoph Hellwig wrote: > as with lookup merge what's left of xfs_dir_lookup_int into it, kill > a useless lock roundtrip left over from IRIX and kill a bunch of useless > variables. > > > Signed-off-by: Christoph Hellwig > > Index: linux-2.6-xfs/fs/xfs/xfs_rename.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_rename.c 2008-04-09 20:30:08.000000000 > +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_rename.c 2008-04-10 08:58:50.000000000 +0200 > @@ -67,10 +67,6 @@ xfs_rename_unlock4( > } > } > -#ifdef DEBUG > -int xfs_rename_skip, xfs_rename_nskip; > -#endif > - > /* > * The following routine will acquire the locks required for a rename > * operation. The code understands the semantics of renames and will > @@ -92,47 +88,33 @@ xfs_lock_for_rename( > xfs_inode_t **i_tab,/* out: array of inode returned, sorted */ > int *num_inodes) /* out: number of inodes in array */ > { > - xfs_inode_t *ip2 = NULL; > xfs_inode_t *temp; > - xfs_ino_t inum1, inum2; > + xfs_ino_t inum2; > int error; > int i, j; > uint lock_mode; > - int diff_dirs = (dp1 != dp2); > - /* > - * First, find out the current inums of the entries so that we > - * can determine the initial locking order. We'll have to > - * sanity check stuff after all the locks have been acquired > - * to see if we still have the right inodes, directories, etc. > - */ > - lock_mode = xfs_ilock_map_shared(dp1); > + *ipp2 = NULL; > + > IHOLD(ip1); > xfs_itrace_ref(ip1); > - inum1 = ip1->i_ino; > - > - /* > - * Unlock dp1 and lock dp2 if they are different. > - */ > - if (diff_dirs) { > - xfs_iunlock_map_shared(dp1, lock_mode); > - lock_mode = xfs_ilock_map_shared(dp2); > + lock_mode = xfs_ilock_map_shared(dp2); > + error = xfs_dir_lookup(NULL, dp2, name2, &inum2); > + if (!error) { > + xfs_iunlock(dp2, lock_mode); > + error = xfs_iget(dp2->i_mount, NULL, inum2, 0, 0, ipp2, 0); > + xfs_ilock(dp2, lock_mode); Is this xfs_dir_lookup call actually needed? It seems that do_rename() in namei.c calls lookup_hash/__lookup_hash which does an inode->i_op->lookup() to get the dentry. This will do the xfs_lookup anyway, taking a refernence if the target exists. error = do_path_lookup(newdfd, newname, LOOKUP_PARENT, &newnd); ... new_dentry = lookup_hash(&newnd); ... error = vfs_rename(old_dir->d_inode, old_dentry, new_dir->d_inode, new_dentry); Therefore, target_ip/ipp2 is already known then when xfs_rename/ xfs_lock_for_rename is called. Barry. From owner-xfs@oss.sgi.com Fri Apr 11 00:27:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 00:29:17 -0700 (PDT) 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.3 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 m3B7RsAa008027 for ; Fri, 11 Apr 2008 00:27:56 -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 RAA27725 for ; Fri, 11 Apr 2008 17:28:32 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16365) id 98C2C58C4C15; Fri, 11 Apr 2008 17:28:32 +1000 (EST) Date: Fri, 11 Apr 2008 17:28:32 +1000 To: xfs@oss.sgi.com Subject: [REVIEW] Remove unused HAVE_SPLICE macro User-Agent: nail 11.25 7/29/05 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-Id: <20080411072832.98C2C58C4C15@chook.melbourne.sgi.com> From: donaldd@sgi.com (Donald Douwsma) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15376 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: donaldd@sgi.com Precedence: bulk X-list: xfs Still more 2.4 build remnants to get rid of... HAVE_SPLICE was part of the infrastructure for building 2.4 and 2.6 kernels out of the same tree. Now we don't build 2.4 kernels this way anymore its unused. Signed-off-by: Donald Douwsma --- a/fs/xfs/linux-2.6/xfs_linux.h 2008-04-08 13:23:55.000000000 +1000 +++ b/fs/xfs/linux-2.6/xfs_linux.h 2008-04-08 12:09:22.455341741 +1000 @@ -99,7 +99,6 @@ /* * Feature macros (disable/enable) */ -#define HAVE_SPLICE /* a splice(2) exists in 2.6, but not in 2.4 */ #ifdef CONFIG_SMP #define HAVE_PERCPU_SB /* per cpu superblock counters are a 2.6 feature */ #else From owner-xfs@oss.sgi.com Fri Apr 11 00:37:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 00:37:10 -0700 (PDT) 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 (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 m3B7b227009554 for ; Fri, 11 Apr 2008 00:37:03 -0700 X-ASG-Debug-ID: 1207899457-343301d90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D4E2877DAB8; Fri, 11 Apr 2008 00:37:38 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id XRMdOlmVGtZu6CaK; Fri, 11 Apr 2008 00:37:38 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3B7bVF3009336 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Fri, 11 Apr 2008 09:37:31 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3B7bUgn009333; Fri, 11 Apr 2008 09:37:30 +0200 Date: Fri, 11 Apr 2008 09:37:30 +0200 From: Christoph Hellwig To: Barry Naujok Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 2/2] simplify xfs_lock_for_rename Subject: Re: [PATCH 2/2] simplify xfs_lock_for_rename Message-ID: <20080411073730.GA9236@lst.de> References: <20080410184413.GB6771@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1207899460 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.1, rules version 3.1.47460 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15377 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs > > It seems that do_rename() in namei.c calls lookup_hash/__lookup_hash > which does an inode->i_op->lookup() to get the dentry. This will do > the xfs_lookup anyway, taking a refernence if the target exists. > > error = do_path_lookup(newdfd, newname, LOOKUP_PARENT, &newnd); > ... > new_dentry = lookup_hash(&newnd); > ... > error = vfs_rename(old_dir->d_inode, old_dentry, > new_dir->d_inode, new_dentry); > > Therefore, target_ip/ipp2 is already known then when xfs_rename/ > xfs_lock_for_rename is called. You're right. Back to the drawing board to make rename even simpler. None of the other patches I sent yesterday depends on this one so they can go in independently. And I'd especially like to see the lookup one before lookup gets more complicated again for CI support. From owner-xfs@oss.sgi.com Fri Apr 11 00:39:53 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 00:40:11 -0700 (PDT) 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 (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 m3B7dplr010189 for ; Fri, 11 Apr 2008 00:39:53 -0700 X-ASG-Debug-ID: 1207899629-15f3034c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8740577DB0A; Fri, 11 Apr 2008 00:40:29 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id hC7GH7JJ87DvzhAc; Fri, 11 Apr 2008 00:40:29 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3B7eNF3009491 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Fri, 11 Apr 2008 09:40:23 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3B7eN77009489; Fri, 11 Apr 2008 09:40:23 +0200 Date: Fri, 11 Apr 2008 09:40:23 +0200 From: Christoph Hellwig To: David Chinner Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: odd code in xfs_remove Subject: Re: odd code in xfs_remove Message-ID: <20080411074023.GB9236@lst.de> References: <20080410185445.GA7521@lst.de> <20080411023145.GK103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080411023145.GK103491721@sgi.com> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1207899630 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.1, rules version 3.1.47460 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15378 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Fri, Apr 11, 2008 at 12:31:45PM +1000, David Chinner wrote: > Looks like no harm is done by this and it's a rarely hit corner > case, but it would appear that we should be passing in resblks in > remove if only to avoid a potential transaction reservation > overrun.... Okay, I'll prepare a patch and test it a little. This was the only spurious difference between xfs_remove and xfs_rmdir left, after this we can almost trivially merge them. From owner-xfs@oss.sgi.com Fri Apr 11 00:41:05 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 00:41:12 -0700 (PDT) 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 m3B7f4Pn010493 for ; Fri, 11 Apr 2008 00:41:05 -0700 X-ASG-Debug-ID: 1207899701-6a2e00f30000-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 CE8FF128EC7C for ; Fri, 11 Apr 2008 00:41:41 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 9vMoEyndozdRy66D for ; Fri, 11 Apr 2008 00:41:41 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JkDsj-0002PB-EW; Fri, 11 Apr 2008 07:41:09 +0000 Date: Fri, 11 Apr 2008 03:41:09 -0400 From: Christoph Hellwig To: Donald Douwsma Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [REVIEW] Remove unused HAVE_SPLICE macro Subject: Re: [REVIEW] Remove unused HAVE_SPLICE macro Message-ID: <20080411074109.GA3936@infradead.org> References: <20080411072832.98C2C58C4C15@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080411072832.98C2C58C4C15@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207899703 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.1, rules version 3.1.47461 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15379 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Fri, Apr 11, 2008 at 05:28:32PM +1000, Donald Douwsma wrote: > Still more 2.4 build remnants to get rid of... > > HAVE_SPLICE was part of the infrastructure for building 2.4 and 2.6 > kernels out of the same tree. Now we don't build 2.4 kernels this > way anymore its unused. Looks good. From owner-xfs@oss.sgi.com Fri Apr 11 01:10:05 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 01:10:24 -0700 (PDT) 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.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 m3B8A4wP014755 for ; Fri, 11 Apr 2008 01:10:05 -0700 X-ASG-Debug-ID: 1207901441-49a401990000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A92E277DE86 for ; Fri, 11 Apr 2008 01:10:41 -0700 (PDT) Received: from smtp7-g19.free.fr (smtp7-g19.free.fr [212.27.42.64]) by cuda.sgi.com with ESMTP id HiQCGfDgXFn0mVW2 for ; Fri, 11 Apr 2008 01:10:41 -0700 (PDT) Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by smtp7-g19.free.fr (Postfix) with ESMTP id B36A4322884 for ; Fri, 11 Apr 2008 10:10:09 +0200 (CEST) Received: from galadriel.home (pla78-1-82-235-234-79.fbx.proxad.net [82.235.234.79]) by smtp7-g19.free.fr (Postfix) with ESMTP id 48BC132283B for ; Fri, 11 Apr 2008 10:10:09 +0200 (CEST) Date: Fri, 11 Apr 2008 10:06:50 +0200 From: Emmanuel Florac To: X-ASG-Orig-Subj: About external log and barriers Subject: About external log and barriers Message-ID: <20080411100650.67ae85c1@galadriel.home> Organization: Intellique X-Mailer: Claws Mail 2.9.1 (GTK+ 2.8.20; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Barracuda-Connect: smtp7-g19.free.fr[212.27.42.64] X-Barracuda-Start-Time: 1207901442 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.1, rules version 3.1.47462 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15380 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Just to mention an interesting thing I've tested : using a fast SSD (MTRON 7000) to hold the filesystem log for a big RAID array gives an high boost for small IO on the filesystem, somewhat similar to a "no barrier" but much safer, and quicker for random file 1KB open and read. The benchmark creates 250000 1KB files, then randomly open, stat and read them. I made an average of several runs to compensate for the randomness of the test. mkfs.xfs -f -l logdev=/dev/sdb1,size=134217728 /dev/vg0/lv0 ... testing 250000 files ... #1 sequential create : 189.197 seconds (1321.37 op/s). #2 random open : 6.199 seconds (40328.99 op/s). #3 random stat : 1.981 seconds (126228.58 op/s). #4 random read : 10.851 seconds (23038.37 op/s). #5 sequential delete : 50.638 seconds (4937.01 op/s). # internal log, no barrier #1 sequential create : 387.128 seconds (645.78 op/s). #2 random open : 12.585 seconds (19864.55 op/s). #3 random stat : 1.935 seconds (129192.01 op/s). #4 random read : 35.002 seconds (7142.51 op/s). #5 sequential delete : 20.691 seconds (12082.71 op/s). #internal log, with barriers (fs on /dev/sda5) ... testing 250000 files ... #1 sequential create : 4728.878 seconds (52.87 op/s). -> OUCH. #2 random open : 7.645 seconds (32700.42 op/s). #3 random stat : 1.931 seconds (129446.22 op/s). #4 random read : 15.157 seconds (6494.04 op/s). #5 sequential delete : too long, ^C after a few minutes! #external log on SSD, with barriers ( fs on /dev/sda5) ... testing 250000 files ... #1 sequential create : 193.766 seconds (1290.22 op/s). #2 random open : 4.197 seconds (59567.76 op/s). #3 random stat : 1.967 seconds (127069.32 op/s). #4 random read : 13.847 seconds (18054.43 op/s). #5 sequential delete : 53.281 seconds (4692.11 op/s). Apparently small writes are just too slow to be usable with barriers, unless you're using a 1500$ SSD to store your log :) -- -------------------------------------------------- Emmanuel Florac www.intellique.com -------------------------------------------------- From owner-xfs@oss.sgi.com Fri Apr 11 01:38:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 01:39:05 -0700 (PDT) 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.0 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 m3B8cfw8018645 for ; Fri, 11 Apr 2008 01:38:44 -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 SAA29224; Fri, 11 Apr 2008 18:39:13 +1000 To: "Christoph Hellwig" Subject: Re: [PATCH 2/2] simplify xfs_lock_for_rename 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: <20080410184413.GB6771@lst.de> <20080411073730.GA9236@lst.de> Date: Fri, 11 Apr 2008 18:40:53 +1000 Message-ID: In-Reply-To: <20080411073730.GA9236@lst.de> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m3B8ckw8018656 X-archive-position: 15381 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Fri, 11 Apr 2008 17:37:30 +1000, Christoph Hellwig wrote: >> >> It seems that do_rename() in namei.c calls lookup_hash/__lookup_hash >> which does an inode->i_op->lookup() to get the dentry. This will do >> the xfs_lookup anyway, taking a refernence if the target exists. >> >> error = do_path_lookup(newdfd, newname, LOOKUP_PARENT, &newnd); >> ... >> new_dentry = lookup_hash(&newnd); >> ... >> error = vfs_rename(old_dir->d_inode, old_dentry, >> new_dir->d_inode, new_dentry); >> >> Therefore, target_ip/ipp2 is already known then when xfs_rename/ >> xfs_lock_for_rename is called. > > You're right. Back to the drawing board to make rename even simpler. > None of the other patches I sent yesterday depends on this one so they > can go in independently. And I'd especially like to see the lookup one > before lookup gets more complicated again for CI support. I've already applied your patches to my workarea. Certainly makes my CI code simpler. Barry. From owner-xfs@oss.sgi.com Fri Apr 11 01:46:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 01:46:23 -0700 (PDT) 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 m3B8kE6k019803 for ; Fri, 11 Apr 2008 01:46:16 -0700 X-ASG-Debug-ID: 1207903612-5612034d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B98549B3112; Fri, 11 Apr 2008 01:46:52 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id l6e7YbrrLiJUOaN5; Fri, 11 Apr 2008 01:46:52 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3B8kkF3013372 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Fri, 11 Apr 2008 10:46:46 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3B8kkkx013370; Fri, 11 Apr 2008 10:46:46 +0200 Date: Fri, 11 Apr 2008 10:46:46 +0200 From: Christoph Hellwig To: Barry Naujok Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 2/2] simplify xfs_lock_for_rename Subject: Re: [PATCH 2/2] simplify xfs_lock_for_rename Message-ID: <20080411084646.GA13313@lst.de> References: <20080410184413.GB6771@lst.de> <20080411073730.GA9236@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=unknown-8bit Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1207903613 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.1, rules version 3.1.47465 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15382 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Fri, Apr 11, 2008 at 06:40:53PM +1000, Barry Naujok wrote: > I've already applied your patches to my workarea. Certainly makes my > CI code simpler. I haveåa new rename patch ready aswell, it's half-way through xfsqa so far. From owner-xfs@oss.sgi.com Fri Apr 11 02:11:24 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 02:11:43 -0700 (PDT) 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_63 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 m3B9BMb0022927 for ; Fri, 11 Apr 2008 02:11:24 -0700 X-ASG-Debug-ID: 1207905118-49a402f70000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2718B77E439 for ; Fri, 11 Apr 2008 02:11:59 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id cZ0P6WY3WzXTZrOy for ; Fri, 11 Apr 2008 02:11:59 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3B9BqF3014948 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 11 Apr 2008 11:11:52 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3B9BqxU014946 for xfs@oss.sgi.com; Fri, 11 Apr 2008 11:11:52 +0200 Date: Fri, 11 Apr 2008 11:11:52 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 2/2] remove manual lookup from xfs_rename and simplify locking Subject: [PATCH 2/2] remove manual lookup from xfs_rename and simplify locking Message-ID: <20080411091152.GA14495@lst.de> References: <20080410184413.GB6771@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080410184413.GB6771@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1207905121 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.82 X-Barracuda-Spam-Status: No, SCORE=-1.82 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_MJ615 X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47466 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 BSF_SC0_MJ615 Custom Rule MJ615 X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15383 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs ->rename already gets the target inode passed if it exits. Pass it down to xfs_rename so that we can avoid looking it up again. Also simplify locking as the first lock section in xfs_rename can go away now: the isdir is an invariant over the lifetime of the inode, and new_parent and the nlink check are namespace topology protected by i_mutex in the VFS. The projid check needs to move into the second lock section anyway to not be racy. Also kill the now unused xfs_dir_lookup_int and remove the now-unused first_locked argumet to xfs_lock_inodes. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/xfs_rename.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_rename.c 2008-04-09 18:35:28.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_rename.c 2008-04-11 09:06:51.000000000 +0200 @@ -55,85 +55,32 @@ xfs_rename_unlock4( xfs_iunlock(i_tab[0], lock_mode); for (i = 1; i < 4; i++) { - if (i_tab[i] == NULL) { + if (i_tab[i] == NULL) break; - } + /* * Watch out for duplicate entries in the table. */ - if (i_tab[i] != i_tab[i-1]) { + if (i_tab[i] != i_tab[i-1]) xfs_iunlock(i_tab[i], lock_mode); - } } } -#ifdef DEBUG -int xfs_rename_skip, xfs_rename_nskip; -#endif - /* - * The following routine will acquire the locks required for a rename - * operation. The code understands the semantics of renames and will - * validate that name1 exists under dp1 & that name2 may or may not - * exist under dp2. - * - * We are renaming dp1/name1 to dp2/name2. - * - * Return ENOENT if dp1 does not exist, other lookup errors, or 0 for success. + * Enter all inodes for a rename transaction into a sorted array. */ -STATIC int -xfs_lock_for_rename( +STATIC void +xfs_sort_for_rename( xfs_inode_t *dp1, /* in: old (source) directory inode */ xfs_inode_t *dp2, /* in: new (target) directory inode */ xfs_inode_t *ip1, /* in: inode of old entry */ - struct xfs_name *name2, /* in: new entry name */ - xfs_inode_t **ipp2, /* out: inode of new entry, if it + xfs_inode_t *ip2, /* in: inode of new entry, if it already exists, NULL otherwise. */ xfs_inode_t **i_tab,/* out: array of inode returned, sorted */ int *num_inodes) /* out: number of inodes in array */ { - xfs_inode_t *ip2 = NULL; xfs_inode_t *temp; - xfs_ino_t inum1, inum2; - int error; int i, j; - uint lock_mode; - int diff_dirs = (dp1 != dp2); - - /* - * First, find out the current inums of the entries so that we - * can determine the initial locking order. We'll have to - * sanity check stuff after all the locks have been acquired - * to see if we still have the right inodes, directories, etc. - */ - lock_mode = xfs_ilock_map_shared(dp1); - IHOLD(ip1); - xfs_itrace_ref(ip1); - - inum1 = ip1->i_ino; - - /* - * Unlock dp1 and lock dp2 if they are different. - */ - if (diff_dirs) { - xfs_iunlock_map_shared(dp1, lock_mode); - lock_mode = xfs_ilock_map_shared(dp2); - } - - error = xfs_dir_lookup_int(dp2, lock_mode, name2, &inum2, &ip2); - if (error == ENOENT) { /* target does not need to exist. */ - inum2 = 0; - } else if (error) { - /* - * If dp2 and dp1 are the same, the next line unlocks dp1. - * Got it? - */ - xfs_iunlock_map_shared(dp2, lock_mode); - IRELE (ip1); - return error; - } else { - xfs_itrace_ref(ip2); - } /* * i_tab contains a list of pointers to inodes. We initialize @@ -145,21 +92,20 @@ xfs_lock_for_rename( i_tab[0] = dp1; i_tab[1] = dp2; i_tab[2] = ip1; - if (inum2 == 0) { - *num_inodes = 3; - i_tab[3] = NULL; - } else { + if (ip2) { *num_inodes = 4; i_tab[3] = ip2; + } else { + *num_inodes = 3; + i_tab[3] = NULL; } - *ipp2 = i_tab[3]; /* * Sort the elements via bubble sort. (Remember, there are at * most 4 elements to sort, so this is adequate.) */ - for (i=0; i < *num_inodes; i++) { - for (j=1; j < *num_inodes; j++) { + for (i = 0; i < *num_inodes; i++) { + for (j = 1; j < *num_inodes; j++) { if (i_tab[j]->i_ino < i_tab[j-1]->i_ino) { temp = i_tab[j]; i_tab[j] = i_tab[j-1]; @@ -167,30 +113,6 @@ xfs_lock_for_rename( } } } - - /* - * We have dp2 locked. If it isn't first, unlock it. - * If it is first, tell xfs_lock_inodes so it can skip it - * when locking. if dp1 == dp2, xfs_lock_inodes will skip both - * since they are equal. xfs_lock_inodes needs all these inodes - * so that it can unlock and retry if there might be a dead-lock - * potential with the log. - */ - - if (i_tab[0] == dp2 && lock_mode == XFS_ILOCK_SHARED) { -#ifdef DEBUG - xfs_rename_skip++; -#endif - xfs_lock_inodes(i_tab, *num_inodes, 1, XFS_ILOCK_SHARED); - } else { -#ifdef DEBUG - xfs_rename_nskip++; -#endif - xfs_iunlock_map_shared(dp2, lock_mode); - xfs_lock_inodes(i_tab, *num_inodes, 0, XFS_ILOCK_SHARED); - } - - return 0; } /* @@ -202,10 +124,10 @@ xfs_rename( struct xfs_name *src_name, xfs_inode_t *src_ip, xfs_inode_t *target_dp, - struct xfs_name *target_name) + struct xfs_name *target_name, + xfs_inode_t *target_ip) { - xfs_trans_t *tp; - xfs_inode_t *target_ip; + xfs_trans_t *tp = NULL; xfs_mount_t *mp = src_dp->i_mount; int new_parent; /* moving to a new dir */ int src_is_directory; /* src_name is a directory */ @@ -230,64 +152,31 @@ xfs_rename( target_dp, DM_RIGHT_NULL, src_name->name, target_name->name, 0, 0, 0); - if (error) { + if (error) return error; - } } /* Return through std_return after this point. */ - /* - * Lock all the participating inodes. Depending upon whether - * the target_name exists in the target directory, and - * whether the target directory is the same as the source - * directory, we can lock from 2 to 4 inodes. - * xfs_lock_for_rename() will return ENOENT if src_name - * does not exist in the source directory. - */ - tp = NULL; - error = xfs_lock_for_rename(src_dp, target_dp, src_ip, target_name, - &target_ip, inodes, &num_inodes); - if (error) { - /* - * We have nothing locked, no inode references, and - * no transaction, so just get out. - */ - goto std_return; - } - - ASSERT(src_ip != NULL); + new_parent = (src_dp != target_dp); + src_is_directory = ((src_ip->i_d.di_mode & S_IFMT) == S_IFDIR); - if ((src_ip->i_d.di_mode & S_IFMT) == S_IFDIR) { + if (src_is_directory) { /* * Check for link count overflow on target_dp */ - if (target_ip == NULL && (src_dp != target_dp) && + if (target_ip == NULL && new_parent && target_dp->i_d.di_nlink >= XFS_MAXLINK) { error = XFS_ERROR(EMLINK); - xfs_rename_unlock4(inodes, XFS_ILOCK_SHARED); - goto rele_return; + goto std_return; } } - /* - * If we are using project inheritance, we only allow renames - * into our tree when the project IDs are the same; else the - * tree quota mechanism would be circumvented. - */ - if (unlikely((target_dp->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) && - (target_dp->i_d.di_projid != src_ip->i_d.di_projid))) { - error = XFS_ERROR(EXDEV); - xfs_rename_unlock4(inodes, XFS_ILOCK_SHARED); - goto rele_return; - } - - new_parent = (src_dp != target_dp); - src_is_directory = ((src_ip->i_d.di_mode & S_IFMT) == S_IFDIR); + xfs_sort_for_rename(src_dp, target_dp, src_ip, target_ip, + inodes, &num_inodes); - /* - * Drop the locks on our inodes so that we can start the transaction. - */ - xfs_rename_unlock4(inodes, XFS_ILOCK_SHARED); + IHOLD(src_ip); + if (target_ip) + IHOLD(target_ip); XFS_BMAP_INIT(&free_list, &first_block); tp = xfs_trans_alloc(mp, XFS_TRANS_RENAME); @@ -314,9 +203,25 @@ xfs_rename( } /* - * Reacquire the inode locks we dropped above. + * Lock all the participating inodes. Depending upon whether + * the target_name exists in the target directory, and + * whether the target directory is the same as the source + * directory, we can lock from 2 to 4 inodes. + */ + xfs_lock_inodes(inodes, num_inodes, XFS_ILOCK_EXCL); + + /* + * If we are using project inheritance, we only allow renames + * into our tree when the project IDs are the same; else the + * tree quota mechanism would be circumvented. */ - xfs_lock_inodes(inodes, num_inodes, 0, XFS_ILOCK_EXCL); + if (unlikely((target_dp->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) && + (target_dp->i_d.di_projid != src_ip->i_d.di_projid))) { + error = XFS_ERROR(EXDEV); + xfs_rename_unlock4(inodes, XFS_ILOCK_SHARED); + xfs_trans_cancel(tp, cancel_flags); + goto rele_return; + } /* * Join all the inodes to the transaction. From this point on, Index: linux-2.6-xfs/fs/xfs/xfs_utils.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_utils.c 2008-04-09 18:35:28.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_utils.c 2008-04-11 08:41:32.000000000 +0200 @@ -41,49 +41,6 @@ #include "xfs_utils.h" -int -xfs_dir_lookup_int( - xfs_inode_t *dp, - uint lock_mode, - struct xfs_name *name, - xfs_ino_t *inum, - xfs_inode_t **ipp) -{ - int error; - - xfs_itrace_entry(dp); - - error = xfs_dir_lookup(NULL, dp, name, inum); - if (!error) { - /* - * Unlock the directory. We do this because we can't - * hold the directory lock while doing the vn_get() - * in xfs_iget(). Doing so could cause us to hold - * a lock while waiting for the inode to finish - * being inactive while it's waiting for a log - * reservation in the inactive routine. - */ - xfs_iunlock(dp, lock_mode); - error = xfs_iget(dp->i_mount, NULL, *inum, 0, 0, ipp, 0); - xfs_ilock(dp, lock_mode); - - if (error) { - *ipp = NULL; - } else if ((*ipp)->i_d.di_mode == 0) { - /* - * The inode has been freed. Something is - * wrong so just get out of here. - */ - xfs_iunlock(dp, lock_mode); - xfs_iput_new(*ipp, 0); - *ipp = NULL; - xfs_ilock(dp, lock_mode); - error = XFS_ERROR(ENOENT); - } - } - return error; -} - /* * Allocates a new inode from disk and return a pointer to the * incore copy. This routine will internally commit the current Index: linux-2.6-xfs/fs/xfs/xfs_utils.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_utils.h 2008-04-09 18:35:28.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_utils.h 2008-04-10 20:40:36.000000000 +0200 @@ -21,8 +21,6 @@ #define IRELE(ip) VN_RELE(XFS_ITOV(ip)) #define IHOLD(ip) VN_HOLD(XFS_ITOV(ip)) -extern int xfs_dir_lookup_int(xfs_inode_t *, uint, struct xfs_name *, - xfs_ino_t *, xfs_inode_t **); extern int xfs_truncate_file(xfs_mount_t *, xfs_inode_t *); extern int xfs_dir_ialloc(xfs_trans_t **, xfs_inode_t *, mode_t, xfs_nlink_t, xfs_dev_t, cred_t *, prid_t, int, Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-04-11 08:42:18.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c 2008-04-11 08:43:47.000000000 +0200 @@ -518,7 +518,8 @@ xfs_vn_rename( xfs_dentry_to_name(&nname, ndentry); error = xfs_rename(XFS_I(odir), &oname, XFS_I(odentry->d_inode), - XFS_I(ndir), &nname); + XFS_I(ndir), &nname, new_inode ? + XFS_I(new_inode) : NULL); if (likely(!error)) { if (new_inode) xfs_validate_fields(new_inode); Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.h 2008-04-11 08:43:54.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.h 2008-04-11 08:44:19.000000000 +0200 @@ -48,7 +48,7 @@ int xfs_change_file_space(struct xfs_ino struct cred *credp, int attr_flags); int xfs_rename(struct xfs_inode *src_dp, struct xfs_name *src_name, struct xfs_inode *src_ip, struct xfs_inode *target_dp, - struct xfs_name *target_name); + struct xfs_name *target_name, struct xfs_inode *target_ip); int xfs_attr_get(struct xfs_inode *ip, const char *name, char *value, int *valuelenp, int flags, cred_t *cred); int xfs_attr_set(struct xfs_inode *dp, const char *name, char *value, Index: linux-2.6-xfs/fs/xfs/xfs_dfrag.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_dfrag.c 2008-04-11 09:06:56.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_dfrag.c 2008-04-11 09:07:06.000000000 +0200 @@ -162,7 +162,7 @@ xfs_swap_extents( ips[1] = ip; } - xfs_lock_inodes(ips, 2, 0, lock_flags); + xfs_lock_inodes(ips, 2, lock_flags); locked = 1; /* Verify that both files have the same format */ @@ -265,7 +265,7 @@ xfs_swap_extents( locked = 0; goto error0; } - xfs_lock_inodes(ips, 2, 0, XFS_ILOCK_EXCL); + xfs_lock_inodes(ips, 2, XFS_ILOCK_EXCL); /* * Count the number of extended attribute blocks Index: linux-2.6-xfs/fs/xfs/xfs_inode.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_inode.h 2008-04-11 09:07:13.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_inode.h 2008-04-11 09:07:22.000000000 +0200 @@ -534,7 +534,7 @@ int xfs_iflush(xfs_inode_t *, uint); void xfs_iflush_all(struct xfs_mount *); void xfs_ichgtime(xfs_inode_t *, int); xfs_fsize_t xfs_file_last_byte(xfs_inode_t *); -void xfs_lock_inodes(xfs_inode_t **, int, int, uint); +void xfs_lock_inodes(xfs_inode_t **, int, uint); void xfs_synchronize_atime(xfs_inode_t *); void xfs_mark_inode_dirty_sync(xfs_inode_t *); Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.c 2008-04-11 09:07:28.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.c 2008-04-11 09:08:56.000000000 +0200 @@ -2120,7 +2120,7 @@ again: ips[0] = ip; ips[1] = dp; - xfs_lock_inodes(ips, 2, 0, XFS_ILOCK_EXCL); + xfs_lock_inodes(ips, 2, XFS_ILOCK_EXCL); } /* else e_inum == dp->i_ino */ /* This can happen if we're asked to lock /x/.. @@ -2168,7 +2168,6 @@ void xfs_lock_inodes( xfs_inode_t **ips, int inodes, - int first_locked, uint lock_mode) { int attempts = 0, i, j, try_lock; @@ -2176,13 +2175,8 @@ xfs_lock_inodes( ASSERT(ips && (inodes >= 2)); /* we need at least two */ - if (first_locked) { - try_lock = 1; - i = 1; - } else { - try_lock = 0; - i = 0; - } + try_lock = 0; + i = 0; again: for (; i < inodes; i++) { @@ -2544,7 +2538,7 @@ xfs_link( ips[1] = sip; } - xfs_lock_inodes(ips, 2, 0, XFS_ILOCK_EXCL); + xfs_lock_inodes(ips, 2, XFS_ILOCK_EXCL); /* * Increment vnode ref counts since xfs_trans_commit & From owner-xfs@oss.sgi.com Fri Apr 11 02:50:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 02:51:02 -0700 (PDT) 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_62 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 m3B9og5F028128 for ; Fri, 11 Apr 2008 02:50:43 -0700 X-ASG-Debug-ID: 1207907475-0a43006e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 839F9128F267 for ; Fri, 11 Apr 2008 02:51:18 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id J9GaOMP1NJc58elF for ; Fri, 11 Apr 2008 02:51:18 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3B9DvF3015067 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 11 Apr 2008 11:13:57 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3B9Dvvv015065 for xfs@oss.sgi.com; Fri, 11 Apr 2008 11:13:57 +0200 Date: Fri, 11 Apr 2008 11:13:57 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] kill di_mode checks after xfs_iget Subject: [PATCH] kill di_mode checks after xfs_iget Message-ID: <20080411091357.GA15008@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1207907480 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.1, rules version 3.1.47469 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15384 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Unless XFS_IGET_CREATE is passed xfs_iget will return ENOENT if it encounters an inode with di_mode == 0. Remove the duplicated checks in the callers. (the log recovery case is not touched for now) Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/dmapi/xfs_dm.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/dmapi/xfs_dm.c 2008-04-10 19:59:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/dmapi/xfs_dm.c 2008-04-10 19:59:58.000000000 +0200 @@ -503,10 +503,6 @@ xfs_dm_bulkall_iget_one( XFS_IGET_BULKSTAT, XFS_ILOCK_SHARED, &ip, bno); if (error) return error; - if (ip->i_d.di_mode == 0) { - xfs_iput_new(ip, XFS_ILOCK_SHARED); - return ENOENT; - } xfs_ip_to_stat(mp, ino, ip, &xbuf->dx_statinfo); dm_ip_to_handle(ip->i_vnode, &handle); @@ -766,10 +762,6 @@ xfs_dm_bulkattr_iget_one( XFS_IGET_BULKSTAT, XFS_ILOCK_SHARED, &ip, bno); if (error) return error; - if (ip->i_d.di_mode == 0) { - xfs_iput_new(ip, XFS_ILOCK_SHARED); - return ENOENT; - } xfs_ip_to_stat(mp, ino, ip, sbuf); dm_ip_to_handle(ip->i_vnode, &handle); Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ioctl.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_ioctl.c 2008-04-10 20:00:13.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ioctl.c 2008-04-10 20:00:38.000000000 +0200 @@ -238,7 +238,7 @@ xfs_vget_fsop_handlereq( return error; if (ip == NULL) return XFS_ERROR(EIO); - if (ip->i_d.di_mode == 0 || ip->i_d.di_gen != igen) { + if (ip->i_d.di_gen != igen) { xfs_iput_new(ip, XFS_ILOCK_SHARED); return XFS_ERROR(ENOENT); } Index: linux-2.6-xfs/fs/xfs/quota/xfs_qm.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/quota/xfs_qm.c 2008-04-10 19:58:50.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/quota/xfs_qm.c 2008-04-10 19:58:54.000000000 +0200 @@ -1737,12 +1737,6 @@ xfs_qm_dqusage_adjust( return error; } - if (ip->i_d.di_mode == 0) { - xfs_iput_new(ip, XFS_ILOCK_EXCL); - *res = BULKSTAT_RV_NOTHING; - return XFS_ERROR(ENOENT); - } - /* * Obtain the locked dquots. In case of an error (eg. allocation * fails for ENOSPC), we return the negative of the error number Index: linux-2.6-xfs/fs/xfs/quota/xfs_qm_syscalls.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/quota/xfs_qm_syscalls.c 2008-04-10 19:58:28.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/quota/xfs_qm_syscalls.c 2008-04-10 19:58:45.000000000 +0200 @@ -1366,12 +1366,6 @@ xfs_qm_internalqcheck_adjust( return (error); } - if (ip->i_d.di_mode == 0) { - xfs_iput_new(ip, lock_flags); - *res = BULKSTAT_RV_NOTHING; - return XFS_ERROR(ENOENT); - } - /* * This inode can have blocks after eof which can get released * when we send it to inactive. Since we don't check the dquot Index: linux-2.6-xfs/fs/xfs/xfs_itable.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_itable.c 2008-04-10 20:05:04.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_itable.c 2008-04-10 20:05:18.000000000 +0200 @@ -71,11 +71,6 @@ xfs_bulkstat_one_iget( ASSERT(ip != NULL); ASSERT(ip->i_blkno != (xfs_daddr_t)0); - if (ip->i_d.di_mode == 0) { - *stat = BULKSTAT_RV_NOTHING; - error = XFS_ERROR(ENOENT); - goto out_iput; - } vp = XFS_ITOV(ip); dic = &ip->i_d; Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_export.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_export.c 2008-04-10 20:07:06.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_export.c 2008-04-10 20:07:20.000000000 +0200 @@ -133,7 +133,7 @@ xfs_nfs_get_inode( if (!ip) return ERR_PTR(-EIO); - if (!ip->i_d.di_mode || ip->i_d.di_gen != generation) { + if (ip->i_d.di_gen != generation) { xfs_iput_new(ip, XFS_ILOCK_SHARED); return ERR_PTR(-ENOENT); } From owner-xfs@oss.sgi.com Fri Apr 11 03:12:21 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 03:12:39 -0700 (PDT) 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.4 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 m3BACK1b031115 for ; Fri, 11 Apr 2008 03:12:21 -0700 X-ASG-Debug-ID: 1207908776-596d01780000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from py-out-1112.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 14E8C77EADA for ; Fri, 11 Apr 2008 03:12:56 -0700 (PDT) Received: from py-out-1112.google.com (py-out-1112.google.com [64.233.166.176]) by cuda.sgi.com with ESMTP id SSH4CeEIUAKK35tp for ; Fri, 11 Apr 2008 03:12:56 -0700 (PDT) Received: by py-out-1112.google.com with SMTP id j37so440061pyc.4 for ; Fri, 11 Apr 2008 03:12:56 -0700 (PDT) Received: by 10.140.136.6 with SMTP id j6mr1388899rvd.56.1207908401947; Fri, 11 Apr 2008 03:06:41 -0700 (PDT) Received: from humanitas.fs3.ph ( [222.127.47.132]) by mx.google.com with ESMTPS id b39sm3722825rvf.8.2008.04.11.03.06.40 (version=SSLv3 cipher=RC4-MD5); Fri, 11 Apr 2008 03:06:41 -0700 (PDT) X-ASG-Orig-Subj: xfslogd Page Allocation Failure Subject: xfslogd Page Allocation Failure From: Federico Sevilla III To: xfs@oss.sgi.com Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-T/HTTSfTh3F8ZKWkN8vK" Organization: F S 3 Consulting Inc. Date: Fri, 11 Apr 2008 18:06:37 +0800 Message-Id: <1207908397.4745.9.camel@humanitas.fs3.ph> Mime-Version: 1.0 X-Mailer: Evolution 2.6.3 X-Barracuda-Connect: py-out-1112.google.com[64.233.166.176] X-Barracuda-Start-Time: 1207908779 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.1, rules version 3.1.47470 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15385 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jijo@fs3.ph Precedence: bulk X-list: xfs --=-T/HTTSfTh3F8ZKWkN8vK Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Hi, I noticed the below logs in my dmesg. The machine continues to be useable, and I'm not aware of which process wasn't able to perform correctly. Is this a cause for concern? Hope you can advise. Thank you very much. xfslogd/1: page allocation failure. order:0, mode:0x0 Pid: 261, comm: xfslogd/1 Not tainted 2.6.24.2 #1 Call Trace: [] __alloc_pages+0x223/0x381 [] __slab_alloc+0x178/0x53b [] free_address+0x17/0x66 [] kmem_cache_alloc+0x76/0x7c [] free_address+0x17/0x66 [] xfs_buf_free+0x7b/0x7d [] xfs_buf_iodone_callbacks+0x107/0x17b [] xfs_buf_iodone_work+0x0/0x72 [] run_workqueue+0x7f/0x108 [] worker_thread+0x0/0xc8 [] worker_thread+0x91/0xc8 [] autoremove_wake_function+0x0/0x2e [] worker_thread+0x0/0xc8 [] worker_thread+0x0/0xc8 [] kthread+0x3d/0x61 [] child_rip+0xa/0x12 [] kthread+0x0/0x61 [] child_rip+0x0/0x12 Mem-info: DMA per-cpu: CPU 0: Hot: hi: 0, btch: 1 usd: 0 Cold: hi: 0, btch: 1 usd= : 0 CPU 1: Hot: hi: 0, btch: 1 usd: 0 Cold: hi: 0, btch: 1 usd= : 0 DMA32 per-cpu: CPU 0: Hot: hi: 186, btch: 31 usd: 137 Cold: hi: 62, btch: 15 usd= : 47 CPU 1: Hot: hi: 186, btch: 31 usd: 135 Cold: hi: 62, btch: 15 usd= : 48 Active:385341 inactive:88628 dirty:29329 writeback:5822 unstable:0 free:3056 slab:17672 mapped:15772 pagetables:11363 bounce:0 DMA free:8016kB min:28kB low:32kB high:40kB active:2180kB inactive:976kB pr= esent:11424kB pages_scanned:32 all_unreclaimable? no lowmem_reserve[]: 0 2004 2004 2004 DMA32 free:4208kB min:5712kB low:7140kB high:8568kB active:1539184kB inacti= ve:353536kB present:2052196kB pages_scanned:795 all_unreclaimable? no lowmem_reserve[]: 0 0 0 0 DMA: 18*4kB 31*8kB 29*16kB 32*32kB 23*64kB 3*128kB 1*256kB 0*512kB 0*1024kB= 0*2048kB 1*4096kB =3D 8016kB DMA32: 31*4kB 1*8kB 1*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0= *2048kB 1*4096kB =3D 4244kB Swap cache: add 3597048, delete 3537164, find 170970595/171758094, race 0+9= 658 Free swap =3D 535892kB Total swap =3D 1048568kB Free swap: 535892kB 524256 pages of RAM 9091 reserved pages 357974 pages shared 59885 pages swap cached --=20 Federico Sevilla III F S 3 Consulting Inc. http://www.fs3.ph --=-T/HTTSfTh3F8ZKWkN8vK Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQBH/zgt5rCBSJO3Rr4RAjJpAJ9BPfzGlURkLtsXYhErfxoDLyNaHQCfdgy7 teV0Z99ySScT/bzm1p/TRSs= =/AUi -----END PGP SIGNATURE----- --=-T/HTTSfTh3F8ZKWkN8vK-- From owner-xfs@oss.sgi.com Fri Apr 11 03:51:06 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 03:51:23 -0700 (PDT) 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.0 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 m3BAp1YE004441 for ; Fri, 11 Apr 2008 03:51:05 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id UAA01768; Fri, 11 Apr 2008 20:51:36 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3BApYsT129130409; Fri, 11 Apr 2008 20:51:35 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3BApXLV128514257; Fri, 11 Apr 2008 20:51:33 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Fri, 11 Apr 2008 20:51:33 +1000 From: David Chinner To: Federico Sevilla III Cc: xfs@oss.sgi.com Subject: Re: xfslogd Page Allocation Failure Message-ID: <20080411105133.GU103491721@sgi.com> References: <1207908397.4745.9.camel@humanitas.fs3.ph> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1207908397.4745.9.camel@humanitas.fs3.ph> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15386 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Fri, Apr 11, 2008 at 06:06:37PM +0800, Federico Sevilla III wrote: > Hi, > > I noticed the below logs in my dmesg. The machine continues to be > useable, and I'm not aware of which process wasn't able to perform > correctly. Is this a cause for concern? Hope you can advise. > > Thank you very much. > > xfslogd/1: page allocation failure. order:0, mode:0x0 > Pid: 261, comm: xfslogd/1 Not tainted 2.6.24.2 #1 > > Call Trace: > [] __alloc_pages+0x223/0x381 > [] __slab_alloc+0x178/0x53b > [] free_address+0x17/0x66 > [] kmem_cache_alloc+0x76/0x7c > [] free_address+0x17/0x66 > [] xfs_buf_free+0x7b/0x7d > [] xfs_buf_iodone_callbacks+0x107/0x17b > [] xfs_buf_iodone_work+0x0/0x72 There's nothing to worry about from an XFs perspective from this error message. XFS handles the memory allocation error here and does the right thing. The memory allocator is just being noisy. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Fri Apr 11 07:21:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 07:21:46 -0700 (PDT) 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.6 required=5.0 tests=AWL,BAYES_00,WEIRD_PORT 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 m3BELOs2000959 for ; Fri, 11 Apr 2008 07:21:26 -0700 X-ASG-Debug-ID: 1207923721-5091025f0000-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 A17029B4B48 for ; Fri, 11 Apr 2008 07:22:02 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id kgSTuzLk12P7YFLg for ; Fri, 11 Apr 2008 07:22:02 -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 832FC1803B0A1; Fri, 11 Apr 2008 09:22:00 -0500 (CDT) Message-ID: <47FF7408.5000609@sandeen.net> Date: Fri, 11 Apr 2008 09:22:00 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Lachlan McIlroy CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [GIT PULL] XFS update for 2.6.25-rc9 Subject: Re: [GIT PULL] XFS update for 2.6.25-rc9 References: <20080410075208.C88B958C4C15@chook.melbourne.sgi.com> In-Reply-To: <20080410075208.C88B958C4C15@chook.melbourne.sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1207923723 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.1, rules version 3.1.47487 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15387 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Lachlan McIlroy wrote: > Please pull from the for-linus branch: > git pull git://oss.sgi.com:8090/xfs/xfs-2.6.git for-linus Wondering if you guys might consider this for 2.6.24.x stable as well... -Eric > This will update the following files: > > fs/xfs/linux-2.6/xfs_ioctl.c | 2 +- > fs/xfs/quota/xfs_qm.c | 6 +- > fs/xfs/quota/xfs_qm_bhv.c | 2 +- > fs/xfs/quota/xfs_qm_syscalls.c | 4 +- > fs/xfs/xfs_attr_leaf.c | 6 +- > fs/xfs/xfs_bmap.c | 18 +++--- > fs/xfs/xfs_bmap_btree.h | 2 +- > fs/xfs/xfs_dir2.c | 2 +- > fs/xfs/xfs_fsops.c | 24 +++++----- > fs/xfs/xfs_ialloc.c | 6 +- > fs/xfs/xfs_inode.c | 6 +- > fs/xfs/xfs_inode_item.c | 4 +- > fs/xfs/xfs_itable.c | 2 +- > fs/xfs/xfs_log.c | 14 +++--- > fs/xfs/xfs_log_priv.h | 4 +- > fs/xfs/xfs_log_recover.c | 16 +++--- > fs/xfs/xfs_mount.c | 59 +++++++++++++++++----- > fs/xfs/xfs_sb.h | 107 ++++++++++++++------------------------- > fs/xfs/xfs_utils.c | 6 +- > fs/xfs/xfs_vfsops.c | 9 ++-- > fs/xfs/xfs_vnodeops.c | 2 +- > 21 files changed, 153 insertions(+), 148 deletions(-) > > through these commits: > > commit e6957ea48429aeda4f5d51af4238231d44b0dc4a > Author: Eric Sandeen > Date: Thu Apr 10 12:19:34 2008 +1000 > > [XFS] Ensure "both" features2 slots are consistent > > Since older kernels may look in the sb_bad_features2 slot for flags, > rather than zeroing it out on fixup, we should make it equal to the > sb_features2 value. > > Also, if the ATTR2 flag was not found prior to features2 fixup, it was not > set in the mount flags, so re-check after the fixup so that the current > session will use the feature. > > Also fix up the comments to reflect these changes. > > SGI-PV: 980085 > SGI-Modid: xfs-linux-melb:xfs-kern:30778a > > Signed-off-by: Eric Sandeen > Signed-off-by: David Chinner > Signed-off-by: Lachlan McIlroy > > commit ee1c090825bf2f1cb9712489c234eabf69a9a78f > Author: David Chinner > Date: Thu Mar 6 13:45:50 2008 +1100 > > [XFS] Fix superblock features2 field alignment problem > > Due to the xfs_dsb_t structure not being 64 bit aligned, the last field of > the on-disk superblock can vary in location This causes problems when the > filesystem gets moved to a different platform, or there is a 32 bit > userspace and 64 bit kernel. > > This patch detects the defect at mount time, logs a warning such as: > > XFS: correcting sb_features alignment problem > > in dmesg and corrects the problem so that everything is OK. it also > blacklists the bad field in the superblock so it does not get used for > something else later on. > > SGI-PV: 977636 > SGI-Modid: xfs-linux-melb:xfs-kern:30539a > > Signed-off-by: David Chinner > Signed-off-by: Christoph Hellwig > Signed-off-by: Eric Sandeen > Signed-off-by: Lachlan McIlroy > > commit 6211870992502efdccf9cd6bae155c83277835fa > Author: Eric Sandeen > Date: Thu Mar 6 13:44:28 2008 +1100 > > [XFS] remove shouting-indirection macros from xfs_sb.h > > Remove macro-to-small-function indirection from xfs_sb.h, and remove some > which are completely unused. > > SGI-PV: 976035 > SGI-Modid: xfs-linux-melb:xfs-kern:30528a > > Signed-off-by: Eric Sandeen > Signed-off-by: Donald Douwsma > Signed-off-by: Lachlan McIlroy > > From owner-xfs@oss.sgi.com Fri Apr 11 07:39:21 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 07:39:30 -0700 (PDT) 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 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 m3BEdJW2004969 for ; Fri, 11 Apr 2008 07:39:21 -0700 X-ASG-Debug-ID: 1207924797-37cf024e0000-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 7E301780A24 for ; Fri, 11 Apr 2008 07:39:57 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id fY7J9GR2IGg2vuvo for ; Fri, 11 Apr 2008 07:39:57 -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 B57771803081D; Fri, 11 Apr 2008 09:39:25 -0500 (CDT) Message-ID: <47FF781D.2020006@sandeen.net> Date: Fri, 11 Apr 2008 09:39:25 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Timothy Shimmin CC: xfs-oss X-ASG-Orig-Subj: [PATCH V2] remove CONFIG_XFS_SECURITY Subject: [PATCH V2] remove CONFIG_XFS_SECURITY References: <47819E47.4030906@sandeen.net> <47BB7774.5080401@sandeen.net> <47F985BA.7060100@sgi.com> In-Reply-To: <47F985BA.7060100@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1207924798 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.1, rules version 3.1.47488 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15389 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Timothy Shimmin wrote: > Eric Sandeen wrote: > >> Eric Sandeen wrote: >> >>> Is there any point to this option? Sure, it disables the ability >>> to set security attributes at runtime, but it doesn't slim down >>> any code. >>> >>> Any reason to not remove it, and always allow security attributes >>> to be set? >>> >> Ack? Nak? Comments? >> >> > Fine by me. I'm not sure of the point either. > However, don't need to modify the attr_secure_capable function, > might as well delete it and > just use fs_noerr for the capable hook field. > Oh, I see, it's normally cast... ok. ----------------------------- There is no point to the CONFIG_XFS_SECURITY option; it disables the ability to set security attributes at runtime, but it does not actually slim down or remove any code for runtime. Just remove it and always allow security attributes to be set. Signed-off-by: Eric Sandeen --- Index: linux-2.6-xfs/fs/xfs/Kconfig =================================================================== --- linux-2.6-xfs.orig/fs/xfs/Kconfig +++ linux-2.6-xfs/fs/xfs/Kconfig @@ -48,18 +48,6 @@ config XFS_DMAPI If unsure, say N. -config XFS_SECURITY - bool "XFS Security Label support" - depends on XFS_FS - help - Security labels support alternative access control models - implemented by security modules like SELinux. This option - enables an extended attribute namespace for inode security - labels in the XFS filesystem. - - If you are not using a security module that requires using - extended attributes for inode security labels, say N. - config XFS_POSIX_ACL bool "XFS POSIX ACL support" depends on XFS_FS Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.h +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h @@ -28,13 +28,7 @@ # define set_posix_acl_flag(sb) do { } while (0) #endif -#ifdef CONFIG_XFS_SECURITY -# define XFS_SECURITY_STRING "security attributes, " -# define ENOSECURITY 0 -#else -# define XFS_SECURITY_STRING -# define ENOSECURITY EOPNOTSUPP -#endif +#define XFS_SECURITY_STRING "security attributes, " #ifdef CONFIG_XFS_RT # define XFS_REALTIME_STRING "realtime, " Index: linux-2.6-xfs/fs/xfs/xfs_attr.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.c +++ linux-2.6-xfs/fs/xfs/xfs_attr.c @@ -2647,14 +2647,6 @@ attr_trusted_capable( } STATIC int -attr_secure_capable( - bhv_vnode_t *vp, - cred_t *cred) -{ - return -ENOSECURITY; -} - -STATIC int attr_system_set( bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) { @@ -2724,7 +2716,7 @@ struct attrnames attr_secure = { .attr_get = attr_generic_get, .attr_set = attr_generic_set, .attr_remove = attr_generic_remove, - .attr_capable = attr_secure_capable, + .attr_capable = (attrcapable_t)fs_noerr, }; struct attrnames attr_user = { From owner-xfs@oss.sgi.com Fri Apr 11 07:43:53 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 07:44:00 -0700 (PDT) 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.6 required=5.0 tests=AWL,BAYES_00,SUBJ_FRIEND 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 m3BEhodT006154 for ; Fri, 11 Apr 2008 07:43:53 -0700 X-ASG-Debug-ID: 1207925069-37d402770000-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 931DD780A97 for ; Fri, 11 Apr 2008 07:44:29 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id MiIt9WV9WroG7HrW for ; Fri, 11 Apr 2008 07:44:29 -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 CEF5A180307FA for ; Fri, 11 Apr 2008 09:44:28 -0500 (CDT) Message-ID: <47FF794C.4020801@sandeen.net> Date: Fri, 11 Apr 2008 09:44:28 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: [PATCH] remove INT_GET and friends Subject: [PATCH] remove INT_GET and friends Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1207925069 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.1, rules version 3.1.47488 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15390 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Thanks to hch's endian work, INT_GET etc are no longer used, and may as well be removed. INT_SET is still used in the acl code, though. Signed-off-by: Eric Sandeen --- xfs_arch.h | 68 --------------------------------- 1 files changed, 68 deletions(-) Index: linux-2.6-xfs/fs/xfs/xfs_arch.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_arch.h +++ linux-2.6-xfs/fs/xfs/xfs_arch.h @@ -92,16 +92,6 @@ ((__u8*)(pointer))[1] = (((value) ) & 0xff); \ } -/* define generic INT_ macros */ - -#define INT_GET(reference,arch) \ - (((arch) == ARCH_NOCONVERT) \ - ? \ - (reference) \ - : \ - INT_SWAP((reference),(reference)) \ - ) - /* does not return a value */ #define INT_SET(reference,arch,valueref) \ (__builtin_constant_p(valueref) ? \ @@ -112,64 +102,6 @@ ) \ ) -/* does not return a value */ -#define INT_MOD_EXPR(reference,arch,code) \ - (((arch) == ARCH_NOCONVERT) \ - ? \ - (void)((reference) code) \ - : \ - (void)( \ - (reference) = INT_GET((reference),arch) , \ - ((reference) code), \ - INT_SET(reference, arch, reference) \ - ) \ - ) - -/* does not return a value */ -#define INT_MOD(reference,arch,delta) \ - (void)( \ - INT_MOD_EXPR(reference,arch,+=(delta)) \ - ) - -/* - * INT_COPY - copy a value between two locations with the - * _same architecture_ but _potentially different sizes_ - * - * if the types of the two parameters are equal or they are - * in native architecture, a simple copy is done - * - * otherwise, architecture conversions are done - * - */ - -/* does not return a value */ -#define INT_COPY(dst,src,arch) \ - ( \ - ((sizeof(dst) == sizeof(src)) || ((arch) == ARCH_NOCONVERT)) \ - ? \ - (void)((dst) = (src)) \ - : \ - INT_SET(dst, arch, INT_GET(src, arch)) \ - ) - -/* - * INT_XLATE - copy a value in either direction between two locations - * with different architectures - * - * dir < 0 - copy from memory to buffer (native to arch) - * dir > 0 - copy from buffer to memory (arch to native) - */ - -/* does not return a value */ -#define INT_XLATE(buf,mem,dir,arch) {\ - ASSERT(dir); \ - if (dir>0) { \ - (mem)=INT_GET(buf, arch); \ - } else { \ - INT_SET(buf, arch, mem); \ - } \ -} - static inline void be16_add(__be16 *a, __s16 b) { *a = cpu_to_be16(be16_to_cpu(*a) + b); From owner-xfs@oss.sgi.com Fri Apr 11 08:11:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 08:12:16 -0700 (PDT) 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.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 m3BFBtem010543 for ; Fri, 11 Apr 2008 08:11:57 -0700 X-ASG-Debug-ID: 1207926103-509803430000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from slurp.thebarn.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 123349B54F8 for ; Fri, 11 Apr 2008 08:01:44 -0700 (PDT) Received: from slurp.thebarn.com (cattelan-host202.dsl.visi.com [208.42.117.202]) by cuda.sgi.com with ESMTP id MPKy22OT2KoYBYwq for ; Fri, 11 Apr 2008 08:01:44 -0700 (PDT) Received: from funky.thebarn.com (slurp.thebarn.com [208.42.117.201]) (authenticated bits=0) by slurp.thebarn.com (8.14.0/8.13.8) with ESMTP id m3BF1Rea071128; Fri, 11 Apr 2008 10:01:29 -0500 (CDT) (envelope-from cattelan@thebarn.com) Message-ID: <47FF7D47.40007@thebarn.com> Date: Fri, 11 Apr 2008 10:01:27 -0500 From: Russell Cattelan User-Agent: Thunderbird 2.0.0.6 (Macintosh/20070728) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com, petr.pisar@atlas.cz X-ASG-Orig-Subj: Re: Portability of libattr Subject: Re: Portability of libattr References: <20080409184103.GD20142@album.bayer.ipv6ia.org> <20080409185445.GA30834@infradead.org> In-Reply-To: <20080409185445.GA30834@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: cattelan-host202.dsl.visi.com[208.42.117.202] X-Barracuda-Start-Time: 1207926105 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.1, rules version 3.1.47489 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15391 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: cattelan@thebarn.com Precedence: bulk X-list: xfs Christoph Hellwig wrote: > On Wed, Apr 09, 2008 at 08:41:08PM +0200, petr.pisar@atlas.cz wrote: > >> Hello, >> >> I'm adding support for extended atributes into few applications. >> Unfortunatetally API for EA manipulation is not standartized and every >> operating system uses its own solution. I thought libattr from attr package >> could help me. However attr seems running on Linux (and maybe IRIX) only. >> >> Therefore I've decided to use libc functions from every system directly. I've >> succesfully ported my code to Linux, IRIX and Darwin (Max OS X). Their AE >> syscalls are very similar. However FreeBSD API is more different. Because I'm >> extending more applications I need to share the code. >> >> So, my qustions are: should I write my own library or should I extend libattr. >> As I can understand libattr code it's designed to port IRIX application on >> Linux. Am I right? Or are you going support more OS's in libattr? Or exists >> here some similar library providing unified interface fro more systems? >> > > Note: I'm not the maintainer of libattr, so I'm not the one to decide. > > I think adding more systems is an excellent idea as it's a bit of a > porting layer already. Russell will have to add FreeBSD support anyway > once he ports xfsdump to FreeBSD :) > > nod. I have not looked closely at the FreeBSD EA stuff so I don't know how different things are. I can't imagine they are that far off? I thought the libattr code does compile on IRIX. There was an effort at one point to only have one usespace code base that worked on both linux and irix. I would be really cool if we got FreeBSD support into libattr. -Russell From owner-xfs@oss.sgi.com Fri Apr 11 09:05:35 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 09:05:41 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,SUBJ_FRIEND 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 m3BG5Yw6020252 for ; Fri, 11 Apr 2008 09:05:34 -0700 X-ASG-Debug-ID: 1207929971-3035003a0000-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 E2BC3780D24 for ; Fri, 11 Apr 2008 09:06:11 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id VoY8xBjFPYggVqYf for ; Fri, 11 Apr 2008 09:06:11 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JkLkz-0001j3-86; Fri, 11 Apr 2008 16:05:41 +0000 Date: Fri, 11 Apr 2008 12:05:41 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs-oss X-ASG-Orig-Subj: Re: [PATCH] remove INT_GET and friends Subject: Re: [PATCH] remove INT_GET and friends Message-ID: <20080411160541.GB26929@infradead.org> References: <47FF794C.4020801@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <47FF794C.4020801@sandeen.net> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207929972 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.1, rules version 3.1.47492 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15393 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Fri, Apr 11, 2008 at 09:44:28AM -0500, Eric Sandeen wrote: > Thanks to hch's endian work, INT_GET etc are no longer used, > and may as well be removed. INT_SET is still used in > the acl code, though. Looks good. From owner-xfs@oss.sgi.com Fri Apr 11 09:04:12 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 09:04:31 -0700 (PDT) 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 m3BG4Bx6020029 for ; Fri, 11 Apr 2008 09:04:12 -0700 X-ASG-Debug-ID: 1207929889-5ef000270000-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 000D1107FF42; Fri, 11 Apr 2008 09:04:49 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id Ks8OnmyusiA1NmYA; Fri, 11 Apr 2008 09:04:49 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JkLk9-0000Bj-02; Fri, 11 Apr 2008 16:04:49 +0000 Date: Fri, 11 Apr 2008 12:04:48 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: Timothy Shimmin , xfs-oss X-ASG-Orig-Subj: Re: [PATCH V2] remove CONFIG_XFS_SECURITY Subject: Re: [PATCH V2] remove CONFIG_XFS_SECURITY Message-ID: <20080411160448.GA26929@infradead.org> References: <47819E47.4030906@sandeen.net> <47BB7774.5080401@sandeen.net> <47F985BA.7060100@sgi.com> <47FF781D.2020006@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <47FF781D.2020006@sandeen.net> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1207929890 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.1, rules version 3.1.47493 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15392 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs > +#define XFS_SECURITY_STRING "security attributes, " This one should just be killed completely, as it's not an optional feature anymore. From owner-xfs@oss.sgi.com Fri Apr 11 09:13:23 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 09:13:32 -0700 (PDT) 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 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 m3BGDMdK021380 for ; Fri, 11 Apr 2008 09:13:23 -0700 X-ASG-Debug-ID: 1207930441-2f9900910000-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 0307D781813 for ; Fri, 11 Apr 2008 09:14:01 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id xNwOxXke3xNBJ0Dc for ; Fri, 11 Apr 2008 09:14: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 5A2E6180307FA; Fri, 11 Apr 2008 11:13:30 -0500 (CDT) Message-ID: <47FF8E2A.30900@sandeen.net> Date: Fri, 11 Apr 2008 11:13:30 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Christoph Hellwig CC: Timothy Shimmin , xfs-oss X-ASG-Orig-Subj: Re: [PATCH V2] remove CONFIG_XFS_SECURITY Subject: Re: [PATCH V2] remove CONFIG_XFS_SECURITY References: <47819E47.4030906@sandeen.net> <47BB7774.5080401@sandeen.net> <47F985BA.7060100@sgi.com> <47FF781D.2020006@sandeen.net> <20080411160448.GA26929@infradead.org> In-Reply-To: <20080411160448.GA26929@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1207930442 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.1, rules version 3.1.47492 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15394 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Christoph Hellwig wrote: >> +#define XFS_SECURITY_STRING "security attributes, " > > This one should just be killed completely, as it's not an optional > feature anymore. > My only concern is that if people are used to seeing it, they'll assume that somehow xfs now doesn't support it now, or was built without it, or ... *shrug* -Eric From owner-xfs@oss.sgi.com Fri Apr 11 09:40:19 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 09:40:38 -0700 (PDT) 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=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 m3BGeINV024259 for ; Fri, 11 Apr 2008 09:40:19 -0700 X-ASG-Debug-ID: 1207932055-5a1b00140000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp-out4.iol.cz (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E136B781CD1 for ; Fri, 11 Apr 2008 09:40:56 -0700 (PDT) Received: from smtp-out4.iol.cz (smtp-out4.iol.cz [194.228.2.92]) by cuda.sgi.com with ESMTP id SK959vpqVT8W25iv for ; Fri, 11 Apr 2008 09:40:56 -0700 (PDT) Received: from antivir6.iol.cz (unknown [192.168.30.215]) by smtp-out4.iol.cz (Postfix) with ESMTP id 754DDCE5228 for ; Fri, 11 Apr 2008 16:40:53 +0000 (UTC) Received: from localhost (antivir6.iol.cz [127.0.0.1]) by antivir6.iol.cz (Postfix) with ESMTP id 5708AAD0057 for ; Fri, 11 Apr 2008 18:40:53 +0200 (CEST) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Scanned: amavisd-new at iol.cz Received: from antivir6.iol.cz ([127.0.0.1]) by localhost (antivir6.iol.cz [127.0.0.1]) (amavisd-new, port 10224) with LMTP id v6lMO3Jl5+Au for ; Fri, 11 Apr 2008 18:40:53 +0200 (CEST) Received: from smtp-out4.iol.cz (mta-out4 [192.168.30.31]) by antivir6.iol.cz (Postfix) with ESMTP id 26495AD0058 for ; Fri, 11 Apr 2008 18:40:53 +0200 (CEST) Received: from gw.uhercice.ipv6ia.org (238.18.broadband9.iol.cz [90.176.18.238]) by smtp-out4.iol.cz (Postfix) with ESMTP id ED08F7042AD for ; Fri, 11 Apr 2008 18:40:52 +0200 (CEST) Received: from ou.uhercice.ipv6ia.org ([2002:5ab0:12ee:1:20c:f1ff:fe85:8b99] helo=ou) by gw.uhercice.ipv6ia.org with smtp (Exim 4.69) (envelope-from ) id 1JkMJ0-0000pR-H6 for xfs@oss.sgi.com; Fri, 11 Apr 2008 18:40:50 +0200 Received: by ou (sSMTP sendmail emulation); Fri, 11 Apr 2008 18:40:45 +0200 Date: Fri, 11 Apr 2008 18:40:45 +0200 From: petr.pisar@atlas.cz To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Portability of libattr Subject: Re: Portability of libattr Message-ID: <20080411164044.GA6928@ou.uhercice.ipv6ia.org> Mail-Followup-To: xfs@oss.sgi.com References: <20080409184103.GD20142@album.bayer.ipv6ia.org> <20080409185445.GA30834@infradead.org> <47FF7D47.40007@thebarn.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="gKMricLos+KVdGMg" Content-Disposition: inline In-Reply-To: <47FF7D47.40007@thebarn.com> User-Agent: Mutt/1.5.16 (2007-06-09) X-Barracuda-Connect: smtp-out4.iol.cz[194.228.2.92] X-Barracuda-Start-Time: 1207932056 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.47 X-Barracuda-Spam-Status: No, SCORE=-1.47 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47496 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.55 NO_REAL_NAME From: does not include a real name X-Virus-Status: Clean X-archive-position: 15395 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: petr.pisar@atlas.cz Precedence: bulk X-list: xfs --gKMricLos+KVdGMg Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Fri, Apr 11, 2008 at 10:01:27AM -0500, Russell Cattelan wrote: > I have not looked closely at the FreeBSD EA stuff so I don't know how > different things are. I can't imagine they are that far off? > Unfortunatelly, I have no FreeBSD machine available now, but as I found in its manual pages, they have splitted the names space and the rest of the EA name. The namespaces are enumerated. So you can't just call getxattr("user.mime_type', ...). Also they support reading EA from any arbitrarry offset like Darwin. (Linux reads from first byte always). FreeBSD API is little more rich. > I thought the libattr code does compile on IRIX. There was an effort at one > point to only have one usespace code base that worked on both linux and > irix. > Great. Could you tell me which of these two APIs are the standard interface? I'm a little confused about all the Linux code in libattr (like syscall numbers) because glibc-2.6.1 has already syscall wrappers. So If added support for Darwin of FreeBSD into libattr, which level should I implement? attr_get(3) or getxattr(2/3) which is still parto of libattr? In other words: Should I implement IRIX-styled API or the Linux-styled one? -- Petr --gKMricLos+KVdGMg Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.7 (GNU/Linux) iD8DBQFH/5SMuR4f4nEwzHIRAoL4AKCEVaR2diluKfyhSel2QWk5n7674wCfcDEO CM+reYTtlZ0tkNJ4YwX/c1o= =uxz3 -----END PGP SIGNATURE----- --gKMricLos+KVdGMg-- From owner-xfs@oss.sgi.com Fri Apr 11 13:21:45 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 13:22:02 -0700 (PDT) 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.7 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 m3BKLiuN019567 for ; Fri, 11 Apr 2008 13:21:45 -0700 X-ASG-Debug-ID: 1207945340-630901510000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from postoffice2.aconex.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 164D812914B9 for ; Fri, 11 Apr 2008 13:22:21 -0700 (PDT) Received: from postoffice2.aconex.com (prod.aconex.com [203.89.192.138]) by cuda.sgi.com with ESMTP id ukDKDc57msZlFGDn for ; Fri, 11 Apr 2008 13:22:21 -0700 (PDT) Received: from postoffice.aconex.com (localhost [127.0.0.1]) by postoffice2.aconex.com (Spam Firewall) with ESMTP id B2822538E81 for ; Sat, 12 Apr 2008 05:47:54 +1000 (EST) Received: from postoffice.aconex.com (postoffice.yarra.acx [192.168.3.1]) by postoffice2.aconex.com with ESMTP id CHCFR55sx6GWv1lw for ; Sat, 12 Apr 2008 05:47:54 +1000 (EST) Received: from mail.aconex.com (castle.yarra.acx [192.168.3.3]) by postoffice.aconex.com (Postfix) with ESMTP id A315692C2AB for ; Sat, 12 Apr 2008 05:47:54 +1000 (EST) Received: from 192.168.3.1 (proxying for 58.107.42.33) (SquirrelMail authenticated user nscott) by mail.aconex.com with HTTP; Sat, 12 Apr 2008 05:47:54 +1000 (EST) Message-ID: <59537.192.168.3.1.1207943274.squirrel@mail.aconex.com> In-Reply-To: <20080411164044.GA6928@ou.uhercice.ipv6ia.org> References: <20080409184103.GD20142@album.bayer.ipv6ia.org> <20080409185445.GA30834@infradead.org> <47FF7D47.40007@thebarn.com> <20080411164044.GA6928@ou.uhercice.ipv6ia.org> Date: Sat, 12 Apr 2008 05:47:54 +1000 (EST) X-ASG-Orig-Subj: Re: Portability of libattr Subject: Re: Portability of libattr From: nscott@aconex.com To: xfs@oss.sgi.com User-Agent: SquirrelMail/1.4.8-4.el4.centos MIME-Version: 1.0 Content-Type: text/plain;charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Priority: 3 (Normal) Importance: Normal X-Barracuda-Connect: prod.aconex.com[203.89.192.138] X-Barracuda-Start-Time: 1207945343 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.47 X-Barracuda-Spam-Status: No, SCORE=-1.47 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47511 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.55 NO_REAL_NAME From: does not include a real name X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15396 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: nscott@aconex.com Precedence: bulk X-list: xfs > On Fri, Apr 11, 2008 at 10:01:27AM -0500, Russell Cattelan wrote: >> I have not looked closely at the FreeBSD EA stuff so I don't know how >> different things are. I can't imagine they are that far off? >> > Unfortunatelly, I have no FreeBSD machine available now, but as I found in > its > manual pages, they have splitted the names space and the rest of the EA > name. > The namespaces are enumerated. So you can't just call This part (at least) is the same as the IRIX API (on IRIX the namespaces are also enumerated). > getxattr("user.mime_type', ...). Also they support reading EA from any > arbitrarry offset like Darwin. (Linux reads from first byte always). > FreeBSD > API is little more rich. Hmm, supporting that is a bit of an issue (do you need to?) - neither IRIX nor Linux allow offsets for attrs. >> I thought the libattr code does compile on IRIX. There was an effort at libattr is providing a mapping between Linux (and potential other APIs) and the IRIX libc API - so, there is no need for it to compile on IRIX. > Great. Could you tell me which of these two APIs are the standard > interface? libattr exports the IRIX interface. There are no standards here. > I'm a little confused about all the Linux code in libattr (like syscall > numbers) because glibc-2.6.1 has already syscall wrappers. So If added libattr predates the libc interfaces. > support > for Darwin of FreeBSD into libattr, which level should I implement? > attr_get(3) or getxattr(2/3) which is still parto of libattr? In other > words: > Should I implement IRIX-styled API or the Linux-styled one? I'd suggest IRIX style, since I expect that will be closer to other platforms, and was the original intent with libattr. I imagine the biggest problem will be the list operation, that is by far the most complex (and wierd, on IRIX). cheers. -- Nathan From owner-xfs@oss.sgi.com Fri Apr 11 19:41:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 19:41:22 -0700 (PDT) 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.0 required=5.0 tests=BAYES_50,HTML_MESSAGE 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 m3C2f27i027288 for ; Fri, 11 Apr 2008 19:41:04 -0700 X-ASG-Debug-ID: 1207968099-6afb010e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from wf-out-1314.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4DCF312926E1 for ; Fri, 11 Apr 2008 19:41:39 -0700 (PDT) Received: from wf-out-1314.google.com (wf-out-1314.google.com [209.85.200.173]) by cuda.sgi.com with ESMTP id 6cgrUhZugWGSN9p2 for ; Fri, 11 Apr 2008 19:41:39 -0700 (PDT) Received: by wf-out-1314.google.com with SMTP id 29so819242wff.32 for ; Fri, 11 Apr 2008 19:41:39 -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:mime-version:content-type; bh=pmDOl6iMg8y6FnAS3FiXaVYN3H+fI4jX2ThbihwWq5A=; b=Fd0eEH/sIXrV7XWnuu9SmqbLDx5QiMSkgyU8YIf9jiOHeWPnSoUi459fN/K5sxumob9WNLWCAh9ONnCpRhor3CJehLDAp3oGVXQMGZwO1TJiGKovXLsJi/5FVHN41X5VY8f7zR9Y/foYIdLHJs7wx/GLIAg5Z+NznXMqhUKwqyE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:mime-version:content-type; b=PQzFJ6T/GsnPSK1EvNxq/6FM+tdqGP7BPPcCupiRZ0sT80gyqvrheXj7xZqdOvMNbQGI75V9MuVVH7Ro/dF9X6+clRIVxIFe+jIaLUlnJyQA6dBYTLK9IsCv6qrhm85/RXq/6gyhzIMV+D46T7PSvmKic8NEocmgJ640BE5KZpo= Received: by 10.142.77.11 with SMTP id z11mr1015053wfa.98.1207967735891; Fri, 11 Apr 2008 19:35:35 -0700 (PDT) Received: by 10.142.210.1 with HTTP; Fri, 11 Apr 2008 19:35:35 -0700 (PDT) Message-ID: Date: Fri, 11 Apr 2008 19:35:35 -0700 From: "Robert Navarro" To: xfs@oss.sgi.com X-ASG-Orig-Subj: lost+found Delete Error Subject: lost+found Delete Error MIME-Version: 1.0 X-Barracuda-Connect: wf-out-1314.google.com[209.85.200.173] X-Barracuda-Start-Time: 1207968101 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.08 X-Barracuda-Spam-Status: No, SCORE=-1.08 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_10_20, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47537 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.94 HTML_10_20 BODY: Message is 10% to 20% HTML X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 3084 X-archive-position: 15397 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: crshman@gmail.com Precedence: bulk X-list: xfs Hello Everyone, I'm having an issue deleting some files from lost+found.... crshman@mcepc:/media/Data/lost+found$ ls -la total 352 drwxr-xr-x 4 crshman crshman 307200 2008-04-11 11:51 . drwxr-xr-x 11 crshman crshman 24576 2008-04-11 11:28 .. drwxr-xr-x 3 crshman root 24 2008-04-11 11:19 1082386363 drwxrwxrwx 3 crshman crshman 16 2008-04-11 11:51 1153339163 -rwxr-xrw- 1 33622760 50332648 845524441880619 2007-10-11 01:36 2453227806 -rwxr-xr-t 1 1512 251670529 9116 2007-08-06 15:01 2840594848 -rwxr-xr-x 1 1174438352 1431656169 504510914699959044 1970-07-24 00:15 2887819688 -rwxr-xr-x 1 2686042304 1349606297 504546338931787648 2004-01-14 06:53 2887819692 -rwxr-xr-x 1 3222348776 829785687 504617807677724801 1901-12-16 17:38 2887819700 -rwxr-xr-x 1 3222348752 936 504546338916775344 1901-12-17 02:52 2887819703 -rwxr-xr-x 1 3222397921 2425389928 504511155016456306 1901-12-16 22:06 2887819704 -rwxr-xr-x 1 3222340584 3930769858 504546339569310213 1918-12-21 14:38 2887819705 -rwxr-xr-x 1 117457640 2667662080 504582622414146942 1905-09-24 11:53 2887819707 -rwxr-xr-x 1 3222397921 888 504510914481005384 1987-07-28 23:36 2887819708 --w--wxrw- 1 1280770657 3287811048 7080 2007-10-08 05:12 3038302590 crshman@mcepc:/media/Data/lost+found$ rm -fr * rm: cannot remove directory `1082386363/56_Sim_Lane': Directory not empty rm: cannot remove directory `1153339163/hl2/materials/Decals': Directory not empty rm: cannot remove `2453227806': Operation not permitted crshman@mcepc:/media/Data/lost+found$ ls -la total 352 drwxr-xr-x 4 crshman crshman 307200 2008-04-11 11:51 . drwxr-xr-x 11 crshman crshman 24576 2008-04-11 11:28 .. drwxr-xr-x 3 crshman root 24 2008-04-11 11:19 1082386363 drwxrwxrwx 3 crshman crshman 16 2008-04-11 11:51 1153339163 -rwxr-xrw- 1 33622760 50332648 845524441880619 2007-10-11 01:36 2453227806 -rwxr-xr-t 1 1512 251670529 9116 2007-08-06 15:01 2840594848 -rwxr-xr-x 1 1174438352 1431656169 504510914699959044 1970-07-24 00:15 2887819688 -rwxr-xr-x 1 2686042304 1349606297 504546338931787648 2004-01-14 06:53 2887819692 -rwxr-xr-x 1 3222348776 829785687 504617807677724801 1901-12-16 17:38 2887819700 -rwxr-xr-x 1 3222348752 936 504546338916775344 1901-12-17 02:52 2887819703 -rwxr-xr-x 1 3222397921 2425389928 504511155016456306 1901-12-16 22:06 2887819704 -rwxr-xr-x 1 3222340584 3930769858 504546339569310213 1918-12-21 14:38 2887819705 -rwxr-xr-x 1 117457640 2667662080 504582622414146942 1905-09-24 11:53 2887819707 -rwxr-xr-x 1 3222397921 888 504510914481005384 1987-07-28 23:36 2887819708 --w--wxrw- 1 1280770657 3287811048 7080 2007-10-08 05:12 3038302590 crshman@mcepc:/media/Data/lost+found$ Any ideas? I've tried unmounting, and remounting the file system with no luck -- ~Robert Navarro [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Fri Apr 11 19:56:17 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 19:56:36 -0700 (PDT) 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 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 m3C2uE65028921 for ; Fri, 11 Apr 2008 19:56:17 -0700 X-ASG-Debug-ID: 1207969005-2b3d00b20000-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 5A32F2241A for ; Fri, 11 Apr 2008 19:56:45 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id PirEHZ6fQ68GH0IK for ; Fri, 11 Apr 2008 19:56:45 -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 5166618019ABE for ; Fri, 11 Apr 2008 21:56:13 -0500 (CDT) Message-ID: <480024CC.8040407@sandeen.net> Date: Fri, 11 Apr 2008 21:56:12 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: [PATCH] de-duplicate calls to xfs_attr_trace_enter Subject: [PATCH] de-duplicate calls to xfs_attr_trace_enter Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1207969006 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.1, rules version 3.1.47538 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15398 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Every call to xfs_attr_trace_enter() shares the exact same 16 args in the middle... just send in the context pointer and let the next level down split it into the ktrace. Compile tested only. Signed-off-by: Eric Sandeen --- xfs_attr.c | 106 +++++++++++++--------------------------------------------- xfs_attr_sf.h | 10 +---- 2 files changed, 28 insertions(+), 88 deletions(-) Index: linux-2.6-xfs/fs/xfs/xfs_attr.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.c +++ linux-2.6-xfs/fs/xfs/xfs_attr.c @@ -2286,23 +2286,7 @@ xfs_attr_rmtval_remove(xfs_da_args_t *ar void xfs_attr_trace_l_c(char *where, struct xfs_attr_list_context *context) { - xfs_attr_trace_enter(XFS_ATTR_KTRACE_L_C, where, - (__psunsigned_t)context->dp, - (__psunsigned_t)context->cursor->hashval, - (__psunsigned_t)context->cursor->blkno, - (__psunsigned_t)context->cursor->offset, - (__psunsigned_t)context->alist, - (__psunsigned_t)context->bufsize, - (__psunsigned_t)context->count, - (__psunsigned_t)context->firstu, - (__psunsigned_t) - ((context->count > 0) && - !(context->flags & (ATTR_KERNAMELS|ATTR_KERNOVAL))) - ? (ATTR_ENTRY(context->alist, - context->count-1)->a_valuelen) - : 0, - (__psunsigned_t)context->dupcnt, - (__psunsigned_t)context->flags, + xfs_attr_trace_enter(XFS_ATTR_KTRACE_L_C, where, context, (__psunsigned_t)NULL, (__psunsigned_t)NULL, (__psunsigned_t)NULL); @@ -2315,23 +2299,7 @@ void xfs_attr_trace_l_cn(char *where, struct xfs_attr_list_context *context, struct xfs_da_intnode *node) { - xfs_attr_trace_enter(XFS_ATTR_KTRACE_L_CN, where, - (__psunsigned_t)context->dp, - (__psunsigned_t)context->cursor->hashval, - (__psunsigned_t)context->cursor->blkno, - (__psunsigned_t)context->cursor->offset, - (__psunsigned_t)context->alist, - (__psunsigned_t)context->bufsize, - (__psunsigned_t)context->count, - (__psunsigned_t)context->firstu, - (__psunsigned_t) - ((context->count > 0) && - !(context->flags & (ATTR_KERNAMELS|ATTR_KERNOVAL))) - ? (ATTR_ENTRY(context->alist, - context->count-1)->a_valuelen) - : 0, - (__psunsigned_t)context->dupcnt, - (__psunsigned_t)context->flags, + xfs_attr_trace_enter(XFS_ATTR_KTRACE_L_CN, where, context, (__psunsigned_t)be16_to_cpu(node->hdr.count), (__psunsigned_t)be32_to_cpu(node->btree[0].hashval), (__psunsigned_t)be32_to_cpu(node->btree[ @@ -2345,23 +2313,7 @@ void xfs_attr_trace_l_cb(char *where, struct xfs_attr_list_context *context, struct xfs_da_node_entry *btree) { - xfs_attr_trace_enter(XFS_ATTR_KTRACE_L_CB, where, - (__psunsigned_t)context->dp, - (__psunsigned_t)context->cursor->hashval, - (__psunsigned_t)context->cursor->blkno, - (__psunsigned_t)context->cursor->offset, - (__psunsigned_t)context->alist, - (__psunsigned_t)context->bufsize, - (__psunsigned_t)context->count, - (__psunsigned_t)context->firstu, - (__psunsigned_t) - ((context->count > 0) && - !(context->flags & (ATTR_KERNAMELS|ATTR_KERNOVAL))) - ? (ATTR_ENTRY(context->alist, - context->count-1)->a_valuelen) - : 0, - (__psunsigned_t)context->dupcnt, - (__psunsigned_t)context->flags, + xfs_attr_trace_enter(XFS_ATTR_KTRACE_L_CB, where, context, (__psunsigned_t)be32_to_cpu(btree->hashval), (__psunsigned_t)be32_to_cpu(btree->before), (__psunsigned_t)NULL); @@ -2374,23 +2326,7 @@ void xfs_attr_trace_l_cl(char *where, struct xfs_attr_list_context *context, struct xfs_attr_leafblock *leaf) { - xfs_attr_trace_enter(XFS_ATTR_KTRACE_L_CL, where, - (__psunsigned_t)context->dp, - (__psunsigned_t)context->cursor->hashval, - (__psunsigned_t)context->cursor->blkno, - (__psunsigned_t)context->cursor->offset, - (__psunsigned_t)context->alist, - (__psunsigned_t)context->bufsize, - (__psunsigned_t)context->count, - (__psunsigned_t)context->firstu, - (__psunsigned_t) - ((context->count > 0) && - !(context->flags & (ATTR_KERNAMELS|ATTR_KERNOVAL))) - ? (ATTR_ENTRY(context->alist, - context->count-1)->a_valuelen) - : 0, - (__psunsigned_t)context->dupcnt, - (__psunsigned_t)context->flags, + xfs_attr_trace_enter(XFS_ATTR_KTRACE_L_CL, where, context, (__psunsigned_t)be16_to_cpu(leaf->hdr.count), (__psunsigned_t)be32_to_cpu(leaf->entries[0].hashval), (__psunsigned_t)be32_to_cpu(leaf->entries[ @@ -2403,22 +2339,30 @@ xfs_attr_trace_l_cl(char *where, struct */ void xfs_attr_trace_enter(int type, char *where, - __psunsigned_t a2, __psunsigned_t a3, - __psunsigned_t a4, __psunsigned_t a5, - __psunsigned_t a6, __psunsigned_t a7, - __psunsigned_t a8, __psunsigned_t a9, - __psunsigned_t a10, __psunsigned_t a11, - __psunsigned_t a12, __psunsigned_t a13, - __psunsigned_t a14, __psunsigned_t a15) + struct xfs_attr_list_context *context, + __psunsigned_t a13, __psunsigned_t a14, + __psunsigned_t a15) { ASSERT(xfs_attr_trace_buf); ktrace_enter(xfs_attr_trace_buf, (void *)((__psunsigned_t)type), - (void *)where, - (void *)a2, (void *)a3, (void *)a4, - (void *)a5, (void *)a6, (void *)a7, - (void *)a8, (void *)a9, (void *)a10, - (void *)a11, (void *)a12, (void *)a13, - (void *)a14, (void *)a15); + (void *)((__psunsigned_t)where), + (void *)((__psunsigned_t)context->dp), + (void *)((__psunsigned_t)context->cursor->hashval), + (void *)((__psunsigned_t)context->cursor->blkno), + (void *)((__psunsigned_t)context->cursor->offset), + (void *)((__psunsigned_t)context->alist), + (void *)((__psunsigned_t)context->bufsize), + (void *)((__psunsigned_t)context->count), + (void *)((__psunsigned_t)context->firstu), + (void *)((__psunsigned_t) + (((context->count > 0) && + !(context->flags & (ATTR_KERNAMELS|ATTR_KERNOVAL))) + ? (ATTR_ENTRY(context->alist, + context->count-1)->a_valuelen) + : 0)), + (void *)((__psunsigned_t)context->dupcnt), + (void *)((__psunsigned_t)context->flags), + (void *)a13, (void *)a14, (void *)a15); } #endif /* XFS_ATTR_TRACE */ Index: linux-2.6-xfs/fs/xfs/xfs_attr_sf.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_attr_sf.h +++ linux-2.6-xfs/fs/xfs/xfs_attr_sf.h @@ -97,13 +97,9 @@ void xfs_attr_trace_l_cb(char *where, st void xfs_attr_trace_l_cl(char *where, struct xfs_attr_list_context *context, struct xfs_attr_leafblock *leaf); void xfs_attr_trace_enter(int type, char *where, - __psunsigned_t a2, __psunsigned_t a3, - __psunsigned_t a4, __psunsigned_t a5, - __psunsigned_t a6, __psunsigned_t a7, - __psunsigned_t a8, __psunsigned_t a9, - __psunsigned_t a10, __psunsigned_t a11, - __psunsigned_t a12, __psunsigned_t a13, - __psunsigned_t a14, __psunsigned_t a15); + struct xfs_attr_list_context *context, + __psunsigned_t a13, __psunsigned_t a14, + __psunsigned_t a15); #else #define xfs_attr_trace_l_c(w,c) #define xfs_attr_trace_l_cn(w,c,n) From owner-xfs@oss.sgi.com Fri Apr 11 20:01:15 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 11 Apr 2008 20:01:22 -0700 (PDT) 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 (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 m3C31CEh029726 for ; Fri, 11 Apr 2008 20:01:14 -0700 X-ASG-Debug-ID: 1207969310-040300af0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from filer.fsl.cs.sunysb.edu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9608B9B8041 for ; Fri, 11 Apr 2008 20:01:51 -0700 (PDT) Received: from filer.fsl.cs.sunysb.edu (filer.fsl.cs.sunysb.edu [130.245.126.2]) by cuda.sgi.com with ESMTP id E9pDnRzpMztItnxa for ; Fri, 11 Apr 2008 20:01:51 -0700 (PDT) Received: from josefsipek.net (baal.fsl.cs.sunysb.edu [130.245.126.78]) by filer.fsl.cs.sunysb.edu (8.12.11.20060308/8.13.1) with ESMTP id m3C31m3h009891; Fri, 11 Apr 2008 23:01:48 -0400 Received: by josefsipek.net (Postfix, from userid 1000) id 19F031C00DD8; Fri, 11 Apr 2008 23:01:50 -0400 (EDT) Date: Fri, 11 Apr 2008 23:01:50 -0400 From: "Josef 'Jeff' Sipek" To: Eric Sandeen Cc: xfs-oss X-ASG-Orig-Subj: Re: [PATCH] de-duplicate calls to xfs_attr_trace_enter Subject: Re: [PATCH] de-duplicate calls to xfs_attr_trace_enter Message-ID: <20080412030150.GB5431@josefsipek.net> References: <480024CC.8040407@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <480024CC.8040407@sandeen.net> User-Agent: Mutt/1.5.16 (2007-06-11) X-Barracuda-Connect: filer.fsl.cs.sunysb.edu[130.245.126.2] X-Barracuda-Start-Time: 1207969311 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.1, rules version 3.1.47537 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15399 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jeffpc@josefsipek.net Precedence: bulk X-list: xfs On Fri, Apr 11, 2008 at 09:56:12PM -0500, Eric Sandeen wrote: > Every call to xfs_attr_trace_enter() shares the exact > same 16 args in the middle... just send in the context > pointer and let the next level down split it into the > ktrace. > > Compile tested only. Very nice. Josef 'Jeff' Sipek. -- I think there is a world market for maybe five computers. - Thomas Watson, chairman of IBM, 1943. From owner-xfs@oss.sgi.com Sat Apr 12 10:37:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 12 Apr 2008 10:37:48 -0700 (PDT) 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.2 required=5.0 tests=BAYES_40 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 m3CHbPRw027582 for ; Sat, 12 Apr 2008 10:37:26 -0700 X-ASG-Debug-ID: 1208021885-244400c60000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fmailhost01.isp.att.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4E41010940AC for ; Sat, 12 Apr 2008 10:38:05 -0700 (PDT) Received: from fmailhost01.isp.att.net (fmailhost02.isp.att.net [207.115.11.52]) by cuda.sgi.com with ESMTP id Mdkn26rbeSGdCHVb for ; Sat, 12 Apr 2008 10:38:05 -0700 (PDT) Received: from ffe80c38742a44a (adsl-074-246-157-002.sip.asm.bellsouth.net[74.246.157.2]) by isp.att.net (frfwmhc02) with SMTP id <20080412173435H020053ujve>; Sat, 12 Apr 2008 17:34:35 +0000 X-Originating-IP: [74.246.157.2] From: "Paul Amodio" To: X-ASG-Orig-Subj: RE: error Subject: RE: error Date: Sat, 12 Apr 2008 13:36:18 -0400 Message-ID: <003901c89cc3$bded4b20$9c01a8c0@FFE80C38742A44A> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Office Outlook 11 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198 Thread-Index: Acicw7QJl4q5iUJYQ6iRDlLKJXwyxA== X-Barracuda-Connect: fmailhost02.isp.att.net[207.115.11.52] X-Barracuda-Start-Time: 1208021885 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 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.1, rules version 3.1.47596 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15400 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: photo@paulamodio.com Precedence: bulk X-list: xfs From owner-xfs@oss.sgi.com Sun Apr 13 01:21:19 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 01:21:38 -0700 (PDT) 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_65 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 m3D8LHtX013354 for ; Sun, 13 Apr 2008 01:21:19 -0700 X-ASG-Debug-ID: 1208074915-2e0100370000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id DAD1812961A6 for ; Sun, 13 Apr 2008 01:21:55 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id DzXyrgi0usAIrygS for ; Sun, 13 Apr 2008 01:21:55 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3D8LnF3018053 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Sun, 13 Apr 2008 10:21:49 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3D8LnAq018051 for xfs@oss.sgi.com; Sun, 13 Apr 2008 10:21:49 +0200 Date: Sun, 13 Apr 2008 10:21:49 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] xfs_rename: pass resblks to xfs_dir_removename Subject: [PATCH] xfs_rename: pass resblks to xfs_dir_removename Message-ID: <20080413082149.GA17993@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1208074916 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.1, rules version 3.1.47654 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15401 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Symilar to rmdir and remove - avoids a potential transaction reservation overrun. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.c 2008-04-11 12:22:37.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.c 2008-04-11 12:23:08.000000000 +0200 @@ -2359,7 +2359,7 @@ xfs_remove( */ XFS_BMAP_INIT(&free_list, &first_block); error = xfs_dir_removename(tp, dp, name, ip->i_ino, - &first_block, &free_list, 0); + &first_block, &free_list, resblks); if (error) { ASSERT(error != ENOENT); REMOVE_DEBUG_TRACE(__LINE__); From owner-xfs@oss.sgi.com Sun Apr 13 01:25:52 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 01:25:59 -0700 (PDT) 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 (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 m3D8Pp4c013919 for ; Sun, 13 Apr 2008 01:25:51 -0700 X-ASG-Debug-ID: 1208075181-1e2501d00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C23834E26B for ; Sun, 13 Apr 2008 01:26:21 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id Vd0FZyJXnKVpTAOP for ; Sun, 13 Apr 2008 01:26:21 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3D8QEF3018210 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Sun, 13 Apr 2008 10:26:14 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3D8QE38018208 for xfs@oss.sgi.com; Sun, 13 Apr 2008 10:26:14 +0200 Date: Sun, 13 Apr 2008 10:26:14 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: kill usesless IHOLD calls in xfs_rename Subject: kill usesless IHOLD calls in xfs_rename Message-ID: <20080413082614.GB17993@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1208075190 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.1, rules version 3.1.47655 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15402 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Similar to to the previous patch for remove and rmdir only grab a reference to inodes when we join them to transaction to balance the decrement on transaction completion. Everything else it taken care of by the VFS. Note that the old case had leaks of inode count when src == target or src or target == one of the parent inodes, but these cases are fortunately already rejected by the VFS. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/xfs_rename.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_rename.c 2008-04-11 09:06:51.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_rename.c 2008-04-13 09:25:27.000000000 +0200 @@ -137,9 +137,7 @@ xfs_rename( int cancel_flags; int committed; xfs_inode_t *inodes[4]; - int target_ip_dropped = 0; /* dropped target_ip link? */ int spaceres; - int target_link_zero = 0; int num_inodes; xfs_itrace_entry(src_dp); @@ -174,10 +172,6 @@ xfs_rename( xfs_sort_for_rename(src_dp, target_dp, src_ip, target_ip, inodes, &num_inodes); - IHOLD(src_ip); - if (target_ip) - IHOLD(target_ip); - XFS_BMAP_INIT(&free_list, &first_block); tp = xfs_trans_alloc(mp, XFS_TRANS_RENAME); cancel_flags = XFS_TRANS_RELEASE_LOG_RES; @@ -191,7 +185,7 @@ xfs_rename( } if (error) { xfs_trans_cancel(tp, 0); - goto rele_return; + goto std_return; } /* @@ -199,7 +193,7 @@ xfs_rename( */ if ((error = XFS_QM_DQVOPRENAME(mp, inodes))) { xfs_trans_cancel(tp, cancel_flags); - goto rele_return; + goto std_return; } /* @@ -220,7 +214,7 @@ xfs_rename( error = XFS_ERROR(EXDEV); xfs_rename_unlock4(inodes, XFS_ILOCK_SHARED); xfs_trans_cancel(tp, cancel_flags); - goto rele_return; + goto std_return; } /* @@ -233,17 +227,17 @@ xfs_rename( */ IHOLD(src_dp); xfs_trans_ijoin(tp, src_dp, XFS_ILOCK_EXCL); + if (new_parent) { IHOLD(target_dp); xfs_trans_ijoin(tp, target_dp, XFS_ILOCK_EXCL); } - if ((src_ip != src_dp) && (src_ip != target_dp)) { - xfs_trans_ijoin(tp, src_ip, XFS_ILOCK_EXCL); - } - if ((target_ip != NULL) && - (target_ip != src_ip) && - (target_ip != src_dp) && - (target_ip != target_dp)) { + + IHOLD(src_ip); + xfs_trans_ijoin(tp, src_ip, XFS_ILOCK_EXCL); + + if (target_ip) { + IHOLD(target_ip); xfs_trans_ijoin(tp, target_ip, XFS_ILOCK_EXCL); } @@ -317,7 +311,6 @@ xfs_rename( error = xfs_droplink(tp, target_ip); if (error) goto abort_return; - target_ip_dropped = 1; if (src_is_directory) { /* @@ -327,10 +320,6 @@ xfs_rename( if (error) goto abort_return; } - - /* Do this test while we still hold the locks */ - target_link_zero = (target_ip)->i_d.di_nlink==0; - } /* target_ip != NULL */ /* @@ -397,15 +386,6 @@ xfs_rename( } /* - * If there was a target inode, take an extra reference on - * it here so that it doesn't go to xfs_inactive() from - * within the commit. - */ - if (target_ip != NULL) { - IHOLD(target_ip); - } - - /* * If this is a synchronous mount, make sure that the * rename transaction goes to disk before returning to * the user. @@ -414,30 +394,11 @@ xfs_rename( xfs_trans_set_sync(tp); } - /* - * Take refs. for vop_link_removed calls below. No need to worry - * about directory refs. because the caller holds them. - * - * Do holds before the xfs_bmap_finish since it might rele them down - * to zero. - */ - - if (target_ip_dropped) - IHOLD(target_ip); - IHOLD(src_ip); - error = xfs_bmap_finish(&tp, &free_list, &committed); if (error) { xfs_bmap_cancel(&free_list); xfs_trans_cancel(tp, (XFS_TRANS_RELEASE_LOG_RES | XFS_TRANS_ABORT)); - if (target_ip != NULL) { - IRELE(target_ip); - } - if (target_ip_dropped) { - IRELE(target_ip); - } - IRELE(src_ip); goto std_return; } @@ -446,15 +407,6 @@ xfs_rename( * the vnode references. */ error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES); - if (target_ip != NULL) - IRELE(target_ip); - /* - * Let interposed file systems know about removed links. - */ - if (target_ip_dropped) - IRELE(target_ip); - - IRELE(src_ip); /* Fall through to std_return with error = 0 or errno from * xfs_trans_commit */ @@ -476,11 +428,4 @@ std_return: xfs_bmap_cancel(&free_list); xfs_trans_cancel(tp, cancel_flags); goto std_return; - - rele_return: - IRELE(src_ip); - if (target_ip != NULL) { - IRELE(target_ip); - } - goto std_return; } From owner-xfs@oss.sgi.com Sun Apr 13 02:08:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 02:09:12 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_63, J_CHICKENPOX_64,J_CHICKENPOX_65,J_CHICKENPOX_66 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 m3D98lNO017730 for ; Sun, 13 Apr 2008 02:08:47 -0700 X-ASG-Debug-ID: 1208077761-3aee00a80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4230E12963E0 for ; Sun, 13 Apr 2008 02:09:21 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id xxGwuheWksHUJgAK for ; Sun, 13 Apr 2008 02:09:21 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3D99EF3019997 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Sun, 13 Apr 2008 11:09:14 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3D99EU4019993 for xfs@oss.sgi.com; Sun, 13 Apr 2008 11:09:14 +0200 Date: Sun, 13 Apr 2008 11:09:14 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] shrink mrlock_t Subject: [PATCH] shrink mrlock_t Message-ID: <20080413090914.GA19896@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1208077765 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.82 X-Barracuda-Spam-Status: No, SCORE=-1.82 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_MJ615 X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47658 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 BSF_SC0_MJ615 Custom Rule MJ615 X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15403 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs The writer field is not needed for non_DEBU builds so remove it. While we're at i also clean up the interface for is locked asserts to go through and xfs_iget.c helper with an interface like the xfs_ilock routines to isolated the XFS codebase from mrlock internals. That way we can kill mrlock_t entirely once rw_semaphores grow an islocked facility. Also remove unused flags to the ilock family of functions. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/mrlock.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/mrlock.h 2008-04-07 09:33:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/mrlock.h 2008-04-10 19:00:35.000000000 +0200 @@ -20,29 +20,24 @@ #include -enum { MR_NONE, MR_ACCESS, MR_UPDATE }; - typedef struct { struct rw_semaphore mr_lock; +#ifdef DEBUG int mr_writer; +#endif } mrlock_t; +#ifdef DEBUG #define mrinit(mrp, name) \ do { (mrp)->mr_writer = 0; init_rwsem(&(mrp)->mr_lock); } while (0) +#else +#define mrinit(mrp, name) \ + do { init_rwsem(&(mrp)->mr_lock); } while (0) +#endif + #define mrlock_init(mrp, t,n,s) mrinit(mrp, n) #define mrfree(mrp) do { } while (0) -static inline void mraccess(mrlock_t *mrp) -{ - down_read(&mrp->mr_lock); -} - -static inline void mrupdate(mrlock_t *mrp) -{ - down_write(&mrp->mr_lock); - mrp->mr_writer = 1; -} - static inline void mraccess_nested(mrlock_t *mrp, int subclass) { down_read_nested(&mrp->mr_lock, subclass); @@ -51,10 +46,11 @@ static inline void mraccess_nested(mrloc static inline void mrupdate_nested(mrlock_t *mrp, int subclass) { down_write_nested(&mrp->mr_lock, subclass); +#ifdef DEBUG mrp->mr_writer = 1; +#endif } - static inline int mrtryaccess(mrlock_t *mrp) { return down_read_trylock(&mrp->mr_lock); @@ -64,39 +60,31 @@ static inline int mrtryupdate(mrlock_t * { if (!down_write_trylock(&mrp->mr_lock)) return 0; +#ifdef DEBUG mrp->mr_writer = 1; +#endif return 1; } -static inline void mrunlock(mrlock_t *mrp) +static inline void mrunlock_excl(mrlock_t *mrp) { - if (mrp->mr_writer) { - mrp->mr_writer = 0; - up_write(&mrp->mr_lock); - } else { - up_read(&mrp->mr_lock); - } +#ifdef DEBUG + mrp->mr_writer = 0; +#endif + up_write(&mrp->mr_lock); } -static inline void mrdemote(mrlock_t *mrp) +static inline void mrunlock_shared(mrlock_t *mrp) { - mrp->mr_writer = 0; - downgrade_write(&mrp->mr_lock); + up_read(&mrp->mr_lock); } -#ifdef DEBUG -/* - * Debug-only routine, without some platform-specific asm code, we can - * now only answer requests regarding whether we hold the lock for write - * (reader state is outside our visibility, we only track writer state). - * Note: means !ismrlocked would give false positives, so don't do that. - */ -static inline int ismrlocked(mrlock_t *mrp, int type) +static inline void mrdemote(mrlock_t *mrp) { - if (mrp && type == MR_UPDATE) - return mrp->mr_writer; - return 1; -} +#ifdef DEBUG + mrp->mr_writer = 0; #endif + downgrade_write(&mrp->mr_lock); +} #endif /* __XFS_SUPPORT_MRLOCK_H__ */ Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_ksyms.c 2008-04-10 07:24:40.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c 2008-04-10 18:25:12.000000000 +0200 @@ -240,6 +240,9 @@ EXPORT_SYMBOL(xfs_igrow_finish); EXPORT_SYMBOL(xfs_ilock); EXPORT_SYMBOL(xfs_ilock_map_shared); EXPORT_SYMBOL(xfs_ilock_nowait); +#ifdef DEBUG +EXPORT_SYMBOL(xfs_isilocked); +#endif EXPORT_SYMBOL(xfs_internal_inum); EXPORT_SYMBOL(xfs_iput); EXPORT_SYMBOL(xfs_iput_new); Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_lrw.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_lrw.c 2008-04-10 07:24:40.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_lrw.c 2008-04-10 18:25:12.000000000 +0200 @@ -393,7 +393,7 @@ xfs_zero_last_block( int error = 0; xfs_bmbt_irec_t imap; - ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE) != 0); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); zero_offset = XFS_B_FSB_OFFSET(mp, isize); if (zero_offset == 0) { @@ -424,14 +424,14 @@ xfs_zero_last_block( * out sync. We need to drop the ilock while we do this so we * don't deadlock when the buffer cache calls back to us. */ - xfs_iunlock(ip, XFS_ILOCK_EXCL| XFS_EXTSIZE_RD); + xfs_iunlock(ip, XFS_ILOCK_EXCL); zero_len = mp->m_sb.sb_blocksize - zero_offset; if (isize + zero_len > offset) zero_len = offset - isize; error = xfs_iozero(ip, isize, zero_len); - xfs_ilock(ip, XFS_ILOCK_EXCL|XFS_EXTSIZE_RD); + xfs_ilock(ip, XFS_ILOCK_EXCL); ASSERT(error >= 0); return error; } @@ -464,8 +464,7 @@ xfs_zero_eof( int error = 0; xfs_bmbt_irec_t imap; - ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE)); - ASSERT(ismrlocked(&ip->i_iolock, MR_UPDATE)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_IOLOCK_EXCL)); ASSERT(offset > isize); /* @@ -474,8 +473,7 @@ xfs_zero_eof( */ error = xfs_zero_last_block(ip, offset, isize); if (error) { - ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE)); - ASSERT(ismrlocked(&ip->i_iolock, MR_UPDATE)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_IOLOCK_EXCL)); return error; } @@ -506,8 +504,7 @@ xfs_zero_eof( error = xfs_bmapi(NULL, ip, start_zero_fsb, zero_count_fsb, 0, NULL, 0, &imap, &nimaps, NULL, NULL); if (error) { - ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE)); - ASSERT(ismrlocked(&ip->i_iolock, MR_UPDATE)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_IOLOCK_EXCL)); return error; } ASSERT(nimaps > 0); @@ -531,7 +528,7 @@ xfs_zero_eof( * Drop the inode lock while we're doing the I/O. * We'll still have the iolock to protect us. */ - xfs_iunlock(ip, XFS_ILOCK_EXCL|XFS_EXTSIZE_RD); + xfs_iunlock(ip, XFS_ILOCK_EXCL); zero_off = XFS_FSB_TO_B(mp, start_zero_fsb); zero_len = XFS_FSB_TO_B(mp, imap.br_blockcount); @@ -547,13 +544,13 @@ xfs_zero_eof( start_zero_fsb = imap.br_startoff + imap.br_blockcount; ASSERT(start_zero_fsb <= (end_zero_fsb + 1)); - xfs_ilock(ip, XFS_ILOCK_EXCL|XFS_EXTSIZE_RD); + xfs_ilock(ip, XFS_ILOCK_EXCL); } return 0; out_lock: - xfs_ilock(ip, XFS_ILOCK_EXCL|XFS_EXTSIZE_RD); + xfs_ilock(ip, XFS_ILOCK_EXCL); ASSERT(error >= 0); return error; } Index: linux-2.6-xfs/fs/xfs/quota/xfs_dquot.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/quota/xfs_dquot.c 2008-04-10 07:24:40.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/quota/xfs_dquot.c 2008-04-10 18:25:12.000000000 +0200 @@ -933,7 +933,7 @@ xfs_qm_dqget( type == XFS_DQ_PROJ || type == XFS_DQ_GROUP); if (ip) { - ASSERT(XFS_ISLOCKED_INODE_EXCL(ip)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); if (type == XFS_DQ_USER) ASSERT(ip->i_udquot == NULL); else @@ -1088,7 +1088,7 @@ xfs_qm_dqget( xfs_qm_mplist_unlock(mp); XFS_DQ_HASH_UNLOCK(h); dqret: - ASSERT((ip == NULL) || XFS_ISLOCKED_INODE_EXCL(ip)); + ASSERT((ip == NULL) || xfs_isilocked(ip, XFS_ILOCK_EXCL)); xfs_dqtrace_entry(dqp, "DQGET DONE"); *O_dqpp = dqp; return (0); Index: linux-2.6-xfs/fs/xfs/quota/xfs_qm.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/quota/xfs_qm.c 2008-04-09 20:02:28.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/quota/xfs_qm.c 2008-04-10 18:25:12.000000000 +0200 @@ -670,7 +670,7 @@ xfs_qm_dqattach_one( xfs_dquot_t *dqp; int error; - ASSERT(XFS_ISLOCKED_INODE_EXCL(ip)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); error = 0; /* * See if we already have it in the inode itself. IO_idqpp is @@ -874,7 +874,7 @@ xfs_qm_dqattach( return 0; ASSERT((flags & XFS_QMOPT_ILOCKED) == 0 || - XFS_ISLOCKED_INODE_EXCL(ip)); + xfs_isilocked(ip, XFS_ILOCK_EXCL)); if (! (flags & XFS_QMOPT_ILOCKED)) xfs_ilock(ip, XFS_ILOCK_EXCL); @@ -888,7 +888,8 @@ xfs_qm_dqattach( goto done; nquotas++; } - ASSERT(XFS_ISLOCKED_INODE_EXCL(ip)); + + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); if (XFS_IS_OQUOTA_ON(mp)) { error = XFS_IS_GQUOTA_ON(mp) ? xfs_qm_dqattach_one(ip, ip->i_d.di_gid, XFS_DQ_GROUP, @@ -913,7 +914,7 @@ xfs_qm_dqattach( * This WON'T, in general, result in a thrash. */ if (nquotas == 2) { - ASSERT(XFS_ISLOCKED_INODE_EXCL(ip)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); ASSERT(ip->i_udquot); ASSERT(ip->i_gdquot); @@ -956,7 +957,7 @@ xfs_qm_dqattach( #ifdef QUOTADEBUG else - ASSERT(XFS_ISLOCKED_INODE_EXCL(ip)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); #endif return error; } @@ -1291,7 +1292,7 @@ xfs_qm_dqget_noattach( xfs_mount_t *mp; xfs_dquot_t *udqp, *gdqp; - ASSERT(XFS_ISLOCKED_INODE_EXCL(ip)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); mp = ip->i_mount; udqp = NULL; gdqp = NULL; @@ -1392,7 +1393,7 @@ xfs_qm_qino_alloc( * Keep an extra reference to this quota inode. This inode is * locked exclusively and joined to the transaction already. */ - ASSERT(XFS_ISLOCKED_INODE_EXCL(*ip)); + ASSERT(xfs_isilocked(*ip, XFS_ILOCK_EXCL)); VN_HOLD(XFS_ITOV((*ip))); /* @@ -2563,7 +2564,7 @@ xfs_qm_vop_chown( uint bfield = XFS_IS_REALTIME_INODE(ip) ? XFS_TRANS_DQ_RTBCOUNT : XFS_TRANS_DQ_BCOUNT; - ASSERT(XFS_ISLOCKED_INODE_EXCL(ip)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); ASSERT(XFS_IS_QUOTA_RUNNING(ip->i_mount)); /* old dquot */ @@ -2607,7 +2608,7 @@ xfs_qm_vop_chown_reserve( uint delblks, blkflags, prjflags = 0; xfs_dquot_t *unresudq, *unresgdq, *delblksudq, *delblksgdq; - ASSERT(XFS_ISLOCKED_INODE(ip)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)); mp = ip->i_mount; ASSERT(XFS_IS_QUOTA_RUNNING(mp)); @@ -2717,7 +2718,7 @@ xfs_qm_vop_dqattach_and_dqmod_newinode( if (!XFS_IS_QUOTA_ON(tp->t_mountp)) return; - ASSERT(XFS_ISLOCKED_INODE_EXCL(ip)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); ASSERT(XFS_IS_QUOTA_RUNNING(tp->t_mountp)); if (udqp) { Index: linux-2.6-xfs/fs/xfs/quota/xfs_quota_priv.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/quota/xfs_quota_priv.h 2008-04-07 09:33:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/quota/xfs_quota_priv.h 2008-04-10 18:25:12.000000000 +0200 @@ -27,11 +27,6 @@ /* Number of dquots that fit in to a dquot block */ #define XFS_QM_DQPERBLK(mp) ((mp)->m_quotainfo->qi_dqperchunk) -#define XFS_ISLOCKED_INODE(ip) (ismrlocked(&(ip)->i_lock, \ - MR_UPDATE | MR_ACCESS) != 0) -#define XFS_ISLOCKED_INODE_EXCL(ip) (ismrlocked(&(ip)->i_lock, \ - MR_UPDATE) != 0) - #define XFS_DQ_IS_ADDEDTO_TRX(t, d) ((d)->q_transp == (t)) #define XFS_QI_MPLRECLAIMS(mp) ((mp)->m_quotainfo->qi_dqreclaims) Index: linux-2.6-xfs/fs/xfs/quota/xfs_trans_dquot.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/quota/xfs_trans_dquot.c 2008-04-07 09:33:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/quota/xfs_trans_dquot.c 2008-04-10 18:25:12.000000000 +0200 @@ -834,7 +834,7 @@ xfs_trans_reserve_quota_nblks( ASSERT(ip->i_ino != mp->m_sb.sb_uquotino); ASSERT(ip->i_ino != mp->m_sb.sb_gquotino); - ASSERT(XFS_ISLOCKED_INODE_EXCL(ip)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); ASSERT(XFS_IS_QUOTA_RUNNING(ip->i_mount)); ASSERT((flags & ~(XFS_QMOPT_FORCE_RES | XFS_QMOPT_ENOSPC)) == XFS_TRANS_DQ_RES_RTBLKS || Index: linux-2.6-xfs/fs/xfs/xfs_bmap.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_bmap.c 2008-04-09 20:02:27.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_bmap.c 2008-04-10 18:25:12.000000000 +0200 @@ -4074,7 +4074,6 @@ xfs_bmap_add_attrfork( error2: xfs_bmap_cancel(&flist); error1: - ASSERT(ismrlocked(&ip->i_lock,MR_UPDATE)); xfs_iunlock(ip, XFS_ILOCK_EXCL); error0: xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_ABORT); Index: linux-2.6-xfs/fs/xfs/xfs_iget.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_iget.c 2008-04-07 09:33:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_iget.c 2008-04-10 19:16:53.000000000 +0200 @@ -593,8 +593,9 @@ xfs_iunlock_map_shared( * XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL */ void -xfs_ilock(xfs_inode_t *ip, - uint lock_flags) +xfs_ilock( + xfs_inode_t *ip, + uint lock_flags) { /* * You can't set both SHARED and EXCL for the same lock, @@ -607,16 +608,16 @@ xfs_ilock(xfs_inode_t *ip, (XFS_ILOCK_SHARED | XFS_ILOCK_EXCL)); ASSERT((lock_flags & ~(XFS_LOCK_MASK | XFS_LOCK_DEP_MASK)) == 0); - if (lock_flags & XFS_IOLOCK_EXCL) { + if (lock_flags & XFS_IOLOCK_EXCL) mrupdate_nested(&ip->i_iolock, XFS_IOLOCK_DEP(lock_flags)); - } else if (lock_flags & XFS_IOLOCK_SHARED) { + else if (lock_flags & XFS_IOLOCK_SHARED) mraccess_nested(&ip->i_iolock, XFS_IOLOCK_DEP(lock_flags)); - } - if (lock_flags & XFS_ILOCK_EXCL) { + + if (lock_flags & XFS_ILOCK_EXCL) mrupdate_nested(&ip->i_lock, XFS_ILOCK_DEP(lock_flags)); - } else if (lock_flags & XFS_ILOCK_SHARED) { + else if (lock_flags & XFS_ILOCK_SHARED) mraccess_nested(&ip->i_lock, XFS_ILOCK_DEP(lock_flags)); - } + xfs_ilock_trace(ip, 1, lock_flags, (inst_t *)__return_address); } @@ -631,15 +632,12 @@ xfs_ilock(xfs_inode_t *ip, * lock_flags -- this parameter indicates the inode's locks to be * to be locked. See the comment for xfs_ilock() for a list * of valid values. - * */ int -xfs_ilock_nowait(xfs_inode_t *ip, - uint lock_flags) +xfs_ilock_nowait( + xfs_inode_t *ip, + uint lock_flags) { - int iolocked; - int ilocked; - /* * You can't set both SHARED and EXCL for the same lock, * and only XFS_IOLOCK_SHARED, XFS_IOLOCK_EXCL, XFS_ILOCK_SHARED, @@ -651,37 +649,30 @@ xfs_ilock_nowait(xfs_inode_t *ip, (XFS_ILOCK_SHARED | XFS_ILOCK_EXCL)); ASSERT((lock_flags & ~(XFS_LOCK_MASK | XFS_LOCK_DEP_MASK)) == 0); - iolocked = 0; if (lock_flags & XFS_IOLOCK_EXCL) { - iolocked = mrtryupdate(&ip->i_iolock); - if (!iolocked) { - return 0; - } + if (!mrtryupdate(&ip->i_iolock)) + goto out; } else if (lock_flags & XFS_IOLOCK_SHARED) { - iolocked = mrtryaccess(&ip->i_iolock); - if (!iolocked) { - return 0; - } + if (!mrtryaccess(&ip->i_iolock)) + goto out; } if (lock_flags & XFS_ILOCK_EXCL) { - ilocked = mrtryupdate(&ip->i_lock); - if (!ilocked) { - if (iolocked) { - mrunlock(&ip->i_iolock); - } - return 0; - } + if (!mrtryupdate(&ip->i_lock)) + goto out_undo_iolock; } else if (lock_flags & XFS_ILOCK_SHARED) { - ilocked = mrtryaccess(&ip->i_lock); - if (!ilocked) { - if (iolocked) { - mrunlock(&ip->i_iolock); - } - return 0; - } + if (!mrtryaccess(&ip->i_lock)) + goto out_undo_iolock; } xfs_ilock_trace(ip, 2, lock_flags, (inst_t *)__return_address); return 1; + + out_undo_iolock: + if (lock_flags & XFS_IOLOCK_EXCL) + mrunlock_excl(&ip->i_iolock); + else if (lock_flags & XFS_IOLOCK_SHARED) + mrunlock_shared(&ip->i_iolock); + out: + return 0; } /* @@ -697,8 +688,9 @@ xfs_ilock_nowait(xfs_inode_t *ip, * */ void -xfs_iunlock(xfs_inode_t *ip, - uint lock_flags) +xfs_iunlock( + xfs_inode_t *ip, + uint lock_flags) { /* * You can't set both SHARED and EXCL for the same lock, @@ -713,31 +705,25 @@ xfs_iunlock(xfs_inode_t *ip, XFS_LOCK_DEP_MASK)) == 0); ASSERT(lock_flags != 0); - if (lock_flags & (XFS_IOLOCK_SHARED | XFS_IOLOCK_EXCL)) { - ASSERT(!(lock_flags & XFS_IOLOCK_SHARED) || - (ismrlocked(&ip->i_iolock, MR_ACCESS))); - ASSERT(!(lock_flags & XFS_IOLOCK_EXCL) || - (ismrlocked(&ip->i_iolock, MR_UPDATE))); - mrunlock(&ip->i_iolock); - } - - if (lock_flags & (XFS_ILOCK_SHARED | XFS_ILOCK_EXCL)) { - ASSERT(!(lock_flags & XFS_ILOCK_SHARED) || - (ismrlocked(&ip->i_lock, MR_ACCESS))); - ASSERT(!(lock_flags & XFS_ILOCK_EXCL) || - (ismrlocked(&ip->i_lock, MR_UPDATE))); - mrunlock(&ip->i_lock); + if (lock_flags & XFS_IOLOCK_EXCL) + mrunlock_excl(&ip->i_iolock); + else if (lock_flags & XFS_IOLOCK_SHARED) + mrunlock_shared(&ip->i_iolock); + + if (lock_flags & XFS_ILOCK_EXCL) + mrunlock_excl(&ip->i_lock); + else if (lock_flags & XFS_ILOCK_SHARED) + mrunlock_shared(&ip->i_lock); + if ((lock_flags & (XFS_ILOCK_SHARED | XFS_ILOCK_EXCL)) && + !(lock_flags & XFS_IUNLOCK_NONOTIFY) && ip->i_itemp) { /* * Let the AIL know that this item has been unlocked in case * it is in the AIL and anyone is waiting on it. Don't do * this if the caller has asked us not to. */ - if (!(lock_flags & XFS_IUNLOCK_NONOTIFY) && - ip->i_itemp != NULL) { - xfs_trans_unlocked_item(ip->i_mount, - (xfs_log_item_t*)(ip->i_itemp)); - } + xfs_trans_unlocked_item(ip->i_mount, + (xfs_log_item_t*)(ip->i_itemp)); } xfs_ilock_trace(ip, 3, lock_flags, (inst_t *)__return_address); } @@ -747,21 +733,47 @@ xfs_iunlock(xfs_inode_t *ip, * if it is being demoted. */ void -xfs_ilock_demote(xfs_inode_t *ip, - uint lock_flags) +xfs_ilock_demote( + xfs_inode_t *ip, + uint lock_flags) { ASSERT(lock_flags & (XFS_IOLOCK_EXCL|XFS_ILOCK_EXCL)); ASSERT((lock_flags & ~(XFS_IOLOCK_EXCL|XFS_ILOCK_EXCL)) == 0); - if (lock_flags & XFS_ILOCK_EXCL) { - ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE)); + if (lock_flags & XFS_ILOCK_EXCL) mrdemote(&ip->i_lock); - } - if (lock_flags & XFS_IOLOCK_EXCL) { - ASSERT(ismrlocked(&ip->i_iolock, MR_UPDATE)); + if (lock_flags & XFS_IOLOCK_EXCL) mrdemote(&ip->i_iolock); +} + +#ifdef DEBUG +/* + * Debug-only routine, without additional rw_semaphore APIs, we can + * now only answer requests regarding whether we hold the lock for write + * (reader state is outside our visibility, we only track writer state). + * + * Note: this means !xfs_isilocked would give false positives, so don't do that. + */ +int +xfs_isilocked( + xfs_inode_t *ip, + uint lock_flags) +{ + if ((lock_flags & (XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)) == + XFS_ILOCK_EXCL) { + if (!ip->i_lock.mr_writer) + return 0; + } + + if ((lock_flags & (XFS_IOLOCK_EXCL|XFS_IOLOCK_SHARED)) == + XFS_IOLOCK_EXCL) { + if (!ip->i_iolock.mr_writer) + return 0; } + + return 1; } +#endif /* * The following three routines simply manage the i_flock Index: linux-2.6-xfs/fs/xfs/xfs_inode.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_inode.c 2008-04-10 15:05:05.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_inode.c 2008-04-10 18:25:12.000000000 +0200 @@ -1291,7 +1291,7 @@ xfs_file_last_byte( xfs_fileoff_t size_last_block; int error; - ASSERT(ismrlocked(&(ip->i_iolock), MR_UPDATE | MR_ACCESS)); + ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL|XFS_IOLOCK_SHARED)); mp = ip->i_mount; /* @@ -1402,7 +1402,7 @@ xfs_itruncate_start( bhv_vnode_t *vp; int error = 0; - ASSERT(ismrlocked(&ip->i_iolock, MR_UPDATE) != 0); + ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL)); ASSERT((new_size == 0) || (new_size <= ip->i_size)); ASSERT((flags == XFS_ITRUNC_DEFINITE) || (flags == XFS_ITRUNC_MAYBE)); @@ -1528,8 +1528,7 @@ xfs_itruncate_finish( xfs_bmap_free_t free_list; int error; - ASSERT(ismrlocked(&ip->i_iolock, MR_UPDATE) != 0); - ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE) != 0); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_IOLOCK_EXCL)); ASSERT((new_size == 0) || (new_size <= ip->i_size)); ASSERT(*tp != NULL); ASSERT((*tp)->t_flags & XFS_TRANS_PERM_LOG_RES); @@ -1780,8 +1779,7 @@ xfs_igrow_start( xfs_fsize_t new_size, cred_t *credp) { - ASSERT(ismrlocked(&(ip->i_lock), MR_UPDATE) != 0); - ASSERT(ismrlocked(&(ip->i_iolock), MR_UPDATE) != 0); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_IOLOCK_EXCL)); ASSERT(new_size > ip->i_size); /* @@ -1809,8 +1807,7 @@ xfs_igrow_finish( xfs_fsize_t new_size, int change_flag) { - ASSERT(ismrlocked(&(ip->i_lock), MR_UPDATE) != 0); - ASSERT(ismrlocked(&(ip->i_iolock), MR_UPDATE) != 0); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_IOLOCK_EXCL)); ASSERT(ip->i_transp == tp); ASSERT(new_size > ip->i_size); @@ -2287,7 +2284,7 @@ xfs_ifree( xfs_dinode_t *dip; xfs_buf_t *ibp; - ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); ASSERT(ip->i_transp == tp); ASSERT(ip->i_d.di_nlink == 0); ASSERT(ip->i_d.di_nextents == 0); @@ -2746,7 +2743,7 @@ void xfs_ipin( xfs_inode_t *ip) { - ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); atomic_inc(&ip->i_pincount); } @@ -2779,7 +2776,7 @@ __xfs_iunpin_wait( { xfs_inode_log_item_t *iip = ip->i_itemp; - ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE | MR_ACCESS)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)); if (atomic_read(&ip->i_pincount) == 0) return; @@ -2829,7 +2826,7 @@ xfs_iextents_copy( xfs_fsblock_t start_block; ifp = XFS_IFORK_PTR(ip, whichfork); - ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE|MR_ACCESS)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)); ASSERT(ifp->if_bytes > 0); nrecs = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t); @@ -3132,7 +3129,7 @@ xfs_iflush( XFS_STATS_INC(xs_iflush_count); - ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE|MR_ACCESS)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)); ASSERT(issemalocked(&(ip->i_flock))); ASSERT(ip->i_d.di_format != XFS_DINODE_FMT_BTREE || ip->i_d.di_nextents > ip->i_df.if_ext_max); @@ -3297,7 +3294,7 @@ xfs_iflush_int( int first; #endif - ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE|MR_ACCESS)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)); ASSERT(issemalocked(&(ip->i_flock))); ASSERT(ip->i_d.di_format != XFS_DINODE_FMT_BTREE || ip->i_d.di_nextents > ip->i_df.if_ext_max); Index: linux-2.6-xfs/fs/xfs/xfs_inode.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_inode.h 2008-04-07 09:33:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_inode.h 2008-04-10 18:25:12.000000000 +0200 @@ -386,20 +386,9 @@ xfs_iflags_test_and_clear(xfs_inode_t *i #define XFS_ILOCK_EXCL (1<<2) #define XFS_ILOCK_SHARED (1<<3) #define XFS_IUNLOCK_NONOTIFY (1<<4) -/* #define XFS_IOLOCK_NESTED (1<<5) */ -#define XFS_EXTENT_TOKEN_RD (1<<6) -#define XFS_SIZE_TOKEN_RD (1<<7) -#define XFS_EXTSIZE_RD (XFS_EXTENT_TOKEN_RD|XFS_SIZE_TOKEN_RD) -#define XFS_WILLLEND (1<<8) /* Always acquire tokens for lending */ -#define XFS_EXTENT_TOKEN_WR (XFS_EXTENT_TOKEN_RD | XFS_WILLLEND) -#define XFS_SIZE_TOKEN_WR (XFS_SIZE_TOKEN_RD | XFS_WILLLEND) -#define XFS_EXTSIZE_WR (XFS_EXTSIZE_RD | XFS_WILLLEND) -/* TODO:XFS_SIZE_TOKEN_WANT (1<<9) */ #define XFS_LOCK_MASK (XFS_IOLOCK_EXCL | XFS_IOLOCK_SHARED \ - | XFS_ILOCK_EXCL | XFS_ILOCK_SHARED \ - | XFS_EXTENT_TOKEN_RD | XFS_SIZE_TOKEN_RD \ - | XFS_WILLLEND) + | XFS_ILOCK_EXCL | XFS_ILOCK_SHARED) /* * Flags for lockdep annotations. @@ -483,6 +472,7 @@ void xfs_ilock(xfs_inode_t *, uint); int xfs_ilock_nowait(xfs_inode_t *, uint); void xfs_iunlock(xfs_inode_t *, uint); void xfs_ilock_demote(xfs_inode_t *, uint); +int xfs_isilocked(xfs_inode_t *, uint); void xfs_iflock(xfs_inode_t *); int xfs_iflock_nowait(xfs_inode_t *); uint xfs_ilock_map_shared(xfs_inode_t *); Index: linux-2.6-xfs/fs/xfs/xfs_inode_item.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_inode_item.c 2008-04-10 07:24:39.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_inode_item.c 2008-04-10 18:25:12.000000000 +0200 @@ -547,7 +547,7 @@ STATIC void xfs_inode_item_pin( xfs_inode_log_item_t *iip) { - ASSERT(ismrlocked(&(iip->ili_inode->i_lock), MR_UPDATE)); + ASSERT(xfs_isilocked(iip->ili_inode, XFS_ILOCK_EXCL)); xfs_ipin(iip->ili_inode); } @@ -664,13 +664,13 @@ xfs_inode_item_unlock( ASSERT(iip != NULL); ASSERT(iip->ili_inode->i_itemp != NULL); - ASSERT(ismrlocked(&(iip->ili_inode->i_lock), MR_UPDATE)); + ASSERT(xfs_isilocked(iip->ili_inode, XFS_ILOCK_EXCL)); ASSERT((!(iip->ili_inode->i_itemp->ili_flags & XFS_ILI_IOLOCKED_EXCL)) || - ismrlocked(&(iip->ili_inode->i_iolock), MR_UPDATE)); + xfs_isilocked(iip->ili_inode, XFS_IOLOCK_EXCL)); ASSERT((!(iip->ili_inode->i_itemp->ili_flags & XFS_ILI_IOLOCKED_SHARED)) || - ismrlocked(&(iip->ili_inode->i_iolock), MR_ACCESS)); + xfs_isilocked(iip->ili_inode, XFS_IOLOCK_SHARED)); /* * Clear the transaction pointer in the inode. */ @@ -769,7 +769,7 @@ xfs_inode_item_pushbuf( ip = iip->ili_inode; - ASSERT(ismrlocked(&(ip->i_lock), MR_ACCESS)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_SHARED)); /* * The ili_pushbuf_flag keeps others from @@ -857,7 +857,7 @@ xfs_inode_item_push( ip = iip->ili_inode; - ASSERT(ismrlocked(&(ip->i_lock), MR_ACCESS)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_SHARED)); ASSERT(issemalocked(&(ip->i_flock))); /* * Since we were able to lock the inode's flush lock and Index: linux-2.6-xfs/fs/xfs/xfs_iomap.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_iomap.c 2008-04-09 20:02:27.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_iomap.c 2008-04-10 18:25:12.000000000 +0200 @@ -196,14 +196,14 @@ xfs_iomap( break; case BMAPI_WRITE: xfs_iomap_enter_trace(XFS_IOMAP_WRITE_ENTER, ip, offset, count); - lockmode = XFS_ILOCK_EXCL|XFS_EXTSIZE_WR; + lockmode = XFS_ILOCK_EXCL; if (flags & BMAPI_IGNSTATE) bmapi_flags |= XFS_BMAPI_IGSTATE|XFS_BMAPI_ENTIRE; xfs_ilock(ip, lockmode); break; case BMAPI_ALLOCATE: xfs_iomap_enter_trace(XFS_IOMAP_ALLOC_ENTER, ip, offset, count); - lockmode = XFS_ILOCK_SHARED|XFS_EXTSIZE_RD; + lockmode = XFS_ILOCK_SHARED; bmapi_flags = XFS_BMAPI_ENTIRE; /* Attempt non-blocking lock */ @@ -624,7 +624,7 @@ xfs_iomap_write_delay( int prealloc, fsynced = 0; int error; - ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE) != 0); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); /* * Make sure that the dquots are there. This doesn't hold Index: linux-2.6-xfs/fs/xfs/xfs_trans_inode.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_trans_inode.c 2008-04-07 09:33:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_trans_inode.c 2008-04-10 18:25:12.000000000 +0200 @@ -111,13 +111,13 @@ xfs_trans_iget( */ ASSERT(ip->i_itemp != NULL); ASSERT(lock_flags & XFS_ILOCK_EXCL); - ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); ASSERT((!(lock_flags & XFS_IOLOCK_EXCL)) || - ismrlocked(&ip->i_iolock, MR_UPDATE)); + xfs_isilocked(ip, XFS_IOLOCK_EXCL)); ASSERT((!(lock_flags & XFS_IOLOCK_EXCL)) || (ip->i_itemp->ili_flags & XFS_ILI_IOLOCKED_EXCL)); ASSERT((!(lock_flags & XFS_IOLOCK_SHARED)) || - ismrlocked(&ip->i_iolock, (MR_UPDATE | MR_ACCESS))); + xfs_isilocked(ip, XFS_IOLOCK_EXCL|XFS_IOLOCK_SHARED)); ASSERT((!(lock_flags & XFS_IOLOCK_SHARED)) || (ip->i_itemp->ili_flags & XFS_ILI_IOLOCKED_ANY)); @@ -185,7 +185,7 @@ xfs_trans_ijoin( xfs_inode_log_item_t *iip; ASSERT(ip->i_transp == NULL); - ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); ASSERT(lock_flags & XFS_ILOCK_EXCL); if (ip->i_itemp == NULL) xfs_inode_item_init(ip, ip->i_mount); @@ -232,7 +232,7 @@ xfs_trans_ihold( { ASSERT(ip->i_transp == tp); ASSERT(ip->i_itemp != NULL); - ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); ip->i_itemp->ili_flags |= XFS_ILI_HOLD; } @@ -257,7 +257,7 @@ xfs_trans_log_inode( ASSERT(ip->i_transp == tp); ASSERT(ip->i_itemp != NULL); - ASSERT(ismrlocked(&ip->i_lock, MR_UPDATE)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); lidp = xfs_trans_find_item(tp, (xfs_log_item_t*)(ip->i_itemp)); ASSERT(lidp != NULL); Index: linux-2.6-xfs/fs/xfs/xfs_utils.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_utils.c 2008-04-10 15:05:31.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_utils.c 2008-04-10 18:25:12.000000000 +0200 @@ -267,7 +267,7 @@ xfs_bump_ino_vers2( { xfs_mount_t *mp; - ASSERT(ismrlocked (&ip->i_lock, MR_UPDATE)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); ASSERT(ip->i_d.di_version == XFS_DINODE_VERSION_1); ip->i_d.di_version = XFS_DINODE_VERSION_2; Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.c 2008-04-10 15:05:33.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.c 2008-04-10 18:25:12.000000000 +0200 @@ -1443,7 +1443,7 @@ xfs_inactive_attrs( int error; xfs_mount_t *mp; - ASSERT(ismrlocked(&ip->i_iolock, MR_UPDATE)); + ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL)); tp = *tpp; mp = ip->i_mount; ASSERT(ip->i_d.di_forkoff != 0); @@ -1914,7 +1914,7 @@ xfs_create( * It is locked (and joined to the transaction). */ - ASSERT(ismrlocked (&ip->i_lock, MR_UPDATE)); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); /* * Now we join the directory inode to the transaction. We do not do it From owner-xfs@oss.sgi.com Sun Apr 13 02:10:24 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 02:10:37 -0700 (PDT) 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_82 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 m3D9ALSL017990 for ; Sun, 13 Apr 2008 02:10:23 -0700 X-ASG-Debug-ID: 1208077859-2a4a01a10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E720C1296432 for ; Sun, 13 Apr 2008 02:11:00 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id IiXTiy6GvwruQRF5 for ; Sun, 13 Apr 2008 02:11:00 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3D9ArF3020078 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Sun, 13 Apr 2008 11:10:54 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3D9AroF020076 for xfs@oss.sgi.com; Sun, 13 Apr 2008 11:10:53 +0200 Date: Sun, 13 Apr 2008 11:10:53 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] VN_IS* macros and related cruft Subject: [PATCH] VN_IS* macros and related cruft Message-ID: <20080413091053.GA20022@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1208077860 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.1, rules version 3.1.47658 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15404 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs We can just check i_mode / di_mode directly. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_vnode.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_vnode.h 2008-04-11 12:24:01.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_vnode.h 2008-04-11 12:31:14.000000000 +0200 @@ -25,12 +25,6 @@ struct attrlist_cursor_kern; typedef struct inode bhv_vnode_t; -#define VN_ISLNK(vp) S_ISLNK((vp)->i_mode) -#define VN_ISREG(vp) S_ISREG((vp)->i_mode) -#define VN_ISDIR(vp) S_ISDIR((vp)->i_mode) -#define VN_ISCHR(vp) S_ISCHR((vp)->i_mode) -#define VN_ISBLK(vp) S_ISBLK((vp)->i_mode) - /* * Vnode to Linux inode mapping. */ @@ -151,24 +145,6 @@ typedef struct bhv_vattr { XFS_AT_TYPE|XFS_AT_BLKSIZE|XFS_AT_NBLOCKS|XFS_AT_VCODE|\ XFS_AT_NEXTENTS|XFS_AT_ANEXTENTS|XFS_AT_GENCOUNT) -/* - * Modes. - */ -#define VSUID S_ISUID /* set user id on execution */ -#define VSGID S_ISGID /* set group id on execution */ -#define VSVTX S_ISVTX /* save swapped text even after use */ -#define VREAD S_IRUSR /* read, write, execute permissions */ -#define VWRITE S_IWUSR -#define VEXEC S_IXUSR - -#define MODEMASK S_IALLUGO /* mode bits plus permission bits */ - -/* - * Check whether mandatory file locking is enabled. - */ -#define MANDLOCK(vp, mode) \ - (VN_ISREG(vp) && ((mode) & (VSGID|(VEXEC>>3))) == VSGID) - extern void vn_init(void); extern int vn_revalidate(bhv_vnode_t *); Index: linux-2.6-xfs/fs/xfs/xfs_acl.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_acl.c 2008-04-11 12:28:34.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_acl.c 2008-04-11 12:29:05.000000000 +0200 @@ -72,7 +72,7 @@ xfs_acl_vhasacl_default( { int error; - if (!VN_ISDIR(vp)) + if (!S_ISDIR(vp->i_mode)) return 0; xfs_acl_get_attr(vp, NULL, _ACL_TYPE_DEFAULT, ATTR_KERNOVAL, &error); return (error == 0); @@ -379,7 +379,7 @@ xfs_acl_allow_set( if (vp->i_flags & (S_IMMUTABLE|S_APPEND)) return EPERM; - if (kind == _ACL_TYPE_DEFAULT && !VN_ISDIR(vp)) + if (kind == _ACL_TYPE_DEFAULT && !S_ISDIR(vp->i_mode)) return ENOTDIR; if (vp->i_sb->s_flags & MS_RDONLY) return EROFS; @@ -720,7 +720,7 @@ xfs_acl_inherit( * If the new file is a directory, its default ACL is a copy of * the containing directory's default ACL. */ - if (VN_ISDIR(vp)) + if (S_ISDIR(vp->i_mode)) xfs_acl_set_attr(vp, pdaclp, _ACL_TYPE_DEFAULT, &error); if (!error && !basicperms) xfs_acl_set_attr(vp, cacl, _ACL_TYPE_ACCESS, &error); Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.c 2008-04-11 12:25:27.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.c 2008-04-11 12:37:36.000000000 +0200 @@ -211,7 +211,6 @@ xfs_setattr( int flags, cred_t *credp) { - bhv_vnode_t *vp = XFS_ITOV(ip); xfs_mount_t *mp = ip->i_mount; xfs_trans_t *tp; int mask; @@ -222,7 +221,6 @@ xfs_setattr( gid_t gid=0, igid=0; int timeflags = 0; xfs_prid_t projid=0, iprojid=0; - int mandlock_before, mandlock_after; struct xfs_dquot *udqp, *gdqp, *olddquot1, *olddquot2; int file_owner; int need_iolock = 1; @@ -383,7 +381,7 @@ xfs_setattr( m |= S_ISGID; #if 0 /* Linux allows this, Irix doesn't. */ - if ((vap->va_mode & S_ISVTX) && !VN_ISDIR(vp)) + if ((vap->va_mode & S_ISVTX) && !S_ISDIR(ip->i_d.di_mode)) m |= S_ISVTX; #endif if (m && !capable(CAP_FSETID)) @@ -461,10 +459,10 @@ xfs_setattr( goto error_return; } - if (VN_ISDIR(vp)) { + if (S_ISDIR(ip->i_d.di_mode)) { code = XFS_ERROR(EISDIR); goto error_return; - } else if (!VN_ISREG(vp)) { + } else if (!S_ISREG(ip->i_d.di_mode)) { code = XFS_ERROR(EINVAL); goto error_return; } @@ -626,9 +624,6 @@ xfs_setattr( xfs_trans_ihold(tp, ip); } - /* determine whether mandatory locking mode changes */ - mandlock_before = MANDLOCK(vp, ip->i_d.di_mode); - /* * Truncate file. Must have write permission and not be a directory. */ @@ -858,13 +853,6 @@ xfs_setattr( code = xfs_trans_commit(tp, commit_flags); } - /* - * If the (regular) file's mandatory locking mode changed, then - * notify the vnode. We do this under the inode lock to prevent - * racing calls to vop_vnode_change. - */ - mandlock_after = MANDLOCK(vp, ip->i_d.di_mode); - xfs_iunlock(ip, lock_flags); /* @@ -1491,7 +1479,7 @@ xfs_release( xfs_mount_t *mp = ip->i_mount; int error; - if (!VN_ISREG(vp) || (ip->i_d.di_mode == 0)) + if (!S_ISREG(ip->i_d.di_mode) || (ip->i_d.di_mode == 0)) return 0; /* If this is a read-only mount, don't do this (would generate I/O) */ From owner-xfs@oss.sgi.com Sun Apr 13 02:12:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 02:12:23 -0700 (PDT) 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 m3D9CDQw018552 for ; Sun, 13 Apr 2008 02:12:14 -0700 X-ASG-Debug-ID: 1208077971-3ad900ba0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A30B71296470 for ; Sun, 13 Apr 2008 02:12:51 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id RKfE0q1Bg1p64Bz6 for ; Sun, 13 Apr 2008 02:12:51 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3D9CjF3020166 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Sun, 13 Apr 2008 11:12:45 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3D9CjPK020164 for xfs@oss.sgi.com; Sun, 13 Apr 2008 11:12:45 +0200 Date: Sun, 13 Apr 2008 11:12:45 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] kill xfs_getattr Subject: [PATCH] kill xfs_getattr Message-ID: <20080413091245.GB20022@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1208077972 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.1, rules version 3.1.47658 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15405 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs It's currently used by the ACL code to read di_mode/di_uid, but these are simple 32bit scalar values we can just read directly without locking. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/xfs_acl.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_acl.c 2008-04-11 12:39:30.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_acl.c 2008-04-11 12:48:48.000000000 +0200 @@ -238,15 +238,8 @@ xfs_acl_vget( error = EINVAL; goto out; } - if (kind == _ACL_TYPE_ACCESS) { - bhv_vattr_t va; - - va.va_mask = XFS_AT_MODE; - error = xfs_getattr(xfs_vtoi(vp), &va, 0); - if (error) - goto out; - xfs_acl_sync_mode(va.va_mode, xfs_acl); - } + if (kind == _ACL_TYPE_ACCESS) + xfs_acl_sync_mode(xfs_vtoi(vp)->i_d.di_mode, xfs_acl); error = -posix_acl_xfs_to_xattr(xfs_acl, ext_acl, size); } out: @@ -373,23 +366,15 @@ xfs_acl_allow_set( bhv_vnode_t *vp, int kind) { - xfs_inode_t *ip = xfs_vtoi(vp); - bhv_vattr_t va; - int error; - if (vp->i_flags & (S_IMMUTABLE|S_APPEND)) return EPERM; if (kind == _ACL_TYPE_DEFAULT && !S_ISDIR(vp->i_mode)) return ENOTDIR; if (vp->i_sb->s_flags & MS_RDONLY) return EROFS; - va.va_mask = XFS_AT_UID; - error = xfs_getattr(ip, &va, 0); - if (error) - return error; - if (va.va_uid != current->fsuid && !capable(CAP_FOWNER)) + if (xfs_vtoi(vp)->i_d.di_uid != current->fsuid && !capable(CAP_FOWNER)) return EPERM; - return error; + return 0; } /* @@ -644,7 +629,6 @@ xfs_acl_vtoacl( xfs_acl_t *access_acl, xfs_acl_t *default_acl) { - bhv_vattr_t va; int error = 0; if (access_acl) { @@ -653,16 +637,10 @@ xfs_acl_vtoacl( * be obtained for some reason, invalidate the access ACL. */ xfs_acl_get_attr(vp, access_acl, _ACL_TYPE_ACCESS, 0, &error); - if (!error) { - /* Got the ACL, need the mode... */ - va.va_mask = XFS_AT_MODE; - error = xfs_getattr(xfs_vtoi(vp), &va, 0); - } - if (error) access_acl->acl_cnt = XFS_ACL_NOT_PRESENT; else /* We have a good ACL and the file mode, synchronize. */ - xfs_acl_sync_mode(va.va_mode, access_acl); + xfs_acl_sync_mode(xfs_vtoi(vp)->i_d.di_mode, access_acl); } if (default_acl) { @@ -745,7 +723,7 @@ xfs_acl_setmode( bhv_vattr_t va; xfs_acl_entry_t *ap; xfs_acl_entry_t *gap = NULL; - int i, error, nomask = 1; + int i, nomask = 1; *basicperms = 1; @@ -757,11 +735,7 @@ xfs_acl_setmode( * mode. The m:: bits take precedence over the g:: bits. */ va.va_mask = XFS_AT_MODE; - error = xfs_getattr(xfs_vtoi(vp), &va, 0); - if (error) - return error; - - va.va_mask = XFS_AT_MODE; + va.va_mode = xfs_vtoi(vp)->i_d.di_mode; va.va_mode &= ~(S_IRWXU|S_IRWXG|S_IRWXO); ap = acl->acl_entry; for (i = 0; i < acl->acl_cnt; ++i) { Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.c 2008-04-11 12:39:30.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.c 2008-04-11 12:47:06.000000000 +0200 @@ -76,132 +76,6 @@ xfs_open( } /* - * xfs_getattr - */ -int -xfs_getattr( - xfs_inode_t *ip, - bhv_vattr_t *vap, - int flags) -{ - bhv_vnode_t *vp = XFS_ITOV(ip); - xfs_mount_t *mp = ip->i_mount; - - xfs_itrace_entry(ip); - - if (XFS_FORCED_SHUTDOWN(mp)) - return XFS_ERROR(EIO); - - if (!(flags & ATTR_LAZY)) - xfs_ilock(ip, XFS_ILOCK_SHARED); - - vap->va_size = XFS_ISIZE(ip); - if (vap->va_mask == XFS_AT_SIZE) - goto all_done; - - vap->va_nblocks = - XFS_FSB_TO_BB(mp, ip->i_d.di_nblocks + ip->i_delayed_blks); - vap->va_nodeid = ip->i_ino; -#if XFS_BIG_INUMS - vap->va_nodeid += mp->m_inoadd; -#endif - vap->va_nlink = ip->i_d.di_nlink; - - /* - * Quick exit for non-stat callers - */ - if ((vap->va_mask & - ~(XFS_AT_SIZE|XFS_AT_FSID|XFS_AT_NODEID| - XFS_AT_NLINK|XFS_AT_BLKSIZE)) == 0) - goto all_done; - - /* - * Copy from in-core inode. - */ - vap->va_mode = ip->i_d.di_mode; - vap->va_uid = ip->i_d.di_uid; - vap->va_gid = ip->i_d.di_gid; - vap->va_projid = ip->i_d.di_projid; - - /* - * Check vnode type block/char vs. everything else. - */ - switch (ip->i_d.di_mode & S_IFMT) { - case S_IFBLK: - case S_IFCHR: - vap->va_rdev = ip->i_df.if_u2.if_rdev; - vap->va_blocksize = BLKDEV_IOSIZE; - break; - default: - vap->va_rdev = 0; - - if (!(XFS_IS_REALTIME_INODE(ip))) { - vap->va_blocksize = xfs_preferred_iosize(mp); - } else { - - /* - * If the file blocks are being allocated from a - * realtime partition, then return the inode's - * realtime extent size or the realtime volume's - * extent size. - */ - vap->va_blocksize = - xfs_get_extsz_hint(ip) << mp->m_sb.sb_blocklog; - } - break; - } - - vn_atime_to_timespec(vp, &vap->va_atime); - vap->va_mtime.tv_sec = ip->i_d.di_mtime.t_sec; - vap->va_mtime.tv_nsec = ip->i_d.di_mtime.t_nsec; - vap->va_ctime.tv_sec = ip->i_d.di_ctime.t_sec; - vap->va_ctime.tv_nsec = ip->i_d.di_ctime.t_nsec; - - /* - * Exit for stat callers. See if any of the rest of the fields - * to be filled in are needed. - */ - if ((vap->va_mask & - (XFS_AT_XFLAGS|XFS_AT_EXTSIZE|XFS_AT_NEXTENTS|XFS_AT_ANEXTENTS| - XFS_AT_GENCOUNT|XFS_AT_VCODE)) == 0) - goto all_done; - - /* - * Convert di_flags to xflags. - */ - vap->va_xflags = xfs_ip2xflags(ip); - - /* - * Exit for inode revalidate. See if any of the rest of - * the fields to be filled in are needed. - */ - if ((vap->va_mask & - (XFS_AT_EXTSIZE|XFS_AT_NEXTENTS|XFS_AT_ANEXTENTS| - XFS_AT_GENCOUNT|XFS_AT_VCODE)) == 0) - goto all_done; - - vap->va_extsize = ip->i_d.di_extsize << mp->m_sb.sb_blocklog; - vap->va_nextents = - (ip->i_df.if_flags & XFS_IFEXTENTS) ? - ip->i_df.if_bytes / sizeof(xfs_bmbt_rec_t) : - ip->i_d.di_nextents; - if (ip->i_afp) - vap->va_anextents = - (ip->i_afp->if_flags & XFS_IFEXTENTS) ? - ip->i_afp->if_bytes / sizeof(xfs_bmbt_rec_t) : - ip->i_d.di_anextents; - else - vap->va_anextents = 0; - vap->va_gen = ip->i_d.di_gen; - - all_done: - if (!(flags & ATTR_LAZY)) - xfs_iunlock(ip, XFS_ILOCK_SHARED); - return 0; -} - - -/* * xfs_setattr */ int Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.h 2008-04-11 12:47:07.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.h 2008-04-11 12:47:11.000000000 +0200 @@ -15,7 +15,6 @@ struct xfs_iomap; int xfs_open(struct xfs_inode *ip); -int xfs_getattr(struct xfs_inode *ip, struct bhv_vattr *vap, int flags); int xfs_setattr(struct xfs_inode *ip, struct bhv_vattr *vap, int flags, struct cred *credp); int xfs_readlink(struct xfs_inode *ip, char *link); From owner-xfs@oss.sgi.com Sun Apr 13 18:26:29 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 18:26:49 -0700 (PDT) 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.0 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 m3E1QNu2025262 for ; Sun, 13 Apr 2008 18:26:27 -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 LAA29671; Mon, 14 Apr 2008 11:26:59 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 4C06858C4C15; Mon, 14 Apr 2008 11:26:59 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 907752 - Bump attr to version 2.4.42 Message-Id: <20080414012659.4C06858C4C15@chook.melbourne.sgi.com> Date: Mon, 14 Apr 2008 11:26:59 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15406 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Date: Mon Apr 14 11:26:22 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/xfs-cmds Inspected by: none The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:30853a attr/VERSION - 1.72 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/attr/VERSION.diff?r1=text&tr1=1.72&r2=text&tr2=1.71&f=h attr/doc/CHANGES - 1.88 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/attr/doc/CHANGES.diff?r1=text&tr1=1.88&r2=text&tr2=1.87&f=h - Bump to version 2.4.42 From owner-xfs@oss.sgi.com Sun Apr 13 18:35:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 18:35:11 -0700 (PDT) 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.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_47, J_CHICKENPOX_63 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 m3E1Z1ak026391 for ; Sun, 13 Apr 2008 18:35:03 -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 LAA29909; Mon, 14 Apr 2008 11:35:36 +1000 Message-ID: <4802B4E8.3070807@sgi.com> Date: Mon, 14 Apr 2008 11:35:36 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: David Chinner , "bnaujok@sgi.com via BugWorks" CC: xfs-dev , xfs-oss , asg-qa Subject: Re: REVIEW XFSQA test out xfs_attr_shortform_bytesfit attr2/attr1 fix References: <47FC79FC.5020803@sgi.com> <20080410053601.GK108924158@sgi.com> In-Reply-To: <20080410053601.GK108924158@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15407 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Hi Dave and Barry, David Chinner wrote: > On Wed, Apr 09, 2008 at 06:10:36PM +1000, Timothy Shimmin wrote: >> Hi there, >> >> A test to test out Eric's fix for xfs_attr_shortform_bytesfit >> bug when going from attr2 to attr1. >> >> With TOT kernel, without patch, one can see the corrupted inline >> dirents. With patch, all is well. >> >> The 186.out _should_ be output'ing ATTR2 for the db version >> command but I'm awaiting Barry's xfsprogs checkin to fix that one - >> and then I will regenerate it. > > Really? I'm seeing it fail with ATTR2 in the xfs_db output... > That's what I used to see until I updated to TOT kernel. That's weird. And I don't know why ATTR and ATTR2 is coming out either. I assume it is all about the recent version 2 changes, and what was done in userspace and in the kernel. Barry, can you enlighten us here? Do we have latest changes for xfs_db and mkfs now? That's why I was waiting to ensure I had the latest user changes; it feels like xfs_db is getting things wrong as the mkfs and kernel behaviour seems to be behaving like I expected. --Tim > dgc@budgie:~/xfstests$ sudo ./check 186 > FSTYP -- xfs (debug) > PLATFORM -- Linux/ia64 budgie 2.6.25-rc3-dgc-xfs > MKFS_OPTIONS -- -f -bsize=4096 /dev/sdb6 > MOUNT_OPTIONS -- /dev/sdb6 /mnt/scratch > > 186 - output mismatch (see 186.out.bad) > 13a14 >> ATTR2 > 98a100 >> ATTR2 > Failures: 186 > Failed 1 of 1 tests > dgc@budgie:~/xfstests$ > > So the first is supposed to be there, but the second shows: > > .... > ================================= > ATTR > ATTR2 > core.forkoff = 47 > .... > > Are both supposed to be present? > > Cheers, > > Dave. From owner-xfs@oss.sgi.com Sun Apr 13 18:42:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 18:42:26 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_47, J_CHICKENPOX_63 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 m3E1g46h027294 for ; Sun, 13 Apr 2008 18:42:07 -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 LAA00053; Mon, 14 Apr 2008 11:42:39 +1000 To: "Timothy Shimmin" , "David Chinner" Subject: Re: REVIEW XFSQA test out xfs_attr_shortform_bytesfit attr2/attr1 fix From: "Barry Naujok" Organization: SGI Cc: xfs-dev , xfs-oss , asg-qa Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <47FC79FC.5020803@sgi.com> <20080410053601.GK108924158@sgi.com> <4802B4E8.3070807@sgi.com> Date: Mon, 14 Apr 2008 11:46:30 +1000 Message-ID: In-Reply-To: <4802B4E8.3070807@sgi.com> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m3E1g86h027299 X-archive-position: 15408 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Mon, 14 Apr 2008 11:35:36 +1000, Timothy Shimmin wrote: > Hi Dave and Barry, > > David Chinner wrote: >> On Wed, Apr 09, 2008 at 06:10:36PM +1000, Timothy Shimmin wrote: >>> Hi there, >>> >>> A test to test out Eric's fix for xfs_attr_shortform_bytesfit >>> bug when going from attr2 to attr1. >>> >>> With TOT kernel, without patch, one can see the corrupted inline >>> dirents. With patch, all is well. >>> >>> The 186.out _should_ be output'ing ATTR2 for the db version >>> command but I'm awaiting Barry's xfsprogs checkin to fix that one - >>> and then I will regenerate it. >> Really? I'm seeing it fail with ATTR2 in the xfs_db output... >> > That's what I used to see until I updated to TOT kernel. > That's weird. > And I don't know why ATTR and ATTR2 is coming out either. > I assume it is all about the recent version 2 changes, > and what was done in userspace and in the kernel. > Barry, can you enlighten us here? > Do we have latest changes for xfs_db and mkfs now? > That's why I was waiting to ensure I had the latest user changes; > it feels like xfs_db is getting things wrong as the > mkfs and kernel behaviour seems to be behaving like I expected. I'll now checkin the latest sb_bad_features2 patches for user-space. With Dave's kernel changes, should be quite compatible now. > --Tim > >> dgc@budgie:~/xfstests$ sudo ./check 186 >> FSTYP -- xfs (debug) >> PLATFORM -- Linux/ia64 budgie 2.6.25-rc3-dgc-xfs >> MKFS_OPTIONS -- -f -bsize=4096 /dev/sdb6 >> MOUNT_OPTIONS -- /dev/sdb6 /mnt/scratch >> 186 - output mismatch (see 186.out.bad) >> 13a14 >>> ATTR2 >> 98a100 >>> ATTR2 >> Failures: 186 >> Failed 1 of 1 tests >> dgc@budgie:~/xfstests$ >> So the first is supposed to be there, but the second shows: >> .... >> ================================= >> ATTR >> ATTR2 >> core.forkoff = 47 >> .... >> Are both supposed to be present? >> Cheers, >> Dave. > From owner-xfs@oss.sgi.com Sun Apr 13 18:50:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 18:50:24 -0700 (PDT) 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.0 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 m3E1oD4x028252 for ; Sun, 13 Apr 2008 18:50: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 LAA00321; Mon, 14 Apr 2008 11:50:47 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id BA5C958C4C15; Mon, 14 Apr 2008 11:50:47 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 977637 - Duplicate sb_features2 into following 4 bytes in superblock due to bug Message-Id: <20080414015047.BA5C958C4C15@chook.melbourne.sgi.com> Date: Mon, 14 Apr 2008 11:50:47 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15409 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Date: Mon Apr 14 11:50:24 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/xfs-cmds Inspected by: sandeen@sandeen.net The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:30855a xfsprogs/db/sb.c - 1.23 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/db/sb.c.diff?r1=text&tr1=1.23&r2=text&tr2=1.22&f=h - Update xfs_db for extra superblock field xfsprogs/db/check.c - 1.34 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/db/check.c.diff?r1=text&tr1=1.34&r2=text&tr2=1.33&f=h - Detect features2 in wrong location in superblock xfsprogs/mkfs/xfs_mkfs.c - 1.88 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/mkfs/xfs_mkfs.c.diff?r1=text&tr1=1.88&r2=text&tr2=1.87&f=h - Make sure features2 is the same in bad and good locations when creating a filesystem xfsprogs/include/xfs_sb.h - 1.20 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/include/xfs_sb.h.diff?r1=text&tr1=1.20&r2=text&tr2=1.19&f=h - Add sb_bad_features2 to superblock structure xfsprogs/repair/phase1.c - 1.12 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/phase1.c.diff?r1=text&tr1=1.12&r2=text&tr2=1.11&f=h - Detect and fix features2 in wrong location xfsprogs/libxfs/xfs_mount.c - 1.26 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/libxfs/xfs_mount.c.diff?r1=text&tr1=1.26&r2=text&tr2=1.25&f=h - Add sb_bad_features2 to superblock structure From owner-xfs@oss.sgi.com Sun Apr 13 19:28:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 19:28:50 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_50,PLING_QUERY 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 m3E2SUVo031851 for ; Sun, 13 Apr 2008 19:28:30 -0700 X-ASG-Debug-ID: 1208140148-339f000b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from msa105lp.auone-net.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6E9EA54C2E for ; Sun, 13 Apr 2008 19:29:08 -0700 (PDT) Received: from msa105lp.auone-net.jp (msa105lp.auone-net.jp [222.3.140.168]) by cuda.sgi.com with ESMTP id KgoZtcrFtIaf3KWr for ; Sun, 13 Apr 2008 19:29:08 -0700 (PDT) Received: by msa105lp.auone-net.jp (au one net msa) id 4E26342C037; Mon, 14 Apr 2008 11:29:07 +0900 (JST) Date: Mon, 14 Apr 2008 11:29:07 +0900 (JST) From: au one net X-ASG-Orig-Subj: =?ISO-2022-JP?B?GyRCJWEhPCVrQXc/LiUoJWkhPERMQ04bKEI=?= Subject: =?ISO-2022-JP?B?GyRCJWEhPCVrQXc/LiUoJWkhPERMQ04bKEI=?= To: xfs@oss.sgi.com Auto-Submitted: auto-replied MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary="82F8B42C031.1208140147/msa105lp.auone-net.jp" Message-Id: <20080414022907.4E26342C037@msa105lp.auone-net.jp> X-Barracuda-Connect: msa105lp.auone-net.jp[222.3.140.168] X-Barracuda-Start-Time: 1208140149 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5156 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= X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47726 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15410 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: no-reply@app.auone-net.jp Precedence: bulk X-list: xfs This is a MIME-encapsulated message. --82F8B42C031.1208140147/msa105lp.auone-net.jp Content-Description: Notification Content-Type: text/plain; charset=ISO-2022-JP $BAw?.@h$N%a!<%k%"%I%l%9$,!"8=:_MxMQ$G$-$J$$>uBV$K$J$C$F$$$^$9!#(B $B"(K\%a!<%k$O(Bau one net$B$N%a!<%k%7%9%F%`$h$jG[?.$7$F$*$j$^$9!#(B $B$3$N%a!<%k$K$OD>@\JV?.$$$?$@$1$^$;$s!#(B $B!J!!0J2: host mfgw1.ocn.ad.jp[222.146.40.203] said: 554 5.7.1 : Recipient address rejected: Access denied (in reply to RCPT TO command) --82F8B42C031.1208140147/msa105lp.auone-net.jp Content-Description: Delivery report Content-Type: message/delivery-status Reporting-MTA: dns; msa105lp.auone-net.jp X-au-one-net-msa-Queue-ID: 82F8B42C031 X-au-one-net-msa-Sender: rfc822; xfs@oss.sgi.com Arrival-Date: Mon, 14 Apr 2008 11:29:05 +0900 (JST) Final-Recipient: rfc822; sicpfwtc@poplar.ocn.ne.jp Original-Recipient: rfc822;sicpfwtc@poplar.ocn.ne.jp Action: failed Status: 5.7.1 Remote-MTA: dns; mfgw1.ocn.ad.jp Diagnostic-Code: smtp; 554 5.7.1 : Recipient address rejected: Access denied --82F8B42C031.1208140147/msa105lp.auone-net.jp Content-Description: Undelivered Message Headers Content-Type: text/rfc822-headers Received: from oss.sgi.com (N070125.ppp.dion.ne.jp [61.202.70.125]) by msa105lp.auone-net.jp (au one net msa) with ESMTP id 82F8B42C031 for ; Mon, 14 Apr 2008 11:29:05 +0900 (JST) From: xfs@oss.sgi.com To: sicpfwtc@poplar.ocn.ne.jp Subject: Returned mail: Data format error Date: Mon, 14 Apr 2008 11:27:59 +0900 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0005_E2046C97.D747E443" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2600.0000 X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 Message-Id: <20080414022905.82F8B42C031@msa105lp.auone-net.jp> --82F8B42C031.1208140147/msa105lp.auone-net.jp-- From owner-xfs@oss.sgi.com Sun Apr 13 20:09:12 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 20:09:31 -0700 (PDT) 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 relay.sgi.com (relay2.corp.sgi.com [192.26.58.22]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m3E39BtA002815 for ; Sun, 13 Apr 2008 20:09:12 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9275D304066; Sun, 13 Apr 2008 20:09:46 -0700 (PDT) Received: from itchy (xaiki@itchy.melbourne.sgi.com [134.14.55.96]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3E39fjm419019; Mon, 14 Apr 2008 13:09:43 +1000 (AEST) From: Niv Sardi To: David Chinner Cc: xfs-dev , xfs-oss Subject: Re: [patch] xfsqa - 166 - fix filter for stripe aligned filesystems References: <20080411033628.GN103491721@sgi.com> Date: Mon, 14 Apr 2008 13:09:43 +1000 In-Reply-To: <20080411033628.GN103491721@sgi.com> (David Chinner's message of "Fri, 11 Apr 2008 13:36:28 +1000") Message-ID: User-Agent: Gnus/5.110007 (No Gnus v0.7) Emacs/23.0.60 (i486-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15411 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@cxhome.ath.cx Precedence: bulk X-list: xfs Looks good, one minor comment. David Chinner writes: > Flags has extra bits set in it xfs_bmap output when > the filesyste is using stripe alignment. Fix the test > to only look at the unwritten flag. Capture the xfs_bmap > output as well so failures can be debugged easily. > > Signed-off-by: Dave Chinner > --- > xfstests/166 | 17 ++++++++++------- > 1 file changed, 10 insertions(+), 7 deletions(-) > > Index: xfs-cmds/xfstests/166 > =================================================================== > --- xfs-cmds.orig/xfstests/166 2008-03-25 15:29:35.000000000 +1100 > +++ xfs-cmds/xfstests/166 2008-04-11 13:33:31.220068950 +1000 > @@ -17,6 +17,7 @@ here=`pwd` > tmp=/tmp/$$ > status=1 # failure is the default! > trap "_cleanup; exit \$status" 0 1 2 3 15 > +rm $seq.full rm -f ? so that it doesn't complain when file is not there ? > _cleanup() > { > @@ -39,9 +40,14 @@ _filter_blocks() > unwritten2 = ((1048576/512) / 2) - 2 * written_size > } > > - if ($7) { > - size = "RIGHT" > - flags = "GOOD" > + /* is the extent unwritten? */ > + unwritten_ext = 0; > + if ($7 >= 10000) > + unwritten_ext = 1; > + > + size = "RIGHT" > + flags = "GOOD" > + if (unwritten_ext) { > if (unwritten1) { > if ($6 != unwritten1) > size = "WRONG" > @@ -49,11 +55,7 @@ _filter_blocks() > } else if ($6 != unwritten2) { > size = "WRONG" > } > - if ($7 < 10000) > - flags = "BAD" > } else { > - size = "RIGHT" > - flags = "GOOD" > if ($6 != written_size) > size = "WRONG" > } > @@ -77,6 +79,7 @@ FILE_SIZE=1048576 > rm -f $TEST_FILE > $TEST_PROG $FILE_SIZE $TEST_FILE > > +xfs_bmap -vp $TEST_FILE >> $seq.full > xfs_bmap -vp $TEST_FILE | _filter_blocks > > status=0 -- Niv Sardi From owner-xfs@oss.sgi.com Sun Apr 13 20:14:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 20:14:23 -0700 (PDT) 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=BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from relay.sgi.com (relay2.corp.sgi.com [192.26.58.22]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m3E3EB45003560 for ; Sun, 13 Apr 2008 20:14:15 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by relay2.corp.sgi.com (Postfix) with ESMTP id A5AC4304070; Sun, 13 Apr 2008 20:14:50 -0700 (PDT) Received: from itchy (xaiki@itchy.melbourne.sgi.com [134.14.55.96]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3E3Ejjm419662; Mon, 14 Apr 2008 13:14:46 +1000 (AEST) From: Niv Sardi To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH] split xfs_ioc_xattr References: <20080319204014.GA23644@lst.de> Date: Mon, 14 Apr 2008 13:14:47 +1000 In-Reply-To: <20080319204014.GA23644@lst.de> (Christoph Hellwig's message of "Wed, 19 Mar 2008 21:40:14 +0100") Message-ID: User-Agent: Gnus/5.110007 (No Gnus v0.7) Emacs/23.0.60 (i486-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15412 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@cxhome.ath.cx Precedence: bulk X-list: xfs Christoph Hellwig writes: > The three subcases of xfs_ioc_xattr don't share any semantics and almost > no code, so split it into three separate helpers. > > Signed-off-by: Christoph Hellwig Looks good to me, aren't the likely() unlinkely() deprecated ? shouldn't they be killed ? Cheers, > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ioctl.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_ioctl.c 2008-03-04 18:14:57.000000000 +0100 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ioctl.c 2008-03-04 18:25:51.000000000 +0100 > @@ -871,85 +871,85 @@ xfs_ioc_fsgetxattr( > } > > STATIC int > -xfs_ioc_xattr( > +xfs_ioc_fssetxattr( > xfs_inode_t *ip, > struct file *filp, > - unsigned int cmd, > void __user *arg) > { > struct fsxattr fa; > struct bhv_vattr *vattr; > - int error = 0; > + int error; > int attr_flags; > - unsigned int flags; > + > + if (copy_from_user(&fa, arg, sizeof(fa))) > + return -EFAULT; > > vattr = kmalloc(sizeof(*vattr), GFP_KERNEL); > if (unlikely(!vattr)) > return -ENOMEM; > > - switch (cmd) { > - case XFS_IOC_FSSETXATTR: { > - if (copy_from_user(&fa, arg, sizeof(fa))) { > - error = -EFAULT; > - break; > - } > - > - attr_flags = 0; > - if (filp->f_flags & (O_NDELAY|O_NONBLOCK)) > - attr_flags |= ATTR_NONBLOCK; > - > - vattr->va_mask = XFS_AT_XFLAGS | XFS_AT_EXTSIZE | XFS_AT_PROJID; > - vattr->va_xflags = fa.fsx_xflags; > - vattr->va_extsize = fa.fsx_extsize; > - vattr->va_projid = fa.fsx_projid; > - > - error = xfs_setattr(ip, vattr, attr_flags, NULL); > - if (likely(!error)) *HERE* > - vn_revalidate(XFS_ITOV(ip)); /* update flags */ > - error = -error; > - break; > - } > - > - case XFS_IOC_GETXFLAGS: { > - flags = xfs_di2lxflags(ip->i_d.di_flags); > - if (copy_to_user(arg, &flags, sizeof(flags))) > - error = -EFAULT; > - break; > - } > - > - case XFS_IOC_SETXFLAGS: { > - if (copy_from_user(&flags, arg, sizeof(flags))) { > - error = -EFAULT; > - break; > - } > - > - if (flags & ~(FS_IMMUTABLE_FL | FS_APPEND_FL | \ > - FS_NOATIME_FL | FS_NODUMP_FL | \ > - FS_SYNC_FL)) { > - error = -EOPNOTSUPP; > - break; > - } > - > - attr_flags = 0; > - if (filp->f_flags & (O_NDELAY|O_NONBLOCK)) > - attr_flags |= ATTR_NONBLOCK; > - > - vattr->va_mask = XFS_AT_XFLAGS; > - vattr->va_xflags = xfs_merge_ioc_xflags(flags, > - xfs_ip2xflags(ip)); > - > - error = xfs_setattr(ip, vattr, attr_flags, NULL); > - if (likely(!error)) *HERE* > - vn_revalidate(XFS_ITOV(ip)); /* update flags */ > - error = -error; > - break; > - } > + attr_flags = 0; > + if (filp->f_flags & (O_NDELAY|O_NONBLOCK)) > + attr_flags |= ATTR_NONBLOCK; > + > + vattr->va_mask = XFS_AT_XFLAGS | XFS_AT_EXTSIZE | XFS_AT_PROJID; > + vattr->va_xflags = fa.fsx_xflags; > + vattr->va_extsize = fa.fsx_extsize; > + vattr->va_projid = fa.fsx_projid; > + > + error = -xfs_setattr(ip, vattr, attr_flags, NULL); > + if (!error) > + vn_revalidate(XFS_ITOV(ip)); /* update flags */ > + kfree(vattr); > + return 0; > +} > > - default: > - error = -ENOTTY; > - break; > - } > +STATIC int > +xfs_ioc_getxflags( > + xfs_inode_t *ip, > + void __user *arg) > +{ > + unsigned int flags; > + > + flags = xfs_di2lxflags(ip->i_d.di_flags); > + if (copy_to_user(arg, &flags, sizeof(flags))) > + return -EFAULT; > + return 0; > +} > > +STATIC int > +xfs_ioc_setxflags( > + xfs_inode_t *ip, > + struct file *filp, > + void __user *arg) > +{ > + struct bhv_vattr *vattr; > + unsigned int flags; > + int attr_flags; > + int error; > + > + if (copy_from_user(&flags, arg, sizeof(flags))) > + return -EFAULT; > + > + if (flags & ~(FS_IMMUTABLE_FL | FS_APPEND_FL | \ > + FS_NOATIME_FL | FS_NODUMP_FL | \ > + FS_SYNC_FL)) > + return -EOPNOTSUPP; > + > + vattr = kmalloc(sizeof(*vattr), GFP_KERNEL); > + if (unlikely(!vattr)) *HERE* > + return -ENOMEM; > + > + attr_flags = 0; > + if (filp->f_flags & (O_NDELAY|O_NONBLOCK)) > + attr_flags |= ATTR_NONBLOCK; > + > + vattr->va_mask = XFS_AT_XFLAGS; > + vattr->va_xflags = xfs_merge_ioc_xflags(flags, xfs_ip2xflags(ip)); > + > + error = -xfs_setattr(ip, vattr, attr_flags, NULL); > + if (likely(!error)) *HERE* > + vn_revalidate(XFS_ITOV(ip)); /* update flags */ > kfree(vattr); > return error; > } > @@ -1090,10 +1090,12 @@ xfs_ioctl( > return xfs_ioc_fsgetxattr(ip, 0, arg); > case XFS_IOC_FSGETXATTRA: > return xfs_ioc_fsgetxattr(ip, 1, arg); > + case XFS_IOC_FSSETXATTR: > + return xfs_ioc_fssetxattr(ip, filp, arg); > case XFS_IOC_GETXFLAGS: > + return xfs_ioc_getxflags(ip, arg); > case XFS_IOC_SETXFLAGS: > - case XFS_IOC_FSSETXATTR: > - return xfs_ioc_xattr(ip, filp, cmd, arg); > + return xfs_ioc_setxflags(ip, filp, arg); > > case XFS_IOC_FSSETDM: { > struct fsdmidata dmi; -- Niv Sardi From owner-xfs@oss.sgi.com Sun Apr 13 20:19:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 20:19:47 -0700 (PDT) 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 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 m3E3JPgm009023 for ; Sun, 13 Apr 2008 20:19:27 -0700 X-ASG-Debug-ID: 1208143203-463601840000-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 A87F19C4B0B for ; Sun, 13 Apr 2008 20:20:04 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id JPbZ1PSCZyqmClfQ for ; Sun, 13 Apr 2008 20:20:04 -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 0C3D118019AAF; Sun, 13 Apr 2008 22:20:03 -0500 (CDT) Message-ID: <4802CD62.4040201@sandeen.net> Date: Sun, 13 Apr 2008 22:20:02 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Niv Sardi CC: David Chinner , xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [patch] xfsqa - 166 - fix filter for stripe aligned filesystems Subject: Re: [patch] xfsqa - 166 - fix filter for stripe aligned filesystems References: <20080411033628.GN103491721@sgi.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1208143204 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.1, rules version 3.1.47729 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15413 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Niv Sardi wrote: > Looks good, one minor comment. > > David Chinner writes: > >> Flags has extra bits set in it xfs_bmap output when >> the filesyste is using stripe alignment. Fix the test >> to only look at the unwritten flag. Capture the xfs_bmap >> output as well so failures can be debugged easily. >> >> Signed-off-by: Dave Chinner >> --- >> xfstests/166 | 17 ++++++++++------- >> 1 file changed, 10 insertions(+), 7 deletions(-) >> >> Index: xfs-cmds/xfstests/166 >> =================================================================== >> --- xfs-cmds.orig/xfstests/166 2008-03-25 15:29:35.000000000 +1100 >> +++ xfs-cmds/xfstests/166 2008-04-11 13:33:31.220068950 +1000 >> @@ -17,6 +17,7 @@ here=`pwd` >> tmp=/tmp/$$ >> status=1 # failure is the default! >> trap "_cleanup; exit \$status" 0 1 2 3 15 >> +rm $seq.full > > rm -f ? so that it doesn't complain when file is not there ? All other tests do use rm -f here, it seems. -Eric From owner-xfs@oss.sgi.com Sun Apr 13 20:22:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 20:22:09 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_14, J_CHICKENPOX_63 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 m3E3LxI6009532 for ; Sun, 13 Apr 2008 20:22:01 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA01980; Mon, 14 Apr 2008 13:22:31 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3E3MUsT131777790; Mon, 14 Apr 2008 13:22:31 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3E3MTkH131813736; Mon, 14 Apr 2008 13:22:29 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 14 Apr 2008 13:22:29 +1000 From: David Chinner To: Timothy Shimmin Cc: David Chinner , "bnaujok@sgi.com via BugWorks" , xfs-dev , xfs-oss , asg-qa Subject: Re: REVIEW XFSQA test out xfs_attr_shortform_bytesfit attr2/attr1 fix Message-ID: <20080414032229.GV103491721@sgi.com> References: <47FC79FC.5020803@sgi.com> <20080410053601.GK108924158@sgi.com> <4802B4E8.3070807@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4802B4E8.3070807@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15414 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 14, 2008 at 11:35:36AM +1000, Timothy Shimmin wrote: > Hi Dave and Barry, > > David Chinner wrote: > >On Wed, Apr 09, 2008 at 06:10:36PM +1000, Timothy Shimmin wrote: > >>Hi there, > >> > >>A test to test out Eric's fix for xfs_attr_shortform_bytesfit > >>bug when going from attr2 to attr1. > >> > >>With TOT kernel, without patch, one can see the corrupted inline > >>dirents. With patch, all is well. > >> > >>The 186.out _should_ be output'ing ATTR2 for the db version > >>command but I'm awaiting Barry's xfsprogs checkin to fix that one - > >>and then I will regenerate it. > > > >Really? I'm seeing it fail with ATTR2 in the xfs_db output... > > > That's what I used to see until I updated to TOT kernel. > That's weird. It's likely due to Eric's change to make sb_badfeatures2 = sb_features2. That will make userspace pick up the attr2 feature properly regardless of where it is. Perhaps xfs_db is b0rked w.r.t. reporting attr vs attr2.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Sun Apr 13 20:29:15 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 20:45:21 -0700 (PDT) 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 m3E3TEnn010423 for ; Sun, 13 Apr 2008 20:29:15 -0700 X-ASG-Debug-ID: 1208143792-31d2026d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id AB7AD550E2 for ; Sun, 13 Apr 2008 20:29:52 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id 8gmSWdQ72BBHI2vV for ; Sun, 13 Apr 2008 20:29:52 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3E3TjF3010602 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Mon, 14 Apr 2008 05:29:45 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3E3Te75010598; Mon, 14 Apr 2008 05:29:40 +0200 Date: Mon, 14 Apr 2008 05:29:40 +0200 From: Christoph Hellwig To: Niv Sardi Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] split xfs_ioc_xattr Subject: Re: [PATCH] split xfs_ioc_xattr Message-ID: <20080414032940.GA10579@lst.de> References: <20080319204014.GA23644@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.3.28i X-Spam-Score: -0.001 () BAYES_44 X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1208143793 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.1, rules version 3.1.47730 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15415 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Mon, Apr 14, 2008 at 01:14:47PM +1000, Niv Sardi wrote: > > > Christoph Hellwig writes: > > The three subcases of xfs_ioc_xattr don't share any semantics and almost > > no code, so split it into three separate helpers. > > > > Signed-off-by: Christoph Hellwig > > Looks good to me, aren't the likely() unlinkely() deprecated ? shouldn't > they be killed ? Why would they be deprecated? From owner-xfs@oss.sgi.com Sun Apr 13 20:56:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 20:56:38 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_14, J_CHICKENPOX_63 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 m3E3uBAR012598 for ; Sun, 13 Apr 2008 20:56:15 -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 NAA02461; Mon, 14 Apr 2008 13:56:46 +1000 Message-ID: <4802D5FE.80005@sgi.com> Date: Mon, 14 Apr 2008 13:56:46 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: David Chinner CC: "bnaujok@sgi.com via BugWorks" , xfs-dev , xfs-oss , asg-qa Subject: Re: REVIEW XFSQA test out xfs_attr_shortform_bytesfit attr2/attr1 fix References: <47FC79FC.5020803@sgi.com> <20080410053601.GK108924158@sgi.com> <4802B4E8.3070807@sgi.com> <20080414032229.GV103491721@sgi.com> In-Reply-To: <20080414032229.GV103491721@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15416 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Hi Dave, David Chinner wrote: > On Mon, Apr 14, 2008 at 11:35:36AM +1000, Timothy Shimmin wrote: >> Hi Dave and Barry, >> >> David Chinner wrote: >>> On Wed, Apr 09, 2008 at 06:10:36PM +1000, Timothy Shimmin wrote: >>>> Hi there, >>>> >>>> A test to test out Eric's fix for xfs_attr_shortform_bytesfit >>>> bug when going from attr2 to attr1. >>>> >>>> With TOT kernel, without patch, one can see the corrupted inline >>>> dirents. With patch, all is well. >>>> >>>> The 186.out _should_ be output'ing ATTR2 for the db version >>>> command but I'm awaiting Barry's xfsprogs checkin to fix that one - >>>> and then I will regenerate it. >>> Really? I'm seeing it fail with ATTR2 in the xfs_db output... >>> >> That's what I used to see until I updated to TOT kernel. >> That's weird. > > It's likely due to Eric's change to make sb_badfeatures2 = > sb_features2. That will make userspace pick up the attr2 feature > properly regardless of where it is. Perhaps xfs_db is b0rked > w.r.t. reporting attr vs attr2.... > > Cheers, > > Dave. I'm not sure, but with Barry's latest checkins, all seems well and I'm now getting the attr2 output as expected. Which just leaves the ATTR and ATTR2 output when I add an EA to a file on an ATTR2 file-system. It is naturally the kernel that is doing this. The existing behaviour prior to ATTR2, was to turn on ATTR as soon as one added an EA to a file (added by doucette). > xfs_bmap_add_attrfork .... > if (!xfs_sb_version_hasattr(&mp->m_sb) || > (!xfs_sb_version_hasattr2(&mp->m_sb) && version == 2)) { > __int64_t sbfields = 0; > > spin_lock(&mp->m_sb_lock); > if (!xfs_sb_version_hasattr(&mp->m_sb)) { > xfs_sb_version_addattr(&mp->m_sb); > sbfields |= XFS_SB_VERSIONNUM; > } > if (!xfs_sb_version_hasattr2(&mp->m_sb) && version == 2) { > xfs_sb_version_addattr2(&mp->m_sb); > sbfields |= (XFS_SB_VERSIONNUM | XFS_SB_FEATURES2); > } So I would say it is intentional and we are preserving the behaviour of knowing if we have EAs in use or not. I guess it seems a bit redundant but it may well cause less problems in doing so and doesn't hurt. --Tim From owner-xfs@oss.sgi.com Sun Apr 13 21:23:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 21:23:34 -0700 (PDT) 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.0 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 m3E4N6H6014709 for ; Sun, 13 Apr 2008 21:23:09 -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 OAA03033; Mon, 14 Apr 2008 14:23:39 +1000 Message-ID: <4802DC4B.1020209@sgi.com> Date: Mon, 14 Apr 2008 14:23:39 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: David Chinner CC: "bnaujok@sgi.com via BugWorks" , xfs-dev , xfs-oss , asg-qa Subject: Re: REVIEW XFSQA test out xfs_attr_shortform_bytesfit attr2/attr1 fix References: <47FC79FC.5020803@sgi.com> <20080410053601.GK108924158@sgi.com> <4802B4E8.3070807@sgi.com> <20080414032229.GV103491721@sgi.com> <4802D5FE.80005@sgi.com> In-Reply-To: <4802D5FE.80005@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15417 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Updated 186 output... --Tim =========================================================================== Index: xfstests/186 =========================================================================== --- a/xfstests/186 2006-06-17 00:58:24.000000000 +1000 +++ b/xfstests/186 2008-04-14 15:48:26.776187850 +1000 @@ -0,0 +1,166 @@ +#! /bin/sh +# FS QA Test No. 186 +# +#----------------------------------------------------------------------- +# Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. +#----------------------------------------------------------------------- +# +# Test out: +# pv#979606: xfs bug in going from attr2 back to attr1 +# +# Test bug in going from attr2 back to attr1 where xfs +# (due to xfs_attr_shortform_bytesfit) +# would reset the di_forkoff to the m_offset instead of +# leaving the di_forkoff alone as was intended. +# +# We create enough dirents to push us past m_attroffset, +# and create an EA so we have a fork offset +# and then turn on attr1 and add one more EA which +# will write over the shortform dirents. +# +# +# creator +owner=tes@emu.melbourne.sgi.com + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +_create_dirents() +{ + start_num=$1 + end_num=$2 + cd $fork_dir + for i in `seq $start_num $end_num`; do + touch file.$i + done +} + +_create_eas() +{ + start_num=$1 + end_num=$2 + for i in `seq $start_num $end_num`; do + setfattr -n user.$i -v 0xbabe $fork_dir + done +} + +_rmv_eas() +{ + start_num=$1 + end_num=$2 + for i in `seq $start_num $end_num`; do + setfattr -x user.$i $fork_dir + done +} + +_filter_inode() +{ + tee -a $seq.full | egrep '^u.sfdir2|^a.sfattr|core.forkoff' |\ + egrep -v 'inumber|parent' +} + +_filter_version() +{ + tee -a $seq.full | tr ',' '\n' | grep ATTR +} + +_print_inode() +{ + echo "" + echo "=================================" + $XFS_DB_PROG -c "version" $SCRATCH_DEV 2>&1 | _filter_version + $XFS_DB_PROG -c "inode $inum" -c p $SCRATCH_DEV 2>&1 | _filter_inode + echo "=================================" +} + +_do_eas() +{ + echo "" + _scratch_mount + if [ $1 = "-r" ]; then + echo "*** remove EAs start $2 end $3 ***" + _rmv_eas $2 $3 + else + echo "*** create EAs start $2 end $3 ***" + _create_eas $2 $3 + fi + echo "" + cd /; $UMOUNT_PROG $SCRATCH_MNT + _print_inode +} + +_do_dirents() +{ + num=`expr $2 - $1 + 1` + echo "" + echo "*** create $num dirents ***" + echo "" + _scratch_mount + _create_dirents $1 $2 + cd /; $UMOUNT_PROG $SCRATCH_MNT + _print_inode +} + +_changeto_attr1() +{ + echo "" + echo "Try setting attr1 by db" + echo "" + $XFS_DB_PROG -x -c "version attr1" $SCRATCH_DEV | _filter_version +} + + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here + +# Modify as appropriate. +_supported_fs xfs +_supported_os Linux +_require_scratch +rm -f $seq.full + +_scratch_mkfs -i attr=2,size=512 >/dev/null 2>&1 + +# set inum to root dir ino +# we'll add in dirents and EAs into the root directory +eval `$XFS_DB_PROG -r -c 'sb 0' -c 'p rootino' $SCRATCH_DEV | $SED_PROG 's/ //g'` +inum=$rootino +fork_dir=$SCRATCH_MNT +_print_inode + +# add enough dirents to be inline but more +# than will fit for m_attroffset for 512b inodes +# for attr2 this is not a problem +_do_dirents 1 25 + +# add 1 ea so we get our forkoff happening +_do_eas -c 1 1 + +# now change back to attr1 where forkoff is constant now +_changeto_attr1 + +# now add another EA +# for a bug in xfs_add_shortform_bytesfit +# where it reset the forkoff to m_attroffset>>3 instead of +# leaving as di_forkoff +# If it resets to m_attroffset which is in the middle of +# the dirents then they will get corrupted +_do_eas -c 2 2 + +# success, all done +status=0 +exit =========================================================================== Index: xfstests/186.out =========================================================================== --- a/xfstests/186.out 2006-06-17 00:58:24.000000000 +1000 +++ b/xfstests/186.out 2008-04-14 14:59:24.204188050 +1000 @@ -0,0 +1,290 @@ +QA output created by 186 + +================================= +ATTR2 +core.forkoff = 0 +u.sfdir2.hdr.count = 0 +u.sfdir2.hdr.i8count = 0 +================================= + +*** create 25 dirents *** + + +================================= +ATTR2 +core.forkoff = 0 +u.sfdir2.hdr.count = 25 +u.sfdir2.hdr.i8count = 0 +u.sfdir2.list[0].namelen = 6 +u.sfdir2.list[0].offset = 0x30 +u.sfdir2.list[0].name = "file.1" +u.sfdir2.list[1].namelen = 6 +u.sfdir2.list[1].offset = 0x48 +u.sfdir2.list[1].name = "file.2" +u.sfdir2.list[2].namelen = 6 +u.sfdir2.list[2].offset = 0x60 +u.sfdir2.list[2].name = "file.3" +u.sfdir2.list[3].namelen = 6 +u.sfdir2.list[3].offset = 0x78 +u.sfdir2.list[3].name = "file.4" +u.sfdir2.list[4].namelen = 6 +u.sfdir2.list[4].offset = 0x90 +u.sfdir2.list[4].name = "file.5" +u.sfdir2.list[5].namelen = 6 +u.sfdir2.list[5].offset = 0xa8 +u.sfdir2.list[5].name = "file.6" +u.sfdir2.list[6].namelen = 6 +u.sfdir2.list[6].offset = 0xc0 +u.sfdir2.list[6].name = "file.7" +u.sfdir2.list[7].namelen = 6 +u.sfdir2.list[7].offset = 0xd8 +u.sfdir2.list[7].name = "file.8" +u.sfdir2.list[8].namelen = 6 +u.sfdir2.list[8].offset = 0xf0 +u.sfdir2.list[8].name = "file.9" +u.sfdir2.list[9].namelen = 7 +u.sfdir2.list[9].offset = 0x108 +u.sfdir2.list[9].name = "file.10" +u.sfdir2.list[10].namelen = 7 +u.sfdir2.list[10].offset = 0x120 +u.sfdir2.list[10].name = "file.11" +u.sfdir2.list[11].namelen = 7 +u.sfdir2.list[11].offset = 0x138 +u.sfdir2.list[11].name = "file.12" +u.sfdir2.list[12].namelen = 7 +u.sfdir2.list[12].offset = 0x150 +u.sfdir2.list[12].name = "file.13" +u.sfdir2.list[13].namelen = 7 +u.sfdir2.list[13].offset = 0x168 +u.sfdir2.list[13].name = "file.14" +u.sfdir2.list[14].namelen = 7 +u.sfdir2.list[14].offset = 0x180 +u.sfdir2.list[14].name = "file.15" +u.sfdir2.list[15].namelen = 7 +u.sfdir2.list[15].offset = 0x198 +u.sfdir2.list[15].name = "file.16" +u.sfdir2.list[16].namelen = 7 +u.sfdir2.list[16].offset = 0x1b0 +u.sfdir2.list[16].name = "file.17" +u.sfdir2.list[17].namelen = 7 +u.sfdir2.list[17].offset = 0x1c8 +u.sfdir2.list[17].name = "file.18" +u.sfdir2.list[18].namelen = 7 +u.sfdir2.list[18].offset = 0x1e0 +u.sfdir2.list[18].name = "file.19" +u.sfdir2.list[19].namelen = 7 +u.sfdir2.list[19].offset = 0x1f8 +u.sfdir2.list[19].name = "file.20" +u.sfdir2.list[20].namelen = 7 +u.sfdir2.list[20].offset = 0x210 +u.sfdir2.list[20].name = "file.21" +u.sfdir2.list[21].namelen = 7 +u.sfdir2.list[21].offset = 0x228 +u.sfdir2.list[21].name = "file.22" +u.sfdir2.list[22].namelen = 7 +u.sfdir2.list[22].offset = 0x240 +u.sfdir2.list[22].name = "file.23" +u.sfdir2.list[23].namelen = 7 +u.sfdir2.list[23].offset = 0x258 +u.sfdir2.list[23].name = "file.24" +u.sfdir2.list[24].namelen = 7 +u.sfdir2.list[24].offset = 0x270 +u.sfdir2.list[24].name = "file.25" +================================= + +*** create EAs start 1 end 1 *** + + +================================= +ATTR +ATTR2 +core.forkoff = 47 +u.sfdir2.hdr.count = 25 +u.sfdir2.hdr.i8count = 0 +u.sfdir2.list[0].namelen = 6 +u.sfdir2.list[0].offset = 0x30 +u.sfdir2.list[0].name = "file.1" +u.sfdir2.list[1].namelen = 6 +u.sfdir2.list[1].offset = 0x48 +u.sfdir2.list[1].name = "file.2" +u.sfdir2.list[2].namelen = 6 +u.sfdir2.list[2].offset = 0x60 +u.sfdir2.list[2].name = "file.3" +u.sfdir2.list[3].namelen = 6 +u.sfdir2.list[3].offset = 0x78 +u.sfdir2.list[3].name = "file.4" +u.sfdir2.list[4].namelen = 6 +u.sfdir2.list[4].offset = 0x90 +u.sfdir2.list[4].name = "file.5" +u.sfdir2.list[5].namelen = 6 +u.sfdir2.list[5].offset = 0xa8 +u.sfdir2.list[5].name = "file.6" +u.sfdir2.list[6].namelen = 6 +u.sfdir2.list[6].offset = 0xc0 +u.sfdir2.list[6].name = "file.7" +u.sfdir2.list[7].namelen = 6 +u.sfdir2.list[7].offset = 0xd8 +u.sfdir2.list[7].name = "file.8" +u.sfdir2.list[8].namelen = 6 +u.sfdir2.list[8].offset = 0xf0 +u.sfdir2.list[8].name = "file.9" +u.sfdir2.list[9].namelen = 7 +u.sfdir2.list[9].offset = 0x108 +u.sfdir2.list[9].name = "file.10" +u.sfdir2.list[10].namelen = 7 +u.sfdir2.list[10].offset = 0x120 +u.sfdir2.list[10].name = "file.11" +u.sfdir2.list[11].namelen = 7 +u.sfdir2.list[11].offset = 0x138 +u.sfdir2.list[11].name = "file.12" +u.sfdir2.list[12].namelen = 7 +u.sfdir2.list[12].offset = 0x150 +u.sfdir2.list[12].name = "file.13" +u.sfdir2.list[13].namelen = 7 +u.sfdir2.list[13].offset = 0x168 +u.sfdir2.list[13].name = "file.14" +u.sfdir2.list[14].namelen = 7 +u.sfdir2.list[14].offset = 0x180 +u.sfdir2.list[14].name = "file.15" +u.sfdir2.list[15].namelen = 7 +u.sfdir2.list[15].offset = 0x198 +u.sfdir2.list[15].name = "file.16" +u.sfdir2.list[16].namelen = 7 +u.sfdir2.list[16].offset = 0x1b0 +u.sfdir2.list[16].name = "file.17" +u.sfdir2.list[17].namelen = 7 +u.sfdir2.list[17].offset = 0x1c8 +u.sfdir2.list[17].name = "file.18" +u.sfdir2.list[18].namelen = 7 +u.sfdir2.list[18].offset = 0x1e0 +u.sfdir2.list[18].name = "file.19" +u.sfdir2.list[19].namelen = 7 +u.sfdir2.list[19].offset = 0x1f8 +u.sfdir2.list[19].name = "file.20" +u.sfdir2.list[20].namelen = 7 +u.sfdir2.list[20].offset = 0x210 +u.sfdir2.list[20].name = "file.21" +u.sfdir2.list[21].namelen = 7 +u.sfdir2.list[21].offset = 0x228 +u.sfdir2.list[21].name = "file.22" +u.sfdir2.list[22].namelen = 7 +u.sfdir2.list[22].offset = 0x240 +u.sfdir2.list[22].name = "file.23" +u.sfdir2.list[23].namelen = 7 +u.sfdir2.list[23].offset = 0x258 +u.sfdir2.list[23].name = "file.24" +u.sfdir2.list[24].namelen = 7 +u.sfdir2.list[24].offset = 0x270 +u.sfdir2.list[24].name = "file.25" +a.sfattr.hdr.totsize = 10 +a.sfattr.hdr.count = 1 +a.sfattr.list[0].namelen = 1 +a.sfattr.list[0].valuelen = 2 +a.sfattr.list[0].root = 0 +a.sfattr.list[0].secure = 0 +a.sfattr.list[0].name = "1" +a.sfattr.list[0].value = "\272\276" +================================= + +Try setting attr1 by db + +ATTR + +*** create EAs start 2 end 2 *** + + +================================= +ATTR +core.forkoff = 47 +u.sfdir2.hdr.count = 25 +u.sfdir2.hdr.i8count = 0 +u.sfdir2.list[0].namelen = 6 +u.sfdir2.list[0].offset = 0x30 +u.sfdir2.list[0].name = "file.1" +u.sfdir2.list[1].namelen = 6 +u.sfdir2.list[1].offset = 0x48 +u.sfdir2.list[1].name = "file.2" +u.sfdir2.list[2].namelen = 6 +u.sfdir2.list[2].offset = 0x60 +u.sfdir2.list[2].name = "file.3" +u.sfdir2.list[3].namelen = 6 +u.sfdir2.list[3].offset = 0x78 +u.sfdir2.list[3].name = "file.4" +u.sfdir2.list[4].namelen = 6 +u.sfdir2.list[4].offset = 0x90 +u.sfdir2.list[4].name = "file.5" +u.sfdir2.list[5].namelen = 6 +u.sfdir2.list[5].offset = 0xa8 +u.sfdir2.list[5].name = "file.6" +u.sfdir2.list[6].namelen = 6 +u.sfdir2.list[6].offset = 0xc0 +u.sfdir2.list[6].name = "file.7" +u.sfdir2.list[7].namelen = 6 +u.sfdir2.list[7].offset = 0xd8 +u.sfdir2.list[7].name = "file.8" +u.sfdir2.list[8].namelen = 6 +u.sfdir2.list[8].offset = 0xf0 +u.sfdir2.list[8].name = "file.9" +u.sfdir2.list[9].namelen = 7 +u.sfdir2.list[9].offset = 0x108 +u.sfdir2.list[9].name = "file.10" +u.sfdir2.list[10].namelen = 7 +u.sfdir2.list[10].offset = 0x120 +u.sfdir2.list[10].name = "file.11" +u.sfdir2.list[11].namelen = 7 +u.sfdir2.list[11].offset = 0x138 +u.sfdir2.list[11].name = "file.12" +u.sfdir2.list[12].namelen = 7 +u.sfdir2.list[12].offset = 0x150 +u.sfdir2.list[12].name = "file.13" +u.sfdir2.list[13].namelen = 7 +u.sfdir2.list[13].offset = 0x168 +u.sfdir2.list[13].name = "file.14" +u.sfdir2.list[14].namelen = 7 +u.sfdir2.list[14].offset = 0x180 +u.sfdir2.list[14].name = "file.15" +u.sfdir2.list[15].namelen = 7 +u.sfdir2.list[15].offset = 0x198 +u.sfdir2.list[15].name = "file.16" +u.sfdir2.list[16].namelen = 7 +u.sfdir2.list[16].offset = 0x1b0 +u.sfdir2.list[16].name = "file.17" +u.sfdir2.list[17].namelen = 7 +u.sfdir2.list[17].offset = 0x1c8 +u.sfdir2.list[17].name = "file.18" +u.sfdir2.list[18].namelen = 7 +u.sfdir2.list[18].offset = 0x1e0 +u.sfdir2.list[18].name = "file.19" +u.sfdir2.list[19].namelen = 7 +u.sfdir2.list[19].offset = 0x1f8 +u.sfdir2.list[19].name = "file.20" +u.sfdir2.list[20].namelen = 7 +u.sfdir2.list[20].offset = 0x210 +u.sfdir2.list[20].name = "file.21" +u.sfdir2.list[21].namelen = 7 +u.sfdir2.list[21].offset = 0x228 +u.sfdir2.list[21].name = "file.22" +u.sfdir2.list[22].namelen = 7 +u.sfdir2.list[22].offset = 0x240 +u.sfdir2.list[22].name = "file.23" +u.sfdir2.list[23].namelen = 7 +u.sfdir2.list[23].offset = 0x258 +u.sfdir2.list[23].name = "file.24" +u.sfdir2.list[24].namelen = 7 +u.sfdir2.list[24].offset = 0x270 +u.sfdir2.list[24].name = "file.25" +a.sfattr.hdr.totsize = 16 +a.sfattr.hdr.count = 2 +a.sfattr.list[0].namelen = 1 +a.sfattr.list[0].valuelen = 2 +a.sfattr.list[0].root = 0 +a.sfattr.list[0].secure = 0 +a.sfattr.list[0].name = "1" +a.sfattr.list[0].value = "\272\276" +a.sfattr.list[1].namelen = 1 +a.sfattr.list[1].valuelen = 2 +a.sfattr.list[1].root = 0 +a.sfattr.list[1].secure = 0 +a.sfattr.list[1].name = "2" +a.sfattr.list[1].value = "\272\276" +================================= =========================================================================== Index: xfstests/group =========================================================================== --- a/xfstests/group 2008-04-14 14:10:46.000000000 +1000 +++ b/xfstests/group 2008-04-09 19:28:53.924187450 +1000 @@ -273,3 +273,4 @@ filestreams dgc@sgi.com 183 rw other auto 184 metadata auto 185 dmapi auto +186 attr auto From owner-xfs@oss.sgi.com Sun Apr 13 22:02:52 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 22:03:11 -0700 (PDT) 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.0 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 m3E52l4A017629 for ; Sun, 13 Apr 2008 22:02:50 -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 PAA03851; Mon, 14 Apr 2008 15:03:21 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1116) id CF17858C4C15; Mon, 14 Apr 2008 15:03:21 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: PARTIAL TAKE 979606 - xfs bug in going from attr2 back to attr1 Message-Id: <20080414050321.CF17858C4C15@chook.melbourne.sgi.com> Date: Mon, 14 Apr 2008 15:03:21 +1000 (EST) From: tes@sgi.com (Tim Shimmin) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15418 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Always use di_forkoff when checking for attr space. In the case where we mount a filesystem which was previously using the attr2 format as attr1, returning the default mp->m_attroffset instead of the per-inode di_forkoff for inline attribute fit calculations, may result in corruption. For example, if the data fork is already taking more space than the default fork offset and we try to add an extended attribute. An example of this is tested by xfstests/186. Signed-off-by: Eric Sandeen Date: Mon Apr 14 14:59:41 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/tes/2.6.x-xfs Inspected by: sandeen@sandeen.net The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30861a fs/xfs/xfs_attr_leaf.c - 1.110 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_attr_leaf.c.diff?r1=text&tr1=1.110&r2=text&tr2=1.109&f=h - Fix up xfs_attr_shortform_bytesfit() to return di_forkoff for attr1 instead of m_attroffset, when we have a fit in the inode. Fix tested by xfstests/186. From owner-xfs@oss.sgi.com Sun Apr 13 22:07:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 22:07:14 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_45 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 m3E574qm018251 for ; Sun, 13 Apr 2008 22:07:06 -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 PAA03908; Mon, 14 Apr 2008 15:07:36 +1000 To: "Robert Navarro" , xfs@oss.sgi.com Subject: Re: lost+found Delete Error 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: Mon, 14 Apr 2008 15:08:25 +1000 Message-ID: In-Reply-To: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15419 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Sat, 12 Apr 2008 12:35:35 +1000, Robert Navarro wrote: > Hello Everyone, > > I'm having an issue deleting some files from lost+found.... What version of xfs_repair are you using? Sounds like you might need to upgrade to the latest version (2.9.7). Regards, Barry. From owner-xfs@oss.sgi.com Sun Apr 13 22:08:22 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 22:08:29 -0700 (PDT) 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.8 required=5.0 tests=AWL,BAYES_00,HTML_MESSAGE, J_CHICKENPOX_45 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 m3E58KuL018572 for ; Sun, 13 Apr 2008 22:08:22 -0700 X-ASG-Debug-ID: 1208149739-1fe102f90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from wf-out-1314.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BA22B1298C91 for ; Sun, 13 Apr 2008 22:08:59 -0700 (PDT) Received: from wf-out-1314.google.com (wf-out-1314.google.com [209.85.200.170]) by cuda.sgi.com with ESMTP id ApDHc1X93wg6H5MJ for ; Sun, 13 Apr 2008 22:08:59 -0700 (PDT) Received: by wf-out-1314.google.com with SMTP id 29so1582673wff.32 for ; Sun, 13 Apr 2008 22:08:59 -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=4QyIANaPzyQzw2wG5T1XnD72InmdfofAuKW0nAQd8MI=; b=Glxi0HGQ8V5fWoLVL1oUMJkFskFsGD9D5cnUq7Z6tcNSHFU7eWZB/sX1LjlgZ9SwKjDY2WJ9E2aFxYsP+EJJFpac98fonRkMqvqYOPPmKloO2mUOvN6DwKkv2N2BbivJmrkHf/RaMUQWFwf7sZZ4kUCi3owObwBbbPOjIjRo/D4= 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=vKD3z8qPitQnNap6OaoZqfXohJ5sqY9RbCffK4h77B+vfYKe4UtqjbiUkoV26Gs+QQqhjuQYyXiIu3VK+KuQ5QQBZg+OwR37pg+KDcdd1SZPNV2TbsrnV+FFiMwhyPgFtnhT7PpnaHf0zVuVjVCRKu1cB9w4Tq9GliSYkxpalhg= Received: by 10.142.57.3 with SMTP id f3mr786736wfa.325.1208149739291; Sun, 13 Apr 2008 22:08:59 -0700 (PDT) Received: by 10.142.210.1 with HTTP; Sun, 13 Apr 2008 22:08:59 -0700 (PDT) Message-ID: Date: Sun, 13 Apr 2008 22:08:59 -0700 From: "Robert Navarro" To: "Barry Naujok" , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: lost+found Delete Error Subject: Re: lost+found Delete Error In-Reply-To: MIME-Version: 1.0 References: X-Barracuda-Connect: wf-out-1314.google.com[209.85.200.170] X-Barracuda-Start-Time: 1208149739 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=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47737 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 533 X-archive-position: 15420 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: crshman@gmail.com Precedence: bulk X-list: xfs Hello Barry, Thanks for your response, I am indeed using the latest version 2.9.7 On Sun, Apr 13, 2008 at 10:08 PM, Barry Naujok wrote: > On Sat, 12 Apr 2008 12:35:35 +1000, Robert Navarro > wrote: > > Hello Everyone, > > > > I'm having an issue deleting some files from lost+found.... > > > > What version of xfs_repair are you using? Sounds like you might > need to upgrade to the latest version (2.9.7). > > Regards, > Barry. > -- ~Robert Navarro [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Sun Apr 13 22:12:12 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 22:12:20 -0700 (PDT) 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.0 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 m3E5C88x019257 for ; Sun, 13 Apr 2008 22:12:10 -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 PAA04003; Mon, 14 Apr 2008 15:12:43 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1116) id 6F9B658C4C15; Mon, 14 Apr 2008 15:12:43 +1000 (EST) To: xfs@oss.sgi.com, sgi.bugs.xfs@engr.sgi.com Subject: PARTIAL TAKE 979606 - xfs bug in going from attr2 back to attr1 Message-Id: <20080414051243.6F9B658C4C15@chook.melbourne.sgi.com> Date: Mon, 14 Apr 2008 15:12:43 +1000 (EST) From: tes@sgi.com (Tim Shimmin) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15421 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs xfs_bmap_compute_maxlevels should be based on di_forkoff instead of m_attr_offset Fix up xfs_bmap_compute_maxlevels() to account for the case when we go from using attr2 to using attr1. In that case attr1 will no longer necessarily be at m_attr_offset>>3, but could be at a different value for di_forkoff. Therefore, we return the worst case scenario using MINDBTPTRS and MINABTPTRS, as this function is used for determining the maximum log space. Date: Mon Apr 14 15:10:39 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/tes/2.6.x-xfs Inspected by: sandeen@sandeen.net The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30862a fs/xfs/xfs_bmap.c - 1.390 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_bmap.c.diff?r1=text&tr1=1.390&r2=text&tr2=1.389&f=h - Fix up xfs_bmap_compute_maxlevels() to account for the case when we go from using attr2 to using attr1. In that case attr1 will no longer necessarily be at m_attr_offset>>3, but could be at a different value for di_forkoff. Therefore, we return the worst case scenario using MINDBTPTRS and MINABTPTRS, as this function is used for determining the maximum log space. From owner-xfs@oss.sgi.com Sun Apr 13 22:14:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 22:14:25 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_45 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 m3E5E0Mq019707 for ; Sun, 13 Apr 2008 22:14:05 -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 PAA04046; Mon, 14 Apr 2008 15:14:33 +1000 Date: Mon, 14 Apr 2008 15:15:24 +1000 To: "Robert Navarro" , xfs@oss.sgi.com Subject: Re: lost+found Delete Error 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 Message-ID: In-Reply-To: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15422 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Mon, 14 Apr 2008 15:08:59 +1000, Robert Navarro wrote: > Hello Barry, > > Thanks for your response, I am indeed using the latest version 2.9.7 Hmm... can you get the inode number for the undeletable directories (56_Sim_Lane & hl2/materials/Decals) and then run xfs_db on that device with those inodes (including 2453227806): xfs_db> inode xfs_db> print xfs_db> dblock 0 xfs_db> print (if the dblock 0 command succeeds) xfs_db> dblock 1 xfs_db> print (as above) Thanks. Barry. From owner-xfs@oss.sgi.com Sun Apr 13 22:30:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 13 Apr 2008 22:31:01 -0700 (PDT) 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.0 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 m3E5UXRN021371 for ; Sun, 13 Apr 2008 22:30:35 -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 PAA04436; Mon, 14 Apr 2008 15:31:08 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1116) id 3C30758C4C15; Mon, 14 Apr 2008 15:31:08 +1000 (EST) To: xfs@oss.sgi.com, sgi.bugs.xfs@engr.sgi.com Subject: TAKE 979606 - xfs bug in going from attr2 back to attr1 Message-Id: <20080414053108.3C30758C4C15@chook.melbourne.sgi.com> Date: Mon, 14 Apr 2008 15:31:08 +1000 (EST) From: tes@sgi.com (Tim Shimmin) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15423 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Test out bug in xfs_attr_shortform_bytesfit for its use of m_attroffset instead of di_forkoff. Date: Mon Apr 14 15:24:55 AEST 2008 Workarea: emu.melbourne.sgi.com:/home/tes/isms/xfs-cmds Inspected by: dgc@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:30863a xfstests/186 - 1.1 - new http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/186 xfstests/186.out - 1.1 - new http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/186.out - Test out bug in xfs_attr_shortform_bytesfit for its use of m_attroffset instead of di_forkoff. xfstests/group - 1.119 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/group.diff?r1=text&tr1=1.119&r2=text&tr2=1.118&f=h - Add 186 for attr. From owner-xfs@oss.sgi.com Mon Apr 14 01:57:44 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 14 Apr 2008 01:58:02 -0700 (PDT) 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.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 m3E8vg4j019941 for ; Mon, 14 Apr 2008 01:57:44 -0700 X-ASG-Debug-ID: 1208163500-12db01b10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp-gw1.ncc.eurodata.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C299D58390 for ; Mon, 14 Apr 2008 01:58:21 -0700 (PDT) Received: from smtp-gw1.ncc.eurodata.de (smtp-gw1.ncc.eurodata.de [212.89.134.30]) by cuda.sgi.com with ESMTP id HixZmV9MiR6kNc1P for ; Mon, 14 Apr 2008 01:58:21 -0700 (PDT) Received: from ed-imap.hip100.ncc.eurodata.de (ed-imap.hip100.ncc.eurodata.de [10.2.2.100]) by smtp-gw1.ncc.eurodata.de (Postfix) with ESMTP id 0AB9050405E for ; Mon, 14 Apr 2008 10:58:22 +0200 (CEST) Received: from localhost (mailscan1.ncc.eurodata.de [212.89.134.20]) by ed-imap.hip100.ncc.eurodata.de (Postfix) with ESMTP id 32A082BF37 for ; Mon, 14 Apr 2008 10:58:20 +0200 (CEST) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Scanned: mailscan1.ncc.eurodata.de ( ** ***** ** ) Received: from ed-imap.hip100.ncc.eurodata.de ([10.2.2.100]) by localhost (mailscan1.ncc.eurodata.de [212.89.134.20]) (amavisd-new, port 10024) with ESMTP id QWEmaRGkJuqo for ; Mon, 14 Apr 2008 10:58:12 +0200 (CEST) Received: from [10.1.21.111] (warndt.eurodata.de [10.1.21.111]) by ed-imap.hip100.ncc.eurodata.de (Postfix) with ESMTP id 30B082BF26 for ; Mon, 14 Apr 2008 10:58:12 +0200 (CEST) X-ASG-Orig-Subj: xfs_check: out of memory Subject: xfs_check: out of memory From: Andreas Koch Reply-To: a.koch@eurodata.de To: xfs@oss.sgi.com Content-Type: text/plain Organization: eurodata GmbH & Co. KG Date: Mon, 14 Apr 2008 10:58:11 +0200 Message-Id: <1208163492.2436.11.camel@warndt.eurodata.de> Mime-Version: 1.0 X-Mailer: Evolution 2.10.3 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: smtp-gw1.ncc.eurodata.de[212.89.134.30] X-Barracuda-Start-Time: 1208163501 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.1, rules version 3.1.47752 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean X-archive-position: 15424 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: a.koch@eurodata.de Precedence: bulk X-list: xfs Hello all. I have a 2TB Partition. When i want to check the Partition, xfs_check return -> out of memory. The Memory (2GB) was realy full. How i can check this great Partition. Best Regards Andreas Koch From owner-xfs@oss.sgi.com Mon Apr 14 02:49:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 14 Apr 2008 02:50:03 -0700 (PDT) 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.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 m3E9njeR026758 for ; Mon, 14 Apr 2008 02:49:46 -0700 X-ASG-Debug-ID: 1208166623-45e5010c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from lucidpixels.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0C67C9CB94F for ; Mon, 14 Apr 2008 02:50:23 -0700 (PDT) Received: from lucidpixels.com (lucidpixels.com [75.144.35.66]) by cuda.sgi.com with ESMTP id VrBN7PetrFlUamMZ for ; Mon, 14 Apr 2008 02:50:23 -0700 (PDT) Received: by lucidpixels.com (Postfix, from userid 1001) id 358D61C000263; Mon, 14 Apr 2008 05:50:23 -0400 (EDT) Date: Mon, 14 Apr 2008 05:50:23 -0400 (EDT) From: Justin Piszcz To: Andreas Koch cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_check: out of memory Subject: Re: xfs_check: out of memory In-Reply-To: <1208163492.2436.11.camel@warndt.eurodata.de> Message-ID: References: <1208163492.2436.11.camel@warndt.eurodata.de> User-Agent: Alpine 1.10 (DEB 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Barracuda-Connect: lucidpixels.com[75.144.35.66] X-Barracuda-Start-Time: 1208166624 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.1, rules version 3.1.47755 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15425 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jpiszcz@lucidpixels.com Precedence: bulk X-list: xfs On Mon, 14 Apr 2008, Andreas Koch wrote: > Hello all. > > I have a 2TB Partition. > > When i want to check the Partition, xfs_check return -> out of memory. > > The Memory (2GB) was realy full. > > How i can check this great Partition. > > Best Regards > > Andreas Koch > > What about xfs_repair or xfs_repair -n ? From owner-xfs@oss.sgi.com Mon Apr 14 17:33:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 14 Apr 2008 17:33:32 -0700 (PDT) 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.0 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 m3F0X7sb009736 for ; Mon, 14 Apr 2008 17:33:09 -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 KAA01305; Tue, 15 Apr 2008 10:33:35 +1000 Message-ID: <4803F7DF.50706@sgi.com> Date: Tue, 15 Apr 2008 10:33:35 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Eric Sandeen CC: Christoph Hellwig , xfs-oss Subject: Re: [PATCH V2] remove CONFIG_XFS_SECURITY References: <47819E47.4030906@sandeen.net> <47BB7774.5080401@sandeen.net> <47F985BA.7060100@sgi.com> <47FF781D.2020006@sandeen.net> <20080411160448.GA26929@infradead.org> <47FF8E2A.30900@sandeen.net> In-Reply-To: <47FF8E2A.30900@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15426 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Eric Sandeen wrote: > Christoph Hellwig wrote: >>> +#define XFS_SECURITY_STRING "security attributes, " >> This one should just be killed completely, as it's not an optional >> feature anymore. >> > > My only concern is that if people are used to seeing it, they'll assume > that somehow xfs now doesn't support it now, or was built without it, or ... > > *shrug* > > -Eric Yeah, I kind of see your point there. I think I'd prefer to keep it too. --Tim From owner-xfs@oss.sgi.com Mon Apr 14 20:20:31 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 14 Apr 2008 20:20:52 -0700 (PDT) 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_23, J_CHICKENPOX_34,J_CHICKENPOX_52,J_CHICKENPOX_54,J_CHICKENPOX_56, J_CHICKENPOX_61,J_CHICKENPOX_64,J_CHICKENPOX_66 autolearn=no version=3.3.0-r574664 Received: from relay.sgi.com (relay1.corp.sgi.com [192.26.58.214]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m3F3KUrC026108 for ; Mon, 14 Apr 2008 20:20:31 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by relay1.corp.sgi.com (Postfix) with ESMTP id D27B28F8057 for ; Mon, 14 Apr 2008 20:21:04 -0700 (PDT) Received: from itchy (xaiki@itchy.melbourne.sgi.com [134.14.55.96]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3F3L1jm443889 for ; Tue, 15 Apr 2008 13:21:02 +1000 (AEST) From: Niv Sardi To: xfs@oss.sgi.com Subject: [Jens Reinsberger] Bug#476181: linux-image-2.6.22-3-vserver-k7: Oops (NULL pointer dereference), XFS fs related Date: Tue, 15 Apr 2008 10:58:58 +1000 User-Agent: Gnus/5.110007 (No Gnus v0.7) Emacs/23.0.60 (i486-pc-linux-gnu) Received: from kraftwerk.corp.sgi.com (kraftwerk.corp.sgi.com [198.149.32.17]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3F0xAsT133598808 for ; Tue, 15 Apr 2008 10:59:11 +1000 (AEST) Received: (from majordom@localhost) by kraftwerk.corp.sgi.com (8.12.9/8.11.4/ils-2.0) id m3F0x78T25970032; Mon, 14 Apr 2008 17:59:07 -0700 (PDT) mail_from (owner-xfs-dev@kraftwerk.corp.sgi.com) Received: from relay.sgi.com (netops-testserver-3.corp.sgi.com [192.26.57.72]) by kraftwerk.corp.sgi.com (8.12.9/8.11.4/ils-2.0) with ESMTP id m3F0x71U25967573 for ; Mon, 14 Apr 2008 17:59:07 -0700 (PDT) mail_from (xaiki@cxhome.ath.cx) Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by netops-testserver-3.corp.sgi.com (Postfix) with ESMTP id 0B82E9088F for ; Mon, 14 Apr 2008 17:59:03 -0700 (PDT) Received: from itchy (xaiki@itchy.melbourne.sgi.com [134.14.55.96]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3F0wxjm441742 for ; Tue, 15 Apr 2008 10:59:00 +1000 (AEST) Precedence: bulk Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15427 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@debian.org Precedence: bulk X-list: xfs --=-=-= This was reported to the Debian BTS[0], Does anybody of you remember an issue like this that we might have fixed allready (this is 2.6.22) ? if not, it looks like a bug. Cheers. [0] http://bugs.debian.org/47618 --=-=-= Content-Type: message/rfc822 Content-Disposition: inline Return-Path: X-Original-To: xaiki+deb@sceen.net Delivered-To: xaiki+deb@sceen.net Received: from localhost (localhost.localdomain [127.0.0.1]) by mail.sceen.net (Postfix) with ESMTP id A56591E362 for ; Tue, 15 Apr 2008 01:13:54 +0200 (CEST) Received: from mail.sceen.net ([127.0.0.1]) by localhost (mail.sceen.net [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 23710-07 for ; Tue, 15 Apr 2008 01:13:47 +0200 (CEST) Received: from liszt.debian.org (liszt.debian.org [82.195.75.100]) by mail.sceen.net (Postfix) with ESMTP id 5D3631E2CE for ; Tue, 15 Apr 2008 01:13:47 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by liszt.debian.org (Postfix) with QMQP id 9ECB913A4F3E; Mon, 14 Apr 2008 22:42:17 +0000 (UTC) Old-Return-Path: X-Original-To: debian-kernel@lists.debian.org Delivered-To: lists-debian-kernel@liszt.debian.org Received: from rietz.debian.org (rietz.debian.org [140.211.166.43]) by liszt.debian.org (Postfix) with ESMTP id F13E013A5300; Mon, 14 Apr 2008 22:26:03 +0000 (UTC) Received: from debbugs by rietz.debian.org with local (Exim 4.63) (envelope-from ) id 1JlWy7-0004sX-3C; Mon, 14 Apr 2008 22:16:07 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#476181: linux-image-2.6.22-3-vserver-k7: Oops (NULL pointer dereference), XFS fs related Reply-To: Jens Reinsberger , 476181@bugs.debian.org Resent-From: Jens Reinsberger Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: Debian Kernel Team Resent-Date: Mon, 14 Apr 2008 22:16:03 +0000 Resent-Message-ID: X-Debian-PR-Message: report 476181 X-Debian-PR-Package: linux-image-2.6.22-3-vserver-k7 X-Debian-PR-Keywords: X-Debian-PR-Source: linux-2.6 Received: via spool by submit@bugs.debian.org id=B.120821113220162 (code B ref -1); Mon, 14 Apr 2008 22:16:03 +0000 Received: (at submit) by bugs.debian.org; 14 Apr 2008 22:12:12 +0000 X-Amavis-Spam-Status: No, score=-5.9 required=4.0 tests=BAYES_00,FORGED_RCVD_HELO, FOURLA,FVGT_m_MULTI_ODD,HAS_PACKAGE,IMPRONONCABLE_1,IMPRONONCABLE_2, MURPHY_WRONG_WORD1,MURPHY_WRONG_WORD2,PHONENUMBER autolearn=no version=3.1.4-bugs.debian.org_2005_01_02 Received: from crusoe.purzelgasse.de ([85.25.96.52] helo=crusoe.porzellan) by rietz.debian.org with esmtp (Exim 4.63) (envelope-from ) id 1JlWUS-0003Ks-Cx for submit@bugs.debian.org; Mon, 14 Apr 2008 21:45:41 +0000 Received: from jennes by crusoe.porzellan with local (Exim 4.69) (envelope-from ) id 1JlWUM-0004Uk-63; Mon, 14 Apr 2008 23:45:22 +0200 From: Jens Reinsberger To: Debian Bug Tracking System Message-ID: <20080414214522.16862.41939.reportbug@crusoe.porzellan> X-Mailer: reportbug 3.39 Date: Mon, 14 Apr 2008 23:45:22 +0200 Delivered-To: submit@bugs.debian.org Resent-Date: Mon, 14 Apr 2008 22:16:07 +0000 X-Rc-Spam: 2007-10-04_01 X-Rc-Virus: 2007-09-13_01 X-Rc-Spam: 2007-10-04_01 X-Mailing-List: archive/latest/36784 X-Loop: debian-kernel@lists.debian.org List-Id: List-URL: List-Post: List-Help: List-Subscribe: List-Unsubscribe: Precedence: list Resent-Sender: debian-kernel-request@lists.debian.org X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at sceen.net MIME-Version: 1.0 Package: linux-image-2.6.22-3-vserver-k7 Version: 2.6.22-6 Severity: important This error occured while bacula run its normal backup. It's the first time this happened. For that reason I conclude it will be difficult/impossible to reproduce this error, as bacula normally went through the backup process without any error with the very same configuration. All file systems are XFS on LVM devices. Regards, Jens -- Package-specific info: ** Version: Linux version 2.6.22-3-vserver-k7 (Debian 2.6.22-6) (maks@debian.org) (gcc version 4.1.3 20071019 (prerelease) (Debian 4.1.2-17)) #1 SMP Mon Nov 12 11:47:04 UTC 2007 ** Not tainted ** Kernel log: BUG: unable to handle kernel NULL pointer dereference at virtual address 0000004d printing eip: f8ca357d *pde = 00000000 Oops: 0000 [#1] SMP Modules linked in: nfs nfsd exportfs lockd nfs_acl sunrpc ipt_REJECT ipt_recent xt_state ipt_MASQUERADE iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack nfnetlink iptable_filter ppdev lp button ac battery tun xt_TCPMSS xt_tcpmss xt_tcpudp iptable_mangle ip_tables x_tables ppp_deflate zlib_deflate bsd_comp ppp_async ppp_generic ipv6 xfs ext2 fuse it87 hwmon_vid i2c_isa i2c_dev hisax_fcpcipnp hisax_isac hisax crc_ccitt isdn snd_intel8x0 rtc snd_ac97_codec slhc ac97_bus snd_pcm_oss snd_mixer_oss pcspkr parport_pc parport snd_pcm snd_timer snd soundcore snd_page_alloc shpchp pci_hotplug nvidia_agp i2c_nforce2 agpgart i2c_core usblp evdev ext3 jbd mbcache dm_mirror dm_snapshot dm_mod sg sr_mod cdrom ide_disk 8139cp usbhid hid generic amd74xx 8139too sym53c8xx scsi_transport_spi pdc202xx_new ide_core e100 mii sata_nv ata_generic libata scsi_mod ehci_hcd ohci_hcd usbcore thermal processor fan CPU: 0 EIP: 0060:[] Not tainted VLI EFLAGS: 00010206 (2.6.22-3-vserver-k7 #1) EIP is at xfs_iget_core+0x3f/0x5eb [xfs] eax: 00000000 ebx: 00000011 ecx: f6b80800 edx: 000001cc esi: f5c61590 edi: 00000000 ebp: f5c61594 esp: ede07cc0 ds: 007b es: 007b fs: 00d8 gs: 0033 ss: 0068 Process bacula-fd (pid: 16343[#0], ti=ede06000 task=efe88050 task.ti=ede06000) Stack: dfcd6600 c18a66bc f8ccd59b c0184878 dcceae3c e2a35e40 00000000 f6b80800 dcceae20 00000011 dcceae3c dcceae20 00000000 f6b80800 f8ca3bc0 010001cc 00000000 00000000 00000000 ede07d78 00000000 00000000 00000000 ede07d70 Call Trace: [] xfs_fs_alloc_inode+0xf/0x1c [xfs] [] alloc_inode+0xe5/0x16d [] xfs_iget+0x97/0x11f [xfs] [] xfs_dir_lookup_int+0x7d/0xd4 [xfs] [] xfs_lookup+0x52/0x78 [xfs] [] xfs_vn_lookup+0x3b/0x70 [xfs] [] do_lookup+0x1f8/0x295 [] xfs_vn_permission+0xf/0x13 [xfs] [] xfs_vn_permission+0x0/0x13 [xfs] [] permission+0x212/0x24b [] __d_lookup+0x96/0xf4 [] __link_path_walk+0x7fd/0xc72 [] permission+0x212/0x24b [] mntput_no_expire+0x11/0x68 [] link_path_walk+0xa9/0xb3 [] link_path_walk+0x44/0xb3 [] do_path_lookup+0x15a/0x175 [] getname+0x59/0x8f [] __user_walk_fd+0x2f/0x45 [] vfs_lstat_fd+0x16/0x3d [] sys_lstat64+0xf/0x23 [] filldir64+0x0/0xc5 [] sysenter_past_esp+0x6b/0xa1 ======================= Code: 1c 8b 44 24 3c 31 d2 f7 b1 1c 01 00 00 6b f2 0c 03 b1 20 01 00 00 8d 6e 04 89 e8 e8 71 2e 61 c7 8b 06 e9 c6 01 00 00 8b 44 24 40 <39> 43 3c 0f 85 b6 01 00 00 8b 54 24 3c 39 53 38 0f 85 a9 01 00 EIP: [] xfs_iget_core+0x3f/0x5eb [xfs] SS:ESP 0068:ede07cc0 ** Loaded modules: Module Size Used by nfs 226476 0 nfsd 205360 17 exportfs 5952 1 nfsd lockd 61192 3 nfs,nfsd nfs_acl 3840 2 nfs,nfsd sunrpc 159164 13 nfs,nfsd,lockd,nfs_acl ipt_REJECT 4736 3 ipt_recent 9176 2 xt_state 2752 5 ipt_MASQUERADE 3904 2 iptable_nat 7556 1 nf_nat 18348 2 ipt_MASQUERADE,iptable_nat nf_conntrack_ipv4 18124 7 iptable_nat nf_conntrack 61000 5 xt_state,ipt_MASQUERADE,iptable_nat,nf_nat,nf_conntrack_ipv4 nfnetlink 6168 3 nf_nat,nf_conntrack_ipv4,nf_conntrack iptable_filter 3264 1 ppdev 9028 0 lp 11300 0 button 8208 0 ac 5508 0 battery 10308 0 tun 11008 1 xt_TCPMSS 4992 2 xt_tcpmss 2496 2 xt_tcpudp 3392 13 iptable_mangle 3136 1 ip_tables 12708 3 iptable_nat,iptable_filter,iptable_mangle x_tables 14660 9 ipt_REJECT,ipt_recent,xt_state,ipt_MASQUERADE,iptable_nat,xt_TCPMSS,xt_tcpmss,xt_tcpudp,ip_tables ppp_deflate 6080 0 zlib_deflate 18264 1 ppp_deflate bsd_comp 5824 0 ppp_async 11456 2 ppp_generic 26580 11 ppp_deflate,bsd_comp,ppp_async ipv6 239652 54 xfs 508184 5 ext2 63880 1 fuse 42452 1 it87 18000 0 hwmon_vid 3264 1 it87 i2c_isa 4480 1 it87 i2c_dev 7492 0 hisax_fcpcipnp 11968 1 hisax_isac 8724 1 hisax_fcpcipnp hisax 440128 2 hisax_fcpcipnp,hisax_isac crc_ccitt 2432 2 ppp_async,hisax isdn 124512 5 hisax snd_intel8x0 32412 0 rtc 13144 0 snd_ac97_codec 93220 1 snd_intel8x0 slhc 6464 2 ppp_generic,isdn ac97_bus 2560 1 snd_ac97_codec snd_pcm_oss 39968 0 snd_mixer_oss 15872 1 snd_pcm_oss pcspkr 3392 0 parport_pc 34212 1 parport 34312 3 ppdev,lp,parport_pc snd_pcm 72836 3 snd_intel8x0,snd_ac97_codec,snd_pcm_oss snd_timer 21380 1 snd_pcm snd 48868 6 snd_intel8x0,snd_ac97_codec,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_timer soundcore 7840 1 snd snd_page_alloc 10376 2 snd_intel8x0,snd_pcm shpchp 31380 0 pci_hotplug 29568 1 shpchp nvidia_agp 8732 1 i2c_nforce2 6144 0 agpgart 32264 1 nvidia_agp i2c_core 24000 4 it87,i2c_isa,i2c_dev,i2c_nforce2 usblp 13632 0 evdev 9664 3 ext3 125512 3 jbd 55848 1 ext3 mbcache 8580 2 ext2,ext3 dm_mirror 21376 0 dm_snapshot 17252 0 dm_mod 53120 16 dm_mirror,dm_snapshot sg 33116 0 sr_mod 16868 0 cdrom 33184 1 sr_mod ide_disk 16832 12 8139cp 22528 0 usbhid 26144 0 hid 25792 1 usbhid generic 5124 0 [permanent] amd74xx 13788 0 [permanent] 8139too 25984 0 sym53c8xx 68756 0 scsi_transport_spi 23424 1 sym53c8xx pdc202xx_new 7488 0 [permanent] ide_core 114436 4 ide_disk,generic,amd74xx,pdc202xx_new e100 34444 0 mii 5696 3 8139cp,8139too,e100 sata_nv 18948 0 ata_generic 7876 0 libata 117232 2 sata_nv,ata_generic scsi_mod 137356 5 sg,sr_mod,sym53c8xx,scsi_transport_spi,libata ehci_hcd 31116 0 ohci_hcd 20036 0 usbcore 126088 5 usblp,usbhid,ehci_hcd,ohci_hcd thermal 13768 0 processor 31560 1 thermal fan 5124 0 ** PCI devices: 00:00.0 Host bridge [0600]: nVidia Corporation nForce2 IGP2 [10de:01e0] (rev c1) Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- SERR- Kernel driver in use: agpgart-nvidia Kernel modules: nvidia-agp 00:00.1 RAM memory [0500]: nVidia Corporation nForce2 Memory Controller 1 [10de:01eb] (rev c1) Subsystem: nVidia Corporation Unknown device [10de:0c17] Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap- 66MHz+ UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- SERR- 00:01.1 SMBus [0c05]: nVidia Corporation MCP2A SMBus [10de:0084] (rev a1) Subsystem: Giga-byte Technology Unknown device [1458:0c11] Control: I/O+ Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- SERR- Kernel driver in use: nForce2_smbus Kernel modules: i2c-nforce2 00:02.0 USB Controller [0c03]: nVidia Corporation MCP2A USB Controller [10de:0087] (rev a1) (prog-if 10 [OHCI]) Subsystem: Giga-byte Technology Unknown device [1458:5004] Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- SERR- Kernel driver in use: ohci_hcd Kernel modules: ohci-hcd 00:02.1 USB Controller [0c03]: nVidia Corporation MCP2A USB Controller [10de:0087] (rev a1) (prog-if 10 [OHCI]) Subsystem: Giga-byte Technology Unknown device [1458:5004] Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- SERR- Kernel driver in use: ohci_hcd Kernel modules: ohci-hcd 00:02.2 USB Controller [0c03]: nVidia Corporation MCP2A USB Controller [10de:0088] (rev a2) (prog-if 20 [EHCI]) Subsystem: Giga-byte Technology Unknown device [1458:5004] Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- SERR- Kernel driver in use: ehci_hcd Kernel modules: ehci-hcd 00:06.0 Multimedia audio controller [0401]: nVidia Corporation MCP2S AC'97 Audio Controller [10de:008a] (rev a1) Subsystem: Giga-byte Technology Unknown device [1458:a002] Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- SERR- Kernel driver in use: Intel ICH Kernel modules: snd-intel8x0 00:08.0 PCI bridge [0604]: nVidia Corporation MCP2A PCI Bridge [10de:008b] (rev a3) (prog-if 00 [Normal decode]) Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx- Status: Cap- 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- SERR- TAbort- Reset- FastB2B- PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn- Kernel modules: shpchp 00:09.0 IDE interface [0101]: nVidia Corporation MCP2A IDE [10de:0085] (rev a3) (prog-if 8a [Master SecP PriP]) Subsystem: Giga-byte Technology Unknown device [1458:5002] Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- SERR- Kernel driver in use: AMD_IDE Kernel modules: amd74xx 00:0b.0 IDE interface [0101]: nVidia Corporation nForce2 Serial ATA Controller [10de:008e] (rev a3) (prog-if 85 [Master SecO PriO]) Subsystem: Giga-byte Technology Unknown device [1458:b002] Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- SERR- Kernel driver in use: sata_nv Kernel modules: sata_nv 00:1e.0 PCI bridge [0604]: nVidia Corporation nForce2 AGP [10de:01e8] (rev c1) (prog-if 00 [Normal decode]) Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx- Status: Cap- 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- SERR- TAbort- Reset- FastB2B- PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn- Kernel modules: shpchp 01:06.0 Ethernet controller [0200]: Intel Corporation 82557/8/9/0/1 Ethernet Pro 100 [8086:1229] (rev 08) Subsystem: Intel Corporation EtherExpress PRO/100+ Management Adapter [8086:000c] Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- SERR- Kernel driver in use: e100 Kernel modules: e100, eepro100 01:07.0 Mass storage controller [0180]: Promise Technology, Inc. PDC20268 (Ultra100 TX2) [105a:4d68] (rev 02) (prog-if 85) Subsystem: Promise Technology, Inc. Ultra100TX2 [105a:4d68] Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=slow >TAbort- SERR- Kernel driver in use: Promise_IDE Kernel modules: pdc202xx_new 01:08.0 SCSI storage controller [0100]: LSI Logic / Symbios Logic 53c810 [1000:0001] (rev 11) Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- SERR- TAbort- SERR- Kernel modules: hisax 01:0a.0 Network controller [0280]: AVM Audiovisuelles MKTG & Computer System GmbH A1 ISDN [Fritz] [1244:0a00] (rev 02) Subsystem: AVM Audiovisuelles MKTG & Computer System GmbH FRITZ!Card ISDN Controller [1244:0a00] Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- SERR- TAbort- SERR- Kernel driver in use: 8139too Kernel modules: 8139too, 8139cp 02:00.0 VGA compatible controller [0300]: ATI Technologies Inc Radeon RV100 QY [Radeon 7000/VE] [1002:5159] (prog-if 00 [VGA controller]) Subsystem: Hightech Information System Ltd. Unknown device [1787:2202] Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping+ SERR- FastB2B- DisINTx- Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- SERR- Kernel modules: radeonfb -- System Information: Debian Release: lenny/sid APT prefers testing APT policy: (990, 'testing'), (500, 'stable'), (1, 'unstable') Architecture: i386 (i686) Kernel: Linux 2.6.22-3-vserver-k7 (SMP w/1 CPU core) Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/bash Versions of packages linux-image-2.6.22-3-vserver-k7 depends on: ii initramfs-tools [linux-initr 0.91e tools for generating an initramfs ii module-init-tools 3.3-pre11-4 tools for managing Linux kernel mo Versions of packages linux-image-2.6.22-3-vserver-k7 recommends: ii libc6-i686 2.7-6 GNU C Library: Shared libraries [i ii util-vserver 0.30.214-6 user-space tools for Linux-VServer -- debconf information: linux-image-2.6.22-3-vserver-k7/prerm/removing-running-kernel-2.6.22-3-vserver-k7: true linux-image-2.6.22-3-vserver-k7/preinst/abort-install-2.6.22-3-vserver-k7: linux-image-2.6.22-3-vserver-k7/preinst/overwriting-modules-2.6.22-3-vserver-k7: true linux-image-2.6.22-3-vserver-k7/preinst/lilo-initrd-2.6.22-3-vserver-k7: true linux-image-2.6.22-3-vserver-k7/preinst/abort-overwrite-2.6.22-3-vserver-k7: linux-image-2.6.22-3-vserver-k7/prerm/would-invalidate-boot-loader-2.6.22-3-vserver-k7: true linux-image-2.6.22-3-vserver-k7/postinst/depmod-error-initrd-2.6.22-3-vserver-k7: false linux-image-2.6.22-3-vserver-k7/postinst/depmod-error-2.6.22-3-vserver-k7: false linux-image-2.6.22-3-vserver-k7/postinst/old-dir-initrd-link-2.6.22-3-vserver-k7: true linux-image-2.6.22-3-vserver-k7/preinst/failed-to-move-modules-2.6.22-3-vserver-k7: linux-image-2.6.22-3-vserver-k7/preinst/elilo-initrd-2.6.22-3-vserver-k7: true linux-image-2.6.22-3-vserver-k7/preinst/already-running-this-2.6.22-3-vserver-k7: linux-image-2.6.22-3-vserver-k7/postinst/create-kimage-link-2.6.22-3-vserver-k7: true linux-image-2.6.22-3-vserver-k7/preinst/initrd-2.6.22-3-vserver-k7: shared/kernel-image/really-run-bootloader: true linux-image-2.6.22-3-vserver-k7/postinst/old-system-map-link-2.6.22-3-vserver-k7: true * linux-image-2.6.22-3-vserver-k7/preinst/bootloader-initrd-2.6.22-3-vserver-k7: false linux-image-2.6.22-3-vserver-k7/postinst/old-initrd-link-2.6.22-3-vserver-k7: true linux-image-2.6.22-3-vserver-k7/postinst/bootloader-error-2.6.22-3-vserver-k7: linux-image-2.6.22-3-vserver-k7/postinst/bootloader-test-error-2.6.22-3-vserver-k7: linux-image-2.6.22-3-vserver-k7/postinst/kimage-is-a-directory: linux-image-2.6.22-3-vserver-k7/preinst/lilo-has-ramdisk: -- To UNSUBSCRIBE, email to debian-kernel-REQUEST@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org --=-=-= -- Niv Sardi --=-=-=-- From owner-xfs@oss.sgi.com Mon Apr 14 20:32:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 14 Apr 2008 20:32:47 -0700 (PDT) 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 relay.sgi.com (relay1.corp.sgi.com [192.26.58.214]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m3F3WRRo027188 for ; Mon, 14 Apr 2008 20:32:29 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by relay1.corp.sgi.com (Postfix) with ESMTP id 753DE8F8059 for ; Mon, 14 Apr 2008 20:33:06 -0700 (PDT) Received: from itchy (xaiki@itchy.melbourne.sgi.com [134.14.55.96]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3F3X2jm444546 for ; Tue, 15 Apr 2008 13:33:03 +1000 (AEST) From: Niv Sardi To: xfs@oss.sgi.com Subject: Re: [Jens Reinsberger] Bug#476181: linux-image-2.6.22-3-vserver-k7: Oops (NULL pointer dereference), XFS fs related References: Date: Tue, 15 Apr 2008 13:33:02 +1000 In-Reply-To: (Niv Sardi's message of "Tue, 15 Apr 2008 10:58:58 +1000") Message-ID: User-Agent: Gnus/5.110009 (No Gnus v0.9) Emacs/23.0.60 (i486-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15428 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@debian.org Precedence: bulk X-list: xfs Niv Sardi writes: > This was reported to the Debian BTS[0], Does anybody of you remember an [...] > [0] http://bugs.debian.org/47618 [0] http://bugs.debian.org/476181 obviously =) -- Niv Sardi From owner-xfs@oss.sgi.com Mon Apr 14 20:48:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 14 Apr 2008 20:48:48 -0700 (PDT) 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.0 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 m3F3mNIr028756 for ; Mon, 14 Apr 2008 20:48:25 -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 NAA05039; Tue, 15 Apr 2008 13:48:58 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1116) id C1DAB58C4C15; Tue, 15 Apr 2008 13:48:58 +1000 (EST) To: xfs@oss.sgi.com, sgi.bugs.xfs@engr.sgi.com Subject: TAKE 980310 - remove CONFIG_XFS_SECURITY Message-Id: <20080415034858.C1DAB58C4C15@chook.melbourne.sgi.com> Date: Tue, 15 Apr 2008 13:48:58 +1000 (EST) From: tes@sgi.com (Tim Shimmin) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15429 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Remove CONFIG_XFS_SECURITY. There is no point to the CONFIG_XFS_SECURITY option; it disables the ability to set security attributes at runtime, but it does not actually slim down or remove any code for runtime. Just remove it and always allow security attributes to be set. Signed-off-by: Eric Sandeen Date: Tue Apr 15 13:47:37 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/tes/2.6.x-xfs-quilt Inspected by: sandeen@sandeen.net The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30877a fs/xfs/xfs_attr.c - 1.147 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_attr.c.diff?r1=text&tr1=1.147&r2=text&tr2=1.146&f=h - remove CONFIG_XFS_SECURITY fs/xfs/linux-2.6/xfs_super.h - 1.77 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.h.diff?r1=text&tr1=1.77&r2=text&tr2=1.76&f=h - remove CONFIG_XFS_SECURITY fs/xfs/Kconfig - 1.9 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/Kconfig.diff?r1=text&tr1=1.9&r2=text&tr2=1.8&f=h - remove CONFIG_XFS_SECURITY From owner-xfs@oss.sgi.com Mon Apr 14 21:46:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 14 Apr 2008 21:46:38 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, J_CHICKENPOX_63,J_CHICKENPOX_64,J_CHICKENPOX_66 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 m3F4k9rT001092 for ; Mon, 14 Apr 2008 21:46:11 -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 OAA06073; Tue, 15 Apr 2008 14:46:44 +1000 Date: Tue, 15 Apr 2008 14:47:29 +1000 To: "xfs@oss.sgi.com" Subject: [REVIEW] tweak xfs_repair's memory usage limits From: "Barry Naujok" Organization: SGI Content-Type: multipart/mixed; boundary=----------nuEYvAlzxPzV5q6YnEGIv6 MIME-Version: 1.0 Message-ID: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15430 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs ------------nuEYvAlzxPzV5q6YnEGIv6 Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 Content-Transfer-Encoding: Quoted-Printable This patch introduces two changes: - easier to specify desired maximum memory usage - use ulimits I've added a -m option to xfs_repair for the user to specify the maximum memory repair should run with. This obsoletes the "-o bhash=3D" option. Also, I've added a call to getrlimit() to get the process's virtual address limit that can be used. If it's not there, sets it to LONG_MAX bytes (ie. half the possible address space). This should also address the reported problem of 32-bit systems with more than 4GB of RAM and xfs_repair trying to use more than 4GB. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D xfsprogs/man/man8/xfs_repair.8 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- a/xfsprogs/man/man8/xfs_repair.8 2008-04-15 14:41:15.000000000 +1000 +++ b/xfsprogs/man/man8/xfs_repair.8 2008-04-15 14:30:39.725643493 +1000 @@ -6,6 +6,9 @@ xfs_repair \- repair an XFS filesystem [ .B \-dfLnPv ] [ +.B \-m +.I maxmem +] [ .B \-o .I subopt\c [\c @@ -85,6 +88,18 @@ No modify mode. Specifies that .B xfs_repair should not modify the filesystem but should only scan the filesystem and indicate what repairs would have been made. +.TP +.BI \-m " maxmem" +Specifies the approximate maximum amount of memory, in megabytes, to use= =20=20 for +.BR xfs_repair . +.B xfs_repair +has its own internal block cache which will scale out up to the lesser of= =20=20 the +process's virtual address limit or about 75% of the system's physical RAM. +This option overrides these limits. +.IP +.B NOTE: +These memory limits are only approximate and may use more than the=20=20 specified +limit. .HP .B \-o .I subopt\c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D xfsprogs/repair/xfs_repair.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- a/xfsprogs/repair/xfs_repair.c 2008-04-15 14:41:15.000000000 +1000 +++ b/xfsprogs/repair/xfs_repair.c 2008-04-15 14:40:10.504301019 +1000 @@ -17,6 +17,7 @@ */ #include +#include #include "avl.h" #include "avl64.h" #include "globals.h" @@ -66,12 +67,13 @@ char *o_opts[] =3D { static int ihash_option_used; static int bhash_option_used; +static long max_mem_specified; /* in megabytes */ static void usage(void) { do_warn( -_("Usage: %s [-nLvV] [-o subopt[=3Dvalue]] [-l logdev] [-r rtdev]=20=20 devname\n"), +_("Usage: %s [-nLvV] [-m memMB] [-o subopt[=3Dvalue]] [-l logdev] [-r=20= =20 rtdev] devname\n"), progname); exit(1); } @@ -191,7 +193,7 @@ process_args(int argc, char **argv) * XXX have to add suboption processing here * attributes, quotas, nlinks, aligned_inos, sb_fbits */ - while ((c =3D getopt(argc, argv, "o:fl:r:LnDvVdPMt:")) !=3D EOF) { + while ((c =3D getopt(argc, argv, "o:fl:m:r:LnDvVdPt:")) !=3D EOF) { switch (c) { case 'D': dumpcore =3D 1; @@ -222,6 +224,9 @@ process_args(int argc, char **argv) ihash_option_used =3D 1; break; case BHASH_SIZE: + if (max_mem_specified) + do_abort( + _("-o bhash option cannot be used with -m option\n")); libxfs_bhash_size =3D (int) strtol(val, 0, 0); bhash_option_used =3D 1; break; @@ -245,6 +250,12 @@ process_args(int argc, char **argv) case 'f': isa_file =3D 1; break; + case 'm': + if (bhash_option_used) + do_abort(_("-m option cannot be used with " + "-o bhash option\n")); + max_mem_specified =3D strtol(optarg, 0, 0); + break; case 'L': zap_log =3D 1; break; @@ -550,9 +561,10 @@ main(int argc, char **argv) * Calculations are done in kilobyte units. */ - if (!bhash_option_used) { + if (!bhash_option_used || max_mem_specified) { unsigned long mem_used; - unsigned long phys_mem; + unsigned long max_mem; + struct rlimit rlim; libxfs_icache_purge(); libxfs_bcache_purge(); @@ -560,27 +572,46 @@ main(int argc, char **argv) cache_destroy(libxfs_bcache); mem_used =3D (mp->m_sb.sb_icount >> (10 - 2)) + - (mp->m_sb.sb_dblocks >> (10 + 1)); - phys_mem =3D libxfs_physmem() * 3 / 4; + (mp->m_sb.sb_dblocks >> (10 + 1)) + + 50000; /* rough estimate of 50MB overhead */ + max_mem =3D max_mem_specified ? max_mem_specified * 1024 : + libxfs_physmem() * 3 / 4; + + if (getrlimit(RLIMIT_AS, &rlim) !=3D -1 && + rlim.rlim_cur !=3D RLIM_INFINITY) { + rlim.rlim_cur =3D rlim.rlim_max; + setrlimit(RLIMIT_AS, &rlim); + /* use approximately 80% of rlimit to avoid overrun */ + max_mem =3D MIN(max_mem, rlim.rlim_cur / 1280); + } else + max_mem =3D MIN(max_mem, (LONG_MAX >> 10) + 1); if (verbose > 1) - do_log(_(" - icount =3D %llu, imem =3D %lu, " - "dblock =3D %llu, dmem =3D %lu\n"), - mp->m_sb.sb_icount, mp->m_sb.sb_icount >> (10 - 2), - mp->m_sb.sb_dblocks, mp->m_sb.sb_dblocks >> (10 + 1)); + do_log(_(" - max_mem =3D %lu, icount =3D %llu, " + "imem =3D %llu, dblock =3D %llu, dmem =3D %llu\n"), + max_mem, mp->m_sb.sb_icount, + mp->m_sb.sb_icount >> (10 - 2), + mp->m_sb.sb_dblocks, + mp->m_sb.sb_dblocks >> (10 + 1)); - if (phys_mem <=3D mem_used) { + if (max_mem <=3D mem_used) { /* * Turn off prefetch and minimise libxfs cache if * physical memory is deemed insufficient */ + if (max_mem_specified) + do_abort(_("Required memory for repair is " + "greater that the maximum specified " + "with the -m option. Please increase " + "it to at least %lu.\n"), + mem_used / 1024); do_prefetch =3D 0; libxfs_bhash_size =3D 64; } else { - phys_mem -=3D mem_used; - if (phys_mem >=3D (1 << 30)) - phys_mem =3D 1 << 30; - libxfs_bhash_size =3D phys_mem / (HASH_CACHE_RATIO * + max_mem -=3D mem_used; + if (max_mem >=3D (1 << 30)) + max_mem =3D 1 << 30; + libxfs_bhash_size =3D max_mem / (HASH_CACHE_RATIO * (mp->m_inode_cluster_size >> 10)); if (libxfs_bhash_size < 512) libxfs_bhash_size =3D 512; ------------nuEYvAlzxPzV5q6YnEGIv6 Content-Disposition: attachment; filename=repair_memory_tweak.patch Content-Type: text/x-patch; name=repair_memory_tweak.patch Content-Transfer-Encoding: Quoted-Printable =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D xfsprogs/man/man8/xfs_repair.8 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- a/xfsprogs/man/man8/xfs_repair.8 2008-04-15 14:41:15.000000000 +1000 +++ b/xfsprogs/man/man8/xfs_repair.8 2008-04-15 14:30:39.725643493 +1000 @@ -6,6 +6,9 @@ xfs_repair \- repair an XFS filesystem [ .B \-dfLnPv ] [ +.B \-m +.I maxmem +] [ .B \-o .I subopt\c [\c @@ -85,6 +88,18 @@ No modify mode. Specifies that .B xfs_repair should not modify the filesystem but should only scan the filesystem and indicate what repairs would have been made. +.TP +.BI \-m " maxmem" +Specifies the approximate maximum amount of memory, in megabytes, to use f= or +.BR xfs_repair . +.B xfs_repair +has its own internal block cache which will scale out up to the lesser of = the +process's virtual address limit or about 75% of the system's physical RAM. +This option overrides these limits. +.IP +.B NOTE: +These memory limits are only approximate and may use more than the specifi= ed +limit. .HP .B \-o .I subopt\c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D xfsprogs/repair/xfs_repair.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- a/xfsprogs/repair/xfs_repair.c 2008-04-15 14:41:15.000000000 +1000 +++ b/xfsprogs/repair/xfs_repair.c 2008-04-15 14:40:10.504301019 +1000 @@ -17,6 +17,7 @@ */ =20 #include +#include #include "avl.h" #include "avl64.h" #include "globals.h" @@ -66,12 +67,13 @@ char *o_opts[] =3D { =20 static int ihash_option_used; static int bhash_option_used; +static long max_mem_specified; /* in megabytes */ =20 static void usage(void) { do_warn( -_("Usage: %s [-nLvV] [-o subopt[=3Dvalue]] [-l logdev] [-r rtdev] devname\= n"), +_("Usage: %s [-nLvV] [-m memMB] [-o subopt[=3Dvalue]] [-l logdev] [-r rtde= v] devname\n"), progname); exit(1); } @@ -191,7 +193,7 @@ process_args(int argc, char **argv) * XXX have to add suboption processing here * attributes, quotas, nlinks, aligned_inos, sb_fbits */ - while ((c =3D getopt(argc, argv, "o:fl:r:LnDvVdPMt:")) !=3D EOF) { + while ((c =3D getopt(argc, argv, "o:fl:m:r:LnDvVdPt:")) !=3D EOF) { switch (c) { case 'D': dumpcore =3D 1; @@ -222,6 +224,9 @@ process_args(int argc, char **argv) ihash_option_used =3D 1; break; case BHASH_SIZE: + if (max_mem_specified) + do_abort( + _("-o bhash option cannot be used with -m option\n")); libxfs_bhash_size =3D (int) strtol(val, 0, 0); bhash_option_used =3D 1; break; @@ -245,6 +250,12 @@ process_args(int argc, char **argv) case 'f': isa_file =3D 1; break; + case 'm': + if (bhash_option_used) + do_abort(_("-m option cannot be used with " + "-o bhash option\n")); + max_mem_specified =3D strtol(optarg, 0, 0); + break; case 'L': zap_log =3D 1; break; @@ -550,9 +561,10 @@ main(int argc, char **argv) * Calculations are done in kilobyte units. */ =20 - if (!bhash_option_used) { + if (!bhash_option_used || max_mem_specified) { unsigned long mem_used; - unsigned long phys_mem; + unsigned long max_mem; + struct rlimit rlim; =20 libxfs_icache_purge(); libxfs_bcache_purge(); @@ -560,27 +572,46 @@ main(int argc, char **argv) cache_destroy(libxfs_bcache); =20 mem_used =3D (mp->m_sb.sb_icount >> (10 - 2)) + - (mp->m_sb.sb_dblocks >> (10 + 1)); - phys_mem =3D libxfs_physmem() * 3 / 4; + (mp->m_sb.sb_dblocks >> (10 + 1)) + + 50000; /* rough estimate of 50MB overhead */ + max_mem =3D max_mem_specified ? max_mem_specified * 1024 : + libxfs_physmem() * 3 / 4; + + if (getrlimit(RLIMIT_AS, &rlim) !=3D -1 && + rlim.rlim_cur !=3D RLIM_INFINITY) { + rlim.rlim_cur =3D rlim.rlim_max; + setrlimit(RLIMIT_AS, &rlim); + /* use approximately 80% of rlimit to avoid overrun */ + max_mem =3D MIN(max_mem, rlim.rlim_cur / 1280); + } else + max_mem =3D MIN(max_mem, (LONG_MAX >> 10) + 1); =20 if (verbose > 1) - do_log(_(" - icount =3D %llu, imem =3D %lu, " - "dblock =3D %llu, dmem =3D %lu\n"), - mp->m_sb.sb_icount, mp->m_sb.sb_icount >> (10 - 2), - mp->m_sb.sb_dblocks, mp->m_sb.sb_dblocks >> (10 + 1)); + do_log(_(" - max_mem =3D %lu, icount =3D %llu, " + "imem =3D %llu, dblock =3D %llu, dmem =3D %llu\n"), + max_mem, mp->m_sb.sb_icount, + mp->m_sb.sb_icount >> (10 - 2), + mp->m_sb.sb_dblocks, + mp->m_sb.sb_dblocks >> (10 + 1)); =20 - if (phys_mem <=3D mem_used) { + if (max_mem <=3D mem_used) { /* * Turn off prefetch and minimise libxfs cache if * physical memory is deemed insufficient */ + if (max_mem_specified) + do_abort(_("Required memory for repair is " + "greater that the maximum specified " + "with the -m option. Please increase " + "it to at least %lu.\n"), + mem_used / 1024); do_prefetch =3D 0; libxfs_bhash_size =3D 64; } else { - phys_mem -=3D mem_used; - if (phys_mem >=3D (1 << 30)) - phys_mem =3D 1 << 30; - libxfs_bhash_size =3D phys_mem / (HASH_CACHE_RATIO * + max_mem -=3D mem_used; + if (max_mem >=3D (1 << 30)) + max_mem =3D 1 << 30; + libxfs_bhash_size =3D max_mem / (HASH_CACHE_RATIO * (mp->m_inode_cluster_size >> 10)); if (libxfs_bhash_size < 512) libxfs_bhash_size =3D 512; ------------nuEYvAlzxPzV5q6YnEGIv6-- From owner-xfs@oss.sgi.com Mon Apr 14 22:19:05 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 14 Apr 2008 22:19:30 -0700 (PDT) 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.3 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 m3F5J2UG004228 for ; Mon, 14 Apr 2008 22:19:04 -0700 Received: from linuxbuild.melbourne.sgi.com (linuxbuild.melbourne.sgi.com [134.14.54.115]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA06680; Tue, 15 Apr 2008 15:19:37 +1000 From: donaldd@sgi.com Received: by linuxbuild.melbourne.sgi.com (Postfix, from userid 16365) id 4D85635CE07B; Tue, 15 Apr 2008 15:19:37 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: TAKE 971046 - Remove unused HAVE_SPLICE macro Message-Id: <20080415051937.4D85635CE07B@linuxbuild.melbourne.sgi.com> Date: Tue, 15 Apr 2008 15:19:37 +1000 (EST) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15431 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: donaldd@sgi.com Precedence: bulk X-list: xfs Remove unused HAVE_SPLICE macro. HAVE_SPLICE was part of the infrastructure for building 2.4 and 2.6 kernels out of the same tree. Now we don't build 2.4 kernels this Date: Tue Apr 15 15:18:53 AEST 2008 Workarea: linuxbuild.melbourne.sgi.com:/home/donaldd/isms/2.6.x-xfs Inspected by: hch The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30878a fs/xfs/xfs.h - 1.52 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs.h.diff?r1=text&tr1=1.52&r2=text&tr2=1.51&f=h - Remove unused HAVE_SPLICE macro. From owner-xfs@oss.sgi.com Mon Apr 14 22:43:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 14 Apr 2008 22:43:33 -0700 (PDT) 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 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 m3F5h8ct006500 for ; Mon, 14 Apr 2008 22:43:10 -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 PAA06963; Tue, 15 Apr 2008 15:43:43 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 4C5AC58C4C15; Tue, 15 Apr 2008 15:43:43 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 979468 - Add support for MDP in libdisk Message-Id: <20080415054343.4C5AC58C4C15@chook.melbourne.sgi.com> Date: Tue, 15 Apr 2008 15:43:43 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15432 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Date: Tue Apr 15 15:42:58 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/xfs-cmds Inspected by: hubskml@free.fr The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:30879a xfsprogs/libdisk/md.c - 1.20 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/libdisk/md.c.diff?r1=text&tr1=1.20&r2=text&tr2=1.19&f=h xfsprogs/libdisk/md.h - 1.5 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/libdisk/md.h.diff?r1=text&tr1=1.5&r2=text&tr2=1.4&f=h - Add support for MDP in libdisk From owner-xfs@oss.sgi.com Tue Apr 15 00:01:32 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 15 Apr 2008 00:02:02 -0700 (PDT) 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.0 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 m3F71THC016680 for ; Tue, 15 Apr 2008 00:01:31 -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 RAA08527; Tue, 15 Apr 2008 17:02:05 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 28F8F58C4C15; Tue, 15 Apr 2008 17:02:05 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 907752 - Support the -p option in fsck.xfs Message-Id: <20080415070205.28F8F58C4C15@chook.melbourne.sgi.com> Date: Tue, 15 Apr 2008 17:02:05 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15433 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Date: Tue Apr 15 17:01:29 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/xfs-cmds Inspected by: vapier@gentoo.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:30881a xfsprogs/fsck/xfs_fsck.sh - 1.4 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/fsck/xfs_fsck.sh.diff?r1=text&tr1=1.4&r2=text&tr2=1.3&f=h - Support the -p option in fsck.xfs From owner-xfs@oss.sgi.com Tue Apr 15 00:23:28 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 15 Apr 2008 00:24:26 -0700 (PDT) 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 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 m3F7NNhU023569 for ; Tue, 15 Apr 2008 00:23:27 -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 RAA09019; Tue, 15 Apr 2008 17:23:59 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 5551358C4C15; Tue, 15 Apr 2008 17:23:59 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 907752 - Minor fix up in xfs_db man page Message-Id: <20080415072359.5551358C4C15@chook.melbourne.sgi.com> Date: Tue, 15 Apr 2008 17:23:59 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15434 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Date: Tue Apr 15 17:23:38 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/xfs-cmds Inspected by: u-kusaka@wm.jp.nec.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:30882a xfsprogs/man/man8/xfs_db.8 - 1.17 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/man/man8/xfs_db.8.diff?r1=text&tr1=1.17&r2=text&tr2=1.16&f=h - Minor fixup in man page (uuid command) From owner-xfs@oss.sgi.com Tue Apr 15 01:08:29 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 15 Apr 2008 01:08:49 -0700 (PDT) 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 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 m3F88QcS028136 for ; Tue, 15 Apr 2008 01:08:28 -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 SAA09994; Tue, 15 Apr 2008 18:09:00 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id C64A958C4C15; Tue, 15 Apr 2008 18:09:00 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 980319 - Remove sysv3 legacy functions Message-Id: <20080415080900.C64A958C4C15@chook.melbourne.sgi.com> Date: Tue, 15 Apr 2008 18:09:00 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15435 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Date: Tue Apr 15 18:08:38 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/xcmds-clean Inspected by: nkukard@lbsd.net The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:30883a xfsprogs/mkfs/proto.c - 1.20 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/mkfs/proto.c.diff?r1=text&tr1=1.20&r2=text&tr2=1.19&f=h xfsprogs/mkfs/xfs_mkfs.c - 1.89 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/mkfs/xfs_mkfs.c.diff?r1=text&tr1=1.89&r2=text&tr2=1.88&f=h xfsprogs/rtcp/xfs_rtcp.c - 1.15 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/rtcp/xfs_rtcp.c.diff?r1=text&tr1=1.15&r2=text&tr2=1.14&f=h xfsprogs/logprint/log_misc.c - 1.23 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/logprint/log_misc.c.diff?r1=text&tr1=1.23&r2=text&tr2=1.22&f=h xfsprogs/growfs/xfs_growfs.c - 1.29 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/growfs/xfs_growfs.c.diff?r1=text&tr1=1.29&r2=text&tr2=1.28&f=h xfsprogs/repair/phase6.c - 1.42 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/phase6.c.diff?r1=text&tr1=1.42&r2=text&tr2=1.41&f=h xfsprogs/repair/incore_bmc.c - 1.8 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/incore_bmc.c.diff?r1=text&tr1=1.8&r2=text&tr2=1.7&f=h xfsprogs/repair/dir2.c - 1.25 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/dir2.c.diff?r1=text&tr1=1.25&r2=text&tr2=1.24&f=h xfsprogs/repair/sb.c - 1.21 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/sb.c.diff?r1=text&tr1=1.21&r2=text&tr2=1.20&f=h xfsprogs/repair/dir.c - 1.22 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/dir.c.diff?r1=text&tr1=1.22&r2=text&tr2=1.21&f=h xfsprogs/repair/phase4.c - 1.25 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/phase4.c.diff?r1=text&tr1=1.25&r2=text&tr2=1.24&f=h xfsprogs/repair/dinode.c - 1.29 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/dinode.c.diff?r1=text&tr1=1.29&r2=text&tr2=1.28&f=h xfsprogs/repair/phase5.c - 1.16 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/phase5.c.diff?r1=text&tr1=1.16&r2=text&tr2=1.15&f=h xfsprogs/repair/agheader.c - 1.16 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/agheader.c.diff?r1=text&tr1=1.16&r2=text&tr2=1.15&f=h xfsprogs/repair/rt.c - 1.10 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/rt.c.diff?r1=text&tr1=1.10&r2=text&tr2=1.9&f=h xfsprogs/repair/globals.h - 1.22 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/globals.h.diff?r1=text&tr1=1.22&r2=text&tr2=1.21&f=h xfsprogs/repair/incore.c - 1.14 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/incore.c.diff?r1=text&tr1=1.14&r2=text&tr2=1.13&f=h xfsprogs/repair/incore_ino.c - 1.18 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/incore_ino.c.diff?r1=text&tr1=1.18&r2=text&tr2=1.17&f=h xfsprogs/repair/attr_repair.c - 1.21 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/attr_repair.c.diff?r1=text&tr1=1.21&r2=text&tr2=1.20&f=h xfsprogs/libhandle/jdm.c - 1.15 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/libhandle/jdm.c.diff?r1=text&tr1=1.15&r2=text&tr2=1.14&f=h xfsprogs/io/bmap.c - 1.16 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/io/bmap.c.diff?r1=text&tr1=1.16&r2=text&tr2=1.15&f=h - Remove sysv3 legacy functions xfsprogs/copy/xfs_copy.c - 1.17 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/copy/xfs_copy.c.diff?r1=text&tr1=1.17&r2=text&tr2=1.16&f=h - nRemove sysv3 legacy functions From owner-xfs@oss.sgi.com Tue Apr 15 01:51:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 15 Apr 2008 01:51:36 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, J_CHICKENPOX_64,J_CHICKENPOX_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 m3F8pASN031946 for ; Tue, 15 Apr 2008 01:51:13 -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 SAA10964 for ; Tue, 15 Apr 2008 18:51:49 +1000 Date: Tue, 15 Apr 2008 18:53:37 +1000 To: "xfs@oss.sgi.com" Subject: Re: [REVIEW #2] bad_features2 fix and lazy-counter togging in xfs_admin From: "Barry Naujok" Organization: SGI Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: Message-ID: In-Reply-To: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m3F8pGSN031958 X-archive-position: 15436 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Mon, 25 Feb 2008 13:46:03 +1100, Barry Naujok wrote: > As per the previous reviews with comments applied. Ping on xfs_admin lazy-counter support? As a reminder: xfs_admin -c 0|1 to turn on/off lazy counters in a filesystem. > I have swapped the order of the patches - bad_features2.patch first, > then convert.patch. > > I've added man page updates for xfs_admin and xfs_repair for the > lazy-counter conversion. > > Barry. --- xfsprogs/db/xfs_admin.sh | 42 ++++++++++++++++++++++++++++------------- xfsprogs/man/man8/xfs_admin.8 | 8 +++++++ xfsprogs/man/man8/xfs_repair.8 | 8 +++++++ xfsprogs/repair/globals.h | 2 + xfsprogs/repair/phase1.c | 26 +++++++++++++++++++++++++ xfsprogs/repair/xfs_repair.c | 38 +++++++++++++++++++++++++++++++------ 6 files changed, 105 insertions(+), 19 deletions(-) Index: ci/xfsprogs/db/xfs_admin.sh =================================================================== --- ci.orig/xfsprogs/db/xfs_admin.sh +++ ci/xfsprogs/db/xfs_admin.sh @@ -3,20 +3,23 @@ # Copyright (c) 2000-2001 Silicon Graphics, Inc. All Rights Reserved. # -OPTS="" -USAGE="Usage: xfs_admin [-efjluV] [-L label] [-U uuid] special" +status=0 +DB_OPTS="" +REPAIR_OPTS="" +USAGE="Usage: xfs_admin [-efjluV] [-c 0|1] [-L label] [-U uuid] special" -while getopts "efjluL:U:V" c +while getopts "efjluc:L:U:V" c do case $c in - e) OPTS=$OPTS" -c 'version extflg'";; - f) OPTS=$OPTS" -f";; - j) OPTS=$OPTS" -c 'version log2'";; - l) OPTS=$OPTS" -r -c label";; - L) OPTS=$OPTS" -c 'label "$OPTARG"'";; - u) OPTS=$OPTS" -r -c uuid";; - U) OPTS=$OPTS" -c 'uuid "$OPTARG"'";; - V) OPTS=$OPTS" -V";; + c) REPAIR_OPTS=$REPAIR_OPTS" -c lazycount="$OPTARG;; + e) DB_OPTS=$DB_OPTS" -c 'version extflg'";; + f) DB_OPTS=$DB_OPTS" -f";; + j) DB_OPTS=$DB_OPTS" -c 'version log2'";; + l) DB_OPTS=$DB_OPTS" -r -c label";; + L) DB_OPTS=$DB_OPTS" -c 'label "$OPTARG"'";; + u) DB_OPTS=$DB_OPTS" -r -c uuid";; + U) DB_OPTS=$DB_OPTS" -c 'uuid "$OPTARG"'";; + V) DB_OPTS=$DB_OPTS" -V";; \?) echo $USAGE 1>&2 exit 2 ;; @@ -25,8 +28,21 @@ done set -- extra $@ shift $OPTIND case $# in - 1) eval xfs_db -x -p xfs_admin $OPTS $1 - status=$? + 1) if [ -n "$DB_OPTS" ] + then + eval xfs_db -x -p xfs_admin $DB_OPTS $1 + status=$? + fi + if [ -n "$REPAIR_OPTS" ] + then + # Hide normal repair output which is sent to stderr + # assuming the filesystem is fine when a user is + # running xfs_admin. + # Ideally, we need to improve the output behaviour + # of repair for this purpose (say a "quiet" mode). + eval xfs_repair $REPAIR_OPTS $1 2> /dev/null + status=`expr $? + $status` + fi ;; *) echo $USAGE 1>&2 exit 2 Index: ci/xfsprogs/man/man8/xfs_admin.8 =================================================================== --- ci.orig/xfsprogs/man/man8/xfs_admin.8 +++ ci/xfsprogs/man/man8/xfs_admin.8 @@ -6,6 +6,8 @@ xfs_admin \- change parameters of an XFS [ .B \-eflu ] [ +.BR "\-c 0" | 1 +] [ .B \-L .I label ] [ @@ -53,6 +55,11 @@ Print the current filesystem label. .B \-u Print the current filesystem UUID (Universally Unique IDentifier). .TP +.BR "\-c 0" | 1 +Enable (1) or disable (0) lazy-counters in the filesystem. +This operation may take quite a bit of time on large filesystems as the +entire filesystem needs to be scanned when this option is changed. +.TP .BI \-L " label" Set the filesystem label to .IR label . @@ -90,4 +97,5 @@ rather than its block special device nam .BR mount (8), .BR xfs_db (8), .BR xfs_growfs (8), +.BR xfs_repair (8), .BR xfs (5). Index: ci/xfsprogs/man/man8/xfs_repair.8 =================================================================== --- ci.orig/xfsprogs/man/man8/xfs_repair.8 +++ ci/xfsprogs/man/man8/xfs_repair.8 @@ -6,6 +6,8 @@ xfs_repair \- repair an XFS filesystem [ .B \-dfLnPv ] [ +.BI \-c " subopt" = value +] [ .B \-o .I subopt\c [\c @@ -85,6 +87,11 @@ No modify mode. Specifies that .B xfs_repair should not modify the filesystem but should only scan the filesystem and indicate what repairs would have been made. +.TP +.BI \-c " subopt" = value +Change filesystem parameters. Refer to +.BR xfs_admin (8) +for information on changing filesytem parameters. .HP .B \-o .I subopt\c @@ -517,6 +524,7 @@ fixed and/or improved. .BR dd (1), .BR mkfs.xfs (8), .BR umount (8), +.BR xfs_admin (8), .BR xfs_check (8), .BR xfs_metadump (8), .BR xfs (5). Index: ci/xfsprogs/repair/globals.h =================================================================== --- ci.orig/xfsprogs/repair/globals.h +++ ci/xfsprogs/repair/globals.h @@ -116,6 +116,8 @@ EXTERN char *log_name; /* Name of log d EXTERN int log_spec; /* Log dev specified as option */ EXTERN char *rt_name; /* Name of realtime device */ EXTERN int rt_spec; /* Realtime dev specified as option */ +EXTERN int convert_lazy_count; /* Convert lazy-count mode on/off */ +EXTERN int lazy_count; /* What to set if to if converting */ /* misc status variables */ Index: ci/xfsprogs/repair/phase1.c =================================================================== --- ci.orig/xfsprogs/repair/phase1.c +++ ci/xfsprogs/repair/phase1.c @@ -105,6 +105,32 @@ phase1(xfs_mount_t *mp) do_warn(_("superblock has a features2 mismatch, correcting\n")); } + /* + * apply any version changes or conversions after the primary + * superblock has been verified or repaired + * + * Send output to stdout as do_log and everything else in repair + * is sent to stderr and there is no "quiet" option. xfs_admin + * will filter stderr but not stdout. This situation must be improved. + */ + if (convert_lazy_count) { + if (lazy_count && !xfs_sb_version_haslazysbcount(sb)) { + sb->sb_versionnum |= XFS_SB_VERSION_MOREBITSBIT; + sb->sb_features2 |= XFS_SB_VERSION2_LAZYSBCOUNTBIT; + primary_sb_modified = 1; + printf(_("Enabling lazy-counters\n")); + } else + if (!lazy_count && xfs_sb_version_haslazysbcount(sb)) { + sb->sb_features2 &= ~XFS_SB_VERSION2_LAZYSBCOUNTBIT; + printf(_("Disabling lazy-counters\n")); + primary_sb_modified = 1; + } else { + printf(_("Lazy-counters are already %s\n"), + lazy_count ? _("enabled") : _("disabled")); + exit(0); /* no conversion required, exit */ + } + } + if (primary_sb_modified) { if (!no_modify) { do_warn(_("writing modified primary superblock\n")); Index: ci/xfsprogs/repair/xfs_repair.c =================================================================== --- ci.orig/xfsprogs/repair/xfs_repair.c +++ ci/xfsprogs/repair/xfs_repair.c @@ -47,7 +47,7 @@ extern void incore_init(xfs_mount_t *); */ /* - * -o (user-supplied override options) + * -o: user-supplied override options */ char *o_opts[] = { @@ -64,15 +64,25 @@ char *o_opts[] = { NULL }; +/* + * -c: conversion options + */ + +char *c_opts[] = { +#define CONVERT_LAZY_COUNT 0 + "lazycount", + NULL +}; + + static int ihash_option_used; static int bhash_option_used; static void usage(void) { - do_warn( -_("Usage: %s [-nLvV] [-o subopt[=value]] [-l logdev] [-r rtdev] devname\n"), - progname); + do_warn(_("Usage: %s [-nLPvV] [-c subopt=value] [-o subopt[=value]] " + "[-l logdev] [-r rtdev] devname\n"), progname); exit(1); } @@ -87,7 +97,7 @@ err_string(int err_code) err_message[XR_BAD_MAGIC] = _("bad magic number"); err_message[XR_BAD_BLOCKSIZE] = _("bad blocksize field"); err_message[XR_BAD_BLOCKLOG] = _("bad blocksize log field"); - err_message[XR_BAD_VERSION] = _("bad version number"); + err_message[XR_BAD_VERSION] = _("bad or unsupported version"); err_message[XR_BAD_INPROGRESS] = _("filesystem mkfs-in-progress bit set"); err_message[XR_BAD_FS_SIZE_DATA] = @@ -191,7 +201,7 @@ process_args(int argc, char **argv) * XXX have to add suboption processing here * attributes, quotas, nlinks, aligned_inos, sb_fbits */ - while ((c = getopt(argc, argv, "o:fl:r:LnDvVdPMt:")) != EOF) { + while ((c = getopt(argc, argv, "c:o:fl:r:LnDvVdPMt:")) != EOF) { switch (c) { case 'D': dumpcore = 1; @@ -234,6 +244,22 @@ process_args(int argc, char **argv) } } break; + case 'c': + p = optarg; + while (*p) { + char *val; + + switch (getsubopt(&p, (constpp)c_opts, &val)) { + case CONVERT_LAZY_COUNT: + lazy_count = (int)strtol(val, 0, 0); + convert_lazy_count = 1; + break; + default: + unknown('c', val); + break; + } + } + break; case 'l': log_name = optarg; log_spec = 1; From owner-xfs@oss.sgi.com Tue Apr 15 05:55:47 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 15 Apr 2008 05:56:07 -0700 (PDT) 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.0 required=5.0 tests=BAYES_50 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 m3FCtjNA001093 for ; Tue, 15 Apr 2008 05:55:47 -0700 X-ASG-Debug-ID: 1208264184-3ab9033f0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mr4.mail.ena.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9C4AF7854C7 for ; Tue, 15 Apr 2008 05:56:24 -0700 (PDT) Received: from mr4.mail.ena.net (mr4.mail.ena.net [96.4.1.13]) by cuda.sgi.com with ESMTP id zewQ9nRchu4KsMHg for ; Tue, 15 Apr 2008 05:56:24 -0700 (PDT) Received: from asmtp2.mail.ena.net (asmtp2.mail.ena.net [96.4.1.34]) by mr4.mail.ena.net (8.13.1/8.13.1) with ESMTP id m3FCe52I010488; Tue, 15 Apr 2008 07:40:05 -0500 Received: from asmtp2.mail.ena.net (asmtp2.mail.ena.net [127.0.0.1]) by asmtp2.mail.ena.net (Postfix) with ESMTP id 682CBE006A; Tue, 15 Apr 2008 07:40:04 -0500 (CDT) Received: from webmail.k12tn.net (ext-fw.corp.ena.net [205.241.232.129]) (Authenticated sender: watsond1@k12tn.net) by asmtp2.mail.ena.net (Postfix) with ESMTP; Tue, 15 Apr 2008 07:40:04 -0500 (CDT) Received: from 196.220.10.253 (SquirrelMail authenticated user watsond1@k12tn.net); by webmail.k12tn.net with HTTP; Tue, 15 Apr 2008 07:40:04 -0500 (CDT) Message-ID: <42362.196.220.10.253.1208263204.squirrel@196.220.10.253> Date: Tue, 15 Apr 2008 07:40:04 -0500 (CDT) X-ASG-Orig-Subj: Account Update Subject: Account Update From: "customercare@unimelb.edu.au" Reply-To: acct.helpdesk@gmail.com User-Agent: SquirrelMail/1.4.3a X-Mailer: SquirrelMail/1.4.3a MIME-Version: 1.0 Content-Type: text/plain;charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Priority: 3 (Normal) Importance: Normal To: undisclosed-recipients:; Received-SPF: Pass (client IP white listed); receiver=mr4.mail.ena.net; client-ip=96.4.1.34; envelope-from= Received-SPF: Pass (client IP white listed); receiver=mr4.mail.ena.net; client-ip=96.4.1.34; helo= X-ENA-MailScanner-Information: Please contact helpdesk@ena.com for more information X-ENA-MailScanner: Found to be clean X-ENA-MailScanner-SpamCheck: not spam, SpamAssassin (cached, score=-0.834, required 6, autolearn=disabled, ALL_TRUSTED -1.44, EMPTY_MESSAGE 0.61, SPF_PASS -0.00) X-ENA-MailScanner-From: customercare@unimelb.edu.au X-Barracuda-Connect: mr4.mail.ena.net[96.4.1.13] X-Barracuda-Start-Time: 1208264185 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5000 1.0000 0.7500 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 1.63 X-Barracuda-Spam-Status: No, SCORE=1.63 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=UNDISC_RECIPS X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.47857 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.88 UNDISC_RECIPS Valid-looking To "undisclosed-recipients" X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15437 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: customercare@unimelb.edu.au Precedence: bulk X-list: xfs Dear User This mail is to inform all our {unimelb.edu.au} users that we will be upgrading our site in a couple of days from now. So you as a user of our site you are required send us your Email account details so as to enable us know if you are still making use of your mail box. Further be informed that we will be deleting all mail account that is not functioning so as to create more space for new user. so you are to send us your mail account details which are as follows: *User name:......... *Password:.............. *Date of birth:................ *Security question:............. *Security answer:...................... Any mail user that refuses to send his/her details with in the next two(2) da! y of re ceipt this mail, his/her mail account will be erased from the site Regards Mark Anderson Maintance officer From owner-xfs@oss.sgi.com Tue Apr 15 20:46:44 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 15 Apr 2008 20:47:43 -0700 (PDT) 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 relay.sgi.com (netops-testserver-3.corp.sgi.com [192.26.57.72]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m3G3khgt024563 for ; Tue, 15 Apr 2008 20:46:44 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by netops-testserver-3.corp.sgi.com (Postfix) with ESMTP id 253319089D; Tue, 15 Apr 2008 20:47:18 -0700 (PDT) Received: from itchy (xaiki@itchy.melbourne.sgi.com [134.14.55.96]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3G3lDjm471641; Wed, 16 Apr 2008 13:47:14 +1000 (AEST) From: Niv Sardi To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH] split xfs_ioc_xattr References: <20080319204014.GA23644@lst.de> <20080414032940.GA10579@lst.de> Date: Wed, 16 Apr 2008 13:47:13 +1000 In-Reply-To: <20080414032940.GA10579@lst.de> (Christoph Hellwig's message of "Mon, 14 Apr 2008 05:29:40 +0200") Message-ID: User-Agent: Gnus/5.110009 (No Gnus v0.9) Emacs/23.0.60 (i486-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15438 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@cxhome.ath.cx Precedence: bulk X-list: xfs Christoph Hellwig writes: > On Mon, Apr 14, 2008 at 01:14:47PM +1000, Niv Sardi wrote: >> >> >> Christoph Hellwig writes: >> > The three subcases of xfs_ioc_xattr don't share any semantics and almost >> > no code, so split it into three separate helpers. >> > >> > Signed-off-by: Christoph Hellwig >> >> Looks good to me, aren't the likely() unlinkely() deprecated ? shouldn't >> they be killed ? > > Why would they be deprecated? just an impression I had from on of Dave's comment to one of my patches: « Can we kill all the likely() crap out of here? Modern hardware branch predictors are far better than static prediction hints. » But it looks like a matter of taste… I'll push it in. -- Niv Sardi From owner-xfs@oss.sgi.com Tue Apr 15 23:36:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 15 Apr 2008 23:37:17 -0700 (PDT) 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.0 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 m3G6apNH004038 for ; Tue, 15 Apr 2008 23:36:55 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA06867; Wed, 16 Apr 2008 16:37:21 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3G6bIsT135005867; Wed, 16 Apr 2008 16:37:19 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3G6bCBv131453526; Wed, 16 Apr 2008 16:37:12 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 16 Apr 2008 16:37:12 +1000 From: David Chinner To: Niv Sardi Cc: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: [PATCH] split xfs_ioc_xattr Message-ID: <20080416063712.GN108924158@sgi.com> References: <20080319204014.GA23644@lst.de> <20080414032940.GA10579@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15439 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 16, 2008 at 01:47:13PM +1000, Niv Sardi wrote: > Christoph Hellwig writes: > > > On Mon, Apr 14, 2008 at 01:14:47PM +1000, Niv Sardi wrote: > >> > >> > >> Christoph Hellwig writes: > >> > The three subcases of xfs_ioc_xattr don't share any semantics and almost > >> > no code, so split it into three separate helpers. > >> > > >> > Signed-off-by: Christoph Hellwig > >> > >> Looks good to me, aren't the likely() unlinkely() deprecated ? shouldn't > >> they be killed ? > > > > Why would they be deprecated? > > just an impression I had from on of Dave's comment to one of my patches: > « Can we kill all the likely() crap out of here? Modern hardware > branch predictors are far better than static prediction hints. » And the context which you haven't quoted? A repugnant hunk of code with one broken use of likely() in two unnecessary 'if (likely(!error) ...' branches, and 20 lines of my comment after the above quote demonstrating of how to restructure it so it was neater, faster and didn't need the prediction hints at all. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 16 00:06:28 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 16 Apr 2008 00:06:55 -0700 (PDT) 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.0 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 m3G76M0I008464 for ; Wed, 16 Apr 2008 00:06:27 -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 RAA07336; Wed, 16 Apr 2008 17:06:49 +1000 Message-ID: <4805A589.7080906@sgi.com> Date: Wed, 16 Apr 2008 17:06:49 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: David Chinner CC: Niv Sardi , Christoph Hellwig , xfs@oss.sgi.com Subject: Re: [PATCH] split xfs_ioc_xattr References: <20080319204014.GA23644@lst.de> <20080414032940.GA10579@lst.de> <20080416063712.GN108924158@sgi.com> In-Reply-To: <20080416063712.GN108924158@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15440 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs David Chinner wrote: > On Wed, Apr 16, 2008 at 01:47:13PM +1000, Niv Sardi wrote: >> Christoph Hellwig writes: >> >>> On Mon, Apr 14, 2008 at 01:14:47PM +1000, Niv Sardi wrote: >>>> >>>> Christoph Hellwig writes: >>>>> The three subcases of xfs_ioc_xattr don't share any semantics and almost >>>>> no code, so split it into three separate helpers. >>>>> >>>>> Signed-off-by: Christoph Hellwig >>>> Looks good to me, aren't the likely() unlinkely() deprecated ? shouldn't >>>> they be killed ? >>> Why would they be deprecated? >> just an impression I had from on of Dave's comment to one of my patches: >> « Can we kill all the likely() crap out of here? Modern hardware >> branch predictors are far better than static prediction hints. » > > And the context which you haven't quoted? A repugnant hunk of code > with one broken use of likely() in two unnecessary 'if > (likely(!error) ...' branches, and 20 lines of my comment after the > above quote demonstrating of how to restructure it so it was neater, > faster and didn't need the prediction hints at all. > I'm still wondering if likely() and unlikely() should ever be used or not? --Tim From owner-xfs@oss.sgi.com Wed Apr 16 00:28:51 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 16 Apr 2008 00:29:12 -0700 (PDT) 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=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 m3G7SoD2015282 for ; Wed, 16 Apr 2008 00:28:51 -0700 X-ASG-Debug-ID: 1208330968-6b8401aa0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp-out03.alice-dsl.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 519FF826E9 for ; Wed, 16 Apr 2008 00:29:28 -0700 (PDT) Received: from smtp-out03.alice-dsl.net (smtp-out03.alice-dsl.net [88.44.63.5]) by cuda.sgi.com with ESMTP id aR3FtU3Eo13AsdzD for ; Wed, 16 Apr 2008 00:29:28 -0700 (PDT) Received: from out.alice-dsl.de ([192.168.125.62]) by smtp-out03.alice-dsl.net with Microsoft SMTPSVC(6.0.3790.1830); Wed, 16 Apr 2008 09:22:40 +0200 Received: from basil.firstfloor.org ([92.224.152.8]) by out.alice-dsl.de with Microsoft SMTPSVC(6.0.3790.1830); Wed, 16 Apr 2008 09:22:40 +0200 Received: by basil.firstfloor.org (Postfix, from userid 1000) id 3F9A11B41F5; Wed, 16 Apr 2008 09:29:27 +0200 (CEST) To: Timothy Shimmin Cc: David Chinner , Niv Sardi , Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] split xfs_ioc_xattr Subject: Re: [PATCH] split xfs_ioc_xattr From: Andi Kleen References: <20080319204014.GA23644@lst.de> <20080414032940.GA10579@lst.de> <20080416063712.GN108924158@sgi.com> <4805A589.7080906@sgi.com> Date: Wed, 16 Apr 2008 09:29:27 +0200 In-Reply-To: <4805A589.7080906@sgi.com> (Timothy Shimmin's message of "Wed, 16 Apr 2008 17:06:49 +1000") Message-ID: <87ve2i5kbs.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-OriginalArrivalTime: 16 Apr 2008 07:22:40.0853 (UTC) FILETIME=[A7C0C850:01C89F92] X-Barracuda-Connect: smtp-out03.alice-dsl.net[88.44.63.5] X-Barracuda-Start-Time: 1208330970 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.1, rules version 3.1.47931 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15441 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: andi@firstfloor.org Precedence: bulk X-list: xfs Timothy Shimmin writes: > > I'm still wondering if likely() and unlikely() should ever be used or not? It's more than just branch predictors. unlikely also moves unlikely code out of line and keeps it out of the icache (the obvious drawback is that it makes the asm code much harder to read during debugging though -- that is why it used to be turned off on x86-64) Then CPUs have two types of branch predictors: dynamic ones with history and static ones. Dynamic branch predictors tend to only work when the code has been recently executed several times and is still cached in their history buffers Now the nature of the kernel is that it is a library serving much more code running in user space. This leads to often the user space clearing out the history buffers and caches so kernel code has to often deal with running cache cold and also branch predictor cold. Then there are the static branch predictors in the CPU and unlikely() actually rearranges code to make them predict correctly. Personally I would say the cache effects (moving code out of line) are more important than the branch prediction because cache misses are more costly than branch misprediction. That all said it might make sense in some really performance critical code, especially if it's a in a loop and the gcc static branch predictors (gcc has a large range of builtin heuristics that say e.g. (x < 0) or (x == NULL) is unlikely). Most code is probably not performance critical enough to justify the ugliness of the code annotations. And again for many situations the builtin predictors of gcc (and the CPU) do fine without help anyways. Also if you add them you should at some point run with the unlikely profiler patch from mm just to make sure that your guesses about which paths are likely are actually correct. Humans are unfortunately often wrong on such guesses. Ideally (but that might ask for too much for normal code writing) you would only add them to code where you have oprofile data for branch mispredictions or icache misses. -Andi From owner-xfs@oss.sgi.com Wed Apr 16 16:12:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 16 Apr 2008 16:12:10 -0700 (PDT) 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.6 required=5.0 tests=BAYES_00,SUBJ_FORWARDED 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 m3GNBxRv009710 for ; Wed, 16 Apr 2008 16:12:02 -0700 X-ASG-Debug-ID: 1208387558-199003360000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail2507.carrierzone.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4E5B78F309 for ; Wed, 16 Apr 2008 16:12:38 -0700 (PDT) Received: from mail2507.carrierzone.com (mail2507.carrierzone.com [64.29.147.17]) by cuda.sgi.com with ESMTP id HbafHLN3fHRUVGCv for ; Wed, 16 Apr 2008 16:12:38 -0700 (PDT) X-POP-User: carla.boland.geoglobal.com Received: from ggrmilesl.geoglobal.ca ([68.145.110.189]) by mail2507.carrierzone.com (8.13.6.20060614/8.13.1) with ESMTP id m3GNCY90000864 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 16 Apr 2008 23:12:36 GMT From: "Amicus Services Inc." Organization: GeoGlobal Reources Inc. To: xfs@oss.sgi.com, vincent@geoglobal.com X-ASG-Orig-Subj: Fwd: XFS error cannot mount RAID Subject: Fwd: XFS error cannot mount RAID Date: Wed, 16 Apr 2008 18:17:00 -0600 User-Agent: KMail/1.9.1 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_8bpBIN2z73RRLKq" Message-Id: <200804161817.00767.support@geoglobal.com> X-Barracuda-Connect: mail2507.carrierzone.com[64.29.147.17] X-Barracuda-Start-Time: 1208387560 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.1, rules version 3.1.47984 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15442 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: support@geoglobal.com Precedence: bulk X-list: xfs --Boundary-00=_8bpBIN2z73RRLKq Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Same issue just the result of the xfs_check... ---------- Forwarded Message ---------- Subject: XFS error cannot mount RAID Date: Wednesday 16 April 2008 18:01 From: "Amicus Services Inc." To: xfs@oss.sgi.com, vincent.roy@geoglobal.com I have a AMCC RAID 5 which has been verified without error but cannot mount on a SUSE 10.1 OS. Inconsistency on the volume may have occurred during an abrupt power shutdown. Not sure if it would be prudent to run XFS_Repair at this stage since XFS_check returned info indicating inconsistencies exist. Please assist in any way you can, thanks. Vincent Roy System Admin 403-830-7283 ------------------------------------------------------- --Boundary-00=_8bpBIN2z73RRLKq Content-Type: text/plain; charset="us-ascii"; name="logprint.txt" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="logprint.txt" xfs_logprint: data device: 0x811 log device: 0x811 daddr: 1171829280 length: 262144 * ERROR: mismatched uuid in log * SB : 2ca4f030-af24-4cfe-b895-c702b5579ac5 * log: e35bfa5c-8c62-0ff5-fe81-cb1ad034edb4 log tail: 57710896 head: 130834 state: --Boundary-00=_8bpBIN2z73RRLKq Content-Type: text/plain; charset="iso-8859-1"; name="xfscheckerror.txt" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xfscheckerror.txt" xfs_check: unexpected XFS SB magic number 0xfab80010 bad superblock magic number fab80010, giving up --Boundary-00=_8bpBIN2z73RRLKq-- From owner-xfs@oss.sgi.com Wed Apr 16 16:41:50 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 16 Apr 2008 16:42:07 -0700 (PDT) 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 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 m3GNflml017034 for ; Wed, 16 Apr 2008 16:41:50 -0700 X-ASG-Debug-ID: 1208389346-74e201520000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail105c25.carrierzone.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8B5D8A0E61E for ; Wed, 16 Apr 2008 16:42:26 -0700 (PDT) Received: from mail105c25.carrierzone.com (mail105c25.carrierzone.com [64.29.147.175]) by cuda.sgi.com with ESMTP id MSvzZtxJz47HhBm6 for ; Wed, 16 Apr 2008 16:42:26 -0700 (PDT) X-POP-User: allank.geoglobal.com Received: from ggrmilesl.geoglobal.ca ([68.145.110.189]) by mail105c25.carrierzone.com (8.13.6.20060614/8.13.1) with ESMTP id m3GMv98C009339 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 16 Apr 2008 22:57:11 GMT From: "Amicus Services Inc." Organization: GeoGlobal Reources Inc. To: xfs@oss.sgi.com, vincent.roy@geoglobal.com X-ASG-Orig-Subj: XFS error cannot mount RAID Subject: XFS error cannot mount RAID Date: Wed, 16 Apr 2008 18:01:35 -0600 User-Agent: KMail/1.9.1 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_fNpBIeoPxt1CU2d" Message-Id: <200804161801.35174.support@geoglobal.com> X-Barracuda-Connect: mail105c25.carrierzone.com[64.29.147.175] X-Barracuda-Start-Time: 1208389347 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.1, rules version 3.1.47989 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15443 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: support@geoglobal.com Precedence: bulk X-list: xfs --Boundary-00=_fNpBIeoPxt1CU2d Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline I have a AMCC RAID 5 which has been verified without error but cannot mount on a SUSE 10.1 OS. Inconsistency on the volume may have occurred during an abrupt power shutdown. Not sure if it would be prudent to run XFS_Repair at this stage since XFS_check returned info indicating inconsistencies exist. Please assist in any way you can, thanks. Vincent Roy System Admin 403-830-7283 --Boundary-00=_fNpBIeoPxt1CU2d Content-Type: text/plain; charset="us-ascii"; name="logprint.txt" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="logprint.txt" xfs_logprint: data device: 0x811 log device: 0x811 daddr: 1171829280 length: 262144 * ERROR: mismatched uuid in log * SB : 2ca4f030-af24-4cfe-b895-c702b5579ac5 * log: e35bfa5c-8c62-0ff5-fe81-cb1ad034edb4 log tail: 57710896 head: 130834 state: --Boundary-00=_fNpBIeoPxt1CU2d-- From owner-xfs@oss.sgi.com Wed Apr 16 19:34:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 16 Apr 2008 19:35:10 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42, J_CHICKENPOX_45,J_CHICKENPOX_47,J_CHICKENPOX_48 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 m3H2YgFu031462 for ; Wed, 16 Apr 2008 19:34: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 MAA03032; Thu, 17 Apr 2008 12:35:21 +1000 Date: Thu, 17 Apr 2008 12:35:36 +1000 To: "xfs@oss.sgi.com" , xfs-dev Subject: [REVIEW] - cleanup xfs_attr a bit From: "Barry Naujok" Organization: SGI Content-Type: multipart/mixed; boundary=----------e4TOE9pR9W1Pc1L6bdFs6s MIME-Version: 1.0 Message-ID: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15444 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs ------------e4TOE9pR9W1Pc1L6bdFs6s Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 Content-Transfer-Encoding: Quoted-Printable This patch starts using struct xfs_name more for the xattr code and is another step for using xfs_name in xfs_da_args. Also, the cred parameter is removed from xfs_attr_get and xfs_attr_fetch. The new xfs_attr_name_to_name will be a place holder for the Unicode CI checks/NLS conversion too. --- fs/xfs/dmapi/xfs_dm.c | 13 ++--- fs/xfs/linux-2.6/xfs_ioctl.c | 6 +- fs/xfs/xfs_acl.c | 7 +- fs/xfs/xfs_attr.c | 103=20=20 +++++++++++++++++++++++-------------------- fs/xfs/xfs_attr.h | 6 -- fs/xfs/xfs_vnodeops.h | 2 6 files changed, 71 insertions(+), 66 deletions(-) Index: kern_ci/fs/xfs/dmapi/xfs_dm.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/dmapi/xfs_dm.c +++ kern_ci/fs/xfs/dmapi/xfs_dm.c @@ -516,8 +516,7 @@ xfs_dm_bulkall_iget_one( xfs_iunlock(ip, XFS_ILOCK_SHARED); memset(&xbuf->dx_attrdata, 0, sizeof(dm_vardata_t)); - error =3D xfs_attr_get(ip, attr_name, attr_buf, - &value_len, ATTR_ROOT, sys_cred); + error =3D xfs_attr_get(ip, attr_name, attr_buf, &value_len, ATTR_ROOT); iput(ip->i_vnode); DM_EA_XLATE_ERR(error); @@ -1691,8 +1690,8 @@ xfs_dm_get_destroy_dmattr( if (value =3D=3D NULL) return(-ENOMEM); - error =3D xfs_attr_get(XFS_I(inode), dkattrname.dan_chars, value,=20=20 &value_len, - ATTR_ROOT, sys_cred); + error =3D xfs_attr_get(XFS_I(inode), dkattrname.dan_chars, value, + &value_len, ATTR_ROOT); if (error =3D=3D ERANGE) { kfree(value); alloc_size =3D value_len; @@ -1701,7 +1700,7 @@ xfs_dm_get_destroy_dmattr( return(-ENOMEM); error =3D xfs_attr_get(XFS_I(inode), dkattrname.dan_chars, value, - &value_len, ATTR_ROOT, sys_cred); + &value_len, ATTR_ROOT); } if (error) { kfree(value); @@ -1970,7 +1969,7 @@ xfs_dm_get_dmattr( value_len =3D alloc_size; /* in/out parameter */ error =3D xfs_attr_get(XFS_I(inode), name.dan_chars, value, &value_len, - ATTR_ROOT, NULL); + ATTR_ROOT); DM_EA_XLATE_ERR(error); /* DMAPI requires an errno of ENOENT if an attribute does not exist, @@ -2217,7 +2216,7 @@ xfs_dm_getall_dmattr( error =3D xfs_attr_get(XFS_I(inode), entry->a_name, (void *)(ulist + 1), &value_len, - ATTR_ROOT, NULL); + ATTR_ROOT); DM_EA_XLATE_ERR(error); if (error || value_len !=3D entry->a_valuelen) { Index: kern_ci/fs/xfs/linux-2.6/xfs_ioctl.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_ioctl.c +++ kern_ci/fs/xfs/linux-2.6/xfs_ioctl.c @@ -505,14 +505,14 @@ xfs_attrmulti_attr_get( { char *kbuf; int error =3D EFAULT; -=09 + if (*len > XATTR_SIZE_MAX) return EINVAL; kbuf =3D kmalloc(*len, GFP_KERNEL); if (!kbuf) return ENOMEM; - error =3D xfs_attr_get(XFS_I(inode), name, kbuf, (int *)len, flags, NULL); + error =3D xfs_attr_get(XFS_I(inode), name, kbuf, (int *)len, flags); if (error) goto out_kfree; @@ -548,7 +548,7 @@ xfs_attrmulti_attr_set( if (copy_from_user(kbuf, ubuf, len)) goto out_kfree; -=09=09=09 + error =3D xfs_attr_set(XFS_I(inode), name, kbuf, len, flags); out_kfree: Index: kern_ci/fs/xfs/xfs_acl.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_acl.c +++ kern_ci/fs/xfs/xfs_acl.c @@ -341,14 +341,15 @@ xfs_acl_iaccess( { xfs_acl_t *acl; int rval; + struct xfs_name acl_name =3D {SGI_ACL_FILE, SGI_ACL_FILE_SIZE}; if (!(_ACL_ALLOC(acl))) return -1; /* If the file has no ACL return -1. */ rval =3D sizeof(xfs_acl_t); - if (xfs_attr_fetch(ip, SGI_ACL_FILE, SGI_ACL_FILE_SIZE, - (char *)acl, &rval, ATTR_ROOT | ATTR_KERNACCESS, cr)) { + if (xfs_attr_fetch(ip, &acl_name, (char *)acl, &rval, + ATTR_ROOT | ATTR_KERNACCESS)) { _ACL_FREE(acl); return -1; } @@ -595,7 +596,7 @@ xfs_acl_get_attr( *error =3D xfs_attr_get(xfs_vtoi(vp), kind =3D=3D _ACL_TYPE_ACCESS ? SGI_ACL_FILE : SGI_ACL_DEFAULT, - (char *)aclp, &len, flags, sys_cred); + (char *)aclp, &len, flags); if (*error || (flags & ATTR_KERNOVAL)) return; xfs_acl_get_endian(aclp); Index: kern_ci/fs/xfs/xfs_attr.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_attr.c +++ kern_ci/fs/xfs/xfs_attr.c @@ -101,14 +101,32 @@ STATIC int xfs_attr_rmtval_remove(xfs_da ktrace_t *xfs_attr_trace_buf; #endif +STATIC int +xfs_attr_name_to_name( + xfs_inode_t *ip, + struct xfs_name *xname, + const char *aname) +{ + if (!aname) + return EINVAL; + xname->name =3D aname; + xname->len =3D strlen(aname); + if (xname->len >=3D MAXNAMELEN) + return EFAULT; /* match IRIX behaviour */ + + if (XFS_FORCED_SHUTDOWN(ip->i_mount)) + return EIO; + + return 0; +} /*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D * Overall external interface routines. *=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*/ int -xfs_attr_fetch(xfs_inode_t *ip, const char *name, int namelen, - char *value, int *valuelenp, int flags, struct cred *cred) +xfs_attr_fetch(xfs_inode_t *ip, struct xfs_name *name, + char *value, int *valuelenp, int flags) { xfs_da_args_t args; int error; @@ -122,8 +140,8 @@ xfs_attr_fetch(xfs_inode_t *ip, const ch * Fill in the arg structure for this request. */ memset((char *)&args, 0, sizeof(args)); - args.name =3D name; - args.namelen =3D namelen; + args.name =3D name->name; + args.namelen =3D name->len; args.value =3D value; args.valuelen =3D *valuelenp; args.flags =3D flags; @@ -162,31 +180,27 @@ xfs_attr_get( const char *name, char *value, int *valuelenp, - int flags, - cred_t *cred) + int flags) { - int error, namelen; + int error; + struct xfs_name xname; XFS_STATS_INC(xs_attr_get); - if (!name) - return(EINVAL); - namelen =3D strlen(name); - if (namelen >=3D MAXNAMELEN) - return(EFAULT); /* match IRIX behaviour */ - - if (XFS_FORCED_SHUTDOWN(ip->i_mount)) - return(EIO); + error =3D xfs_attr_name_to_name(ip, &xname, name); + if (error) + return error; xfs_ilock(ip, XFS_ILOCK_SHARED); - error =3D xfs_attr_fetch(ip, name, namelen, value, valuelenp, flags, cred= ); + error =3D xfs_attr_fetch(ip, &xname, value, valuelenp, flags); xfs_iunlock(ip, XFS_ILOCK_SHARED); - return(error); + + return error; } -int -xfs_attr_set_int(xfs_inode_t *dp, const char *name, int namelen, - char *value, int valuelen, int flags) +STATIC int +xfs_attr_set_int(xfs_inode_t *dp, struct xfs_name *name, + char *value, int valuelen, int flags) { xfs_da_args_t args; xfs_fsblock_t firstblock; @@ -209,7 +223,7 @@ xfs_attr_set_int(xfs_inode_t *dp, const */ if (XFS_IFORK_Q(dp) =3D=3D 0) { int sf_size =3D sizeof(xfs_attr_sf_hdr_t) + - XFS_ATTR_SF_ENTSIZE_BYNAME(namelen, valuelen); + XFS_ATTR_SF_ENTSIZE_BYNAME(name->len, valuelen); if ((error =3D xfs_bmap_add_attrfork(dp, sf_size, rsvd))) return(error); @@ -219,8 +233,8 @@ xfs_attr_set_int(xfs_inode_t *dp, const * Fill in the arg structure for this request. */ memset((char *)&args, 0, sizeof(args)); - args.name =3D name; - args.namelen =3D namelen; + args.name =3D name->name; + args.namelen =3D name->len; args.value =3D value; args.valuelen =3D valuelen; args.flags =3D flags; @@ -236,7 +250,7 @@ xfs_attr_set_int(xfs_inode_t *dp, const * Determine space new attribute will use, and if it would be * "local" or "remote" (note: local !=3D inline). */ - size =3D xfs_attr_leaf_newentsize(namelen, valuelen, + size =3D xfs_attr_leaf_newentsize(name->len, valuelen, mp->m_sb.sb_blocksize, &local); nblks =3D XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK); @@ -429,26 +443,24 @@ xfs_attr_set( int valuelen, int flags) { - int namelen; - - namelen =3D strlen(name); - if (namelen >=3D MAXNAMELEN) - return EFAULT; /* match IRIX behaviour */ + int error; + struct xfs_name xname; XFS_STATS_INC(xs_attr_set); - if (XFS_FORCED_SHUTDOWN(dp->i_mount)) - return (EIO); + error =3D xfs_attr_name_to_name(dp, &xname, name); + if (error) + return error; - return xfs_attr_set_int(dp, name, namelen, value, valuelen, flags); + return xfs_attr_set_int(dp, &xname, value, valuelen, flags); } /* * Generic handler routine to remove a name from an attribute list. * Transitions attribute list from Btree to shortform as necessary. */ -int -xfs_attr_remove_int(xfs_inode_t *dp, const char *name, int namelen, int=20= =20 flags) +STATIC int +xfs_attr_remove_int(xfs_inode_t *dp, struct xfs_name *name, int flags) { xfs_da_args_t args; xfs_fsblock_t firstblock; @@ -460,8 +472,8 @@ xfs_attr_remove_int(xfs_inode_t *dp, con * Fill in the arg structure for this request. */ memset((char *)&args, 0, sizeof(args)); - args.name =3D name; - args.namelen =3D namelen; + args.name =3D name->name; + args.namelen =3D name->len; args.flags =3D flags; args.hashval =3D xfs_da_hashname(args.name, args.namelen); args.dp =3D dp; @@ -575,16 +587,14 @@ xfs_attr_remove( const char *name, int flags) { - int namelen; - - namelen =3D strlen(name); - if (namelen >=3D MAXNAMELEN) - return EFAULT; /* match IRIX behaviour */ + int error; + struct xfs_name xname; XFS_STATS_INC(xs_attr_remove); - if (XFS_FORCED_SHUTDOWN(dp->i_mount)) - return (EIO); + error =3D xfs_attr_name_to_name(dp, &xname, name); + if (error) + return error; xfs_ilock(dp, XFS_ILOCK_SHARED); if (XFS_IFORK_Q(dp) =3D=3D 0 || @@ -595,10 +605,10 @@ xfs_attr_remove( } xfs_iunlock(dp, XFS_ILOCK_SHARED); - return xfs_attr_remove_int(dp, name, namelen, flags); + return xfs_attr_remove_int(dp, &xname, flags); } -int /* error */ +STATIC int xfs_attr_list_int(xfs_attr_list_context_t *context) { int error; @@ -2522,8 +2532,7 @@ attr_generic_get( { int error, asize =3D size; - error =3D xfs_attr_get(xfs_vtoi(vp), name, data, - &asize, xflags, NULL); + error =3D xfs_attr_get(xfs_vtoi(vp), name, data, &asize, xflags); if (!error) return asize; return -error; Index: kern_ci/fs/xfs/xfs_attr.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_attr.h +++ kern_ci/fs/xfs/xfs_attr.h @@ -158,14 +158,10 @@ struct xfs_da_args; /* * Overall external interface routines. */ -int xfs_attr_set_int(struct xfs_inode *, const char *, int, char *, int,= =20=20 int); -int xfs_attr_remove_int(struct xfs_inode *, const char *, int, int); -int xfs_attr_list_int(struct xfs_attr_list_context *); int xfs_attr_inactive(struct xfs_inode *dp); int xfs_attr_shortform_getvalue(struct xfs_da_args *); -int xfs_attr_fetch(struct xfs_inode *, const char *, int, - char *, int *, int, struct cred *); +int xfs_attr_fetch(struct xfs_inode *, struct xfs_name *, char *, int *,= =20=20 int); int xfs_attr_rmtval_get(struct xfs_da_args *args); #endif /* __XFS_ATTR_H__ */ Index: kern_ci/fs/xfs/xfs_vnodeops.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_vnodeops.h +++ kern_ci/fs/xfs/xfs_vnodeops.h @@ -50,7 +50,7 @@ int xfs_rename(struct xfs_inode *src_dp, struct xfs_inode *src_ip, struct xfs_inode *target_dp, struct xfs_name *target_name, struct xfs_inode *target_ip); int xfs_attr_get(struct xfs_inode *ip, const char *name, char *value, - int *valuelenp, int flags, cred_t *cred); + int *valuelenp, int flags); int xfs_attr_set(struct xfs_inode *dp, const char *name, char *value, int valuelen, int flags); int xfs_attr_remove(struct xfs_inode *dp, const char *name, int flags); ------------e4TOE9pR9W1Pc1L6bdFs6s Content-Disposition: attachment; filename=attr_name.patch Content-Type: text/x-patch; name=attr_name.patch Content-Transfer-Encoding: Quoted-Printable --- fs/xfs/dmapi/xfs_dm.c | 13 ++--- fs/xfs/linux-2.6/xfs_ioctl.c | 6 +- fs/xfs/xfs_acl.c | 7 +- fs/xfs/xfs_attr.c | 103 +++++++++++++++++++++++---------------= ----- fs/xfs/xfs_attr.h | 6 -- fs/xfs/xfs_vnodeops.h | 2=20 6 files changed, 71 insertions(+), 66 deletions(-) Index: kern_ci/fs/xfs/dmapi/xfs_dm.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/dmapi/xfs_dm.c +++ kern_ci/fs/xfs/dmapi/xfs_dm.c @@ -516,8 +516,7 @@ xfs_dm_bulkall_iget_one( xfs_iunlock(ip, XFS_ILOCK_SHARED); =20 memset(&xbuf->dx_attrdata, 0, sizeof(dm_vardata_t)); - error =3D xfs_attr_get(ip, attr_name, attr_buf, - &value_len, ATTR_ROOT, sys_cred); + error =3D xfs_attr_get(ip, attr_name, attr_buf, &value_len, ATTR_ROOT); iput(ip->i_vnode); =20 DM_EA_XLATE_ERR(error); @@ -1691,8 +1690,8 @@ xfs_dm_get_destroy_dmattr( if (value =3D=3D NULL) return(-ENOMEM); =20 - error =3D xfs_attr_get(XFS_I(inode), dkattrname.dan_chars, value, &value_= len, - ATTR_ROOT, sys_cred); + error =3D xfs_attr_get(XFS_I(inode), dkattrname.dan_chars, value, + &value_len, ATTR_ROOT); if (error =3D=3D ERANGE) { kfree(value); alloc_size =3D value_len; @@ -1701,7 +1700,7 @@ xfs_dm_get_destroy_dmattr( return(-ENOMEM); =20 error =3D xfs_attr_get(XFS_I(inode), dkattrname.dan_chars, value, - &value_len, ATTR_ROOT, sys_cred); + &value_len, ATTR_ROOT); } if (error) { kfree(value); @@ -1970,7 +1969,7 @@ xfs_dm_get_dmattr( value_len =3D alloc_size; /* in/out parameter */ =20 error =3D xfs_attr_get(XFS_I(inode), name.dan_chars, value, &value_len, - ATTR_ROOT, NULL); + ATTR_ROOT); DM_EA_XLATE_ERR(error); =20 /* DMAPI requires an errno of ENOENT if an attribute does not exist, @@ -2217,7 +2216,7 @@ xfs_dm_getall_dmattr( =20 error =3D xfs_attr_get(XFS_I(inode), entry->a_name, (void *)(ulist + 1), &value_len, - ATTR_ROOT, NULL); + ATTR_ROOT); DM_EA_XLATE_ERR(error); =20 if (error || value_len !=3D entry->a_valuelen) { Index: kern_ci/fs/xfs/linux-2.6/xfs_ioctl.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_ioctl.c +++ kern_ci/fs/xfs/linux-2.6/xfs_ioctl.c @@ -505,14 +505,14 @@ xfs_attrmulti_attr_get( { char *kbuf; int error =3D EFAULT; -=09 + if (*len > XATTR_SIZE_MAX) return EINVAL; kbuf =3D kmalloc(*len, GFP_KERNEL); if (!kbuf) return ENOMEM; =20 - error =3D xfs_attr_get(XFS_I(inode), name, kbuf, (int *)len, flags, NULL); + error =3D xfs_attr_get(XFS_I(inode), name, kbuf, (int *)len, flags); if (error) goto out_kfree; =20 @@ -548,7 +548,7 @@ xfs_attrmulti_attr_set( =20 if (copy_from_user(kbuf, ubuf, len)) goto out_kfree; -=09=09=09 + error =3D xfs_attr_set(XFS_I(inode), name, kbuf, len, flags); =20 out_kfree: Index: kern_ci/fs/xfs/xfs_acl.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_acl.c +++ kern_ci/fs/xfs/xfs_acl.c @@ -341,14 +341,15 @@ xfs_acl_iaccess( { xfs_acl_t *acl; int rval; + struct xfs_name acl_name =3D {SGI_ACL_FILE, SGI_ACL_FILE_SIZE}; =20 if (!(_ACL_ALLOC(acl))) return -1; =20 /* If the file has no ACL return -1. */ rval =3D sizeof(xfs_acl_t); - if (xfs_attr_fetch(ip, SGI_ACL_FILE, SGI_ACL_FILE_SIZE, - (char *)acl, &rval, ATTR_ROOT | ATTR_KERNACCESS, cr)) { + if (xfs_attr_fetch(ip, &acl_name, (char *)acl, &rval, + ATTR_ROOT | ATTR_KERNACCESS)) { _ACL_FREE(acl); return -1; } @@ -595,7 +596,7 @@ xfs_acl_get_attr( *error =3D xfs_attr_get(xfs_vtoi(vp), kind =3D=3D _ACL_TYPE_ACCESS ? SGI_ACL_FILE : SGI_ACL_DEFAULT, - (char *)aclp, &len, flags, sys_cred); + (char *)aclp, &len, flags); if (*error || (flags & ATTR_KERNOVAL)) return; xfs_acl_get_endian(aclp); Index: kern_ci/fs/xfs/xfs_attr.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_attr.c +++ kern_ci/fs/xfs/xfs_attr.c @@ -101,14 +101,32 @@ STATIC int xfs_attr_rmtval_remove(xfs_da ktrace_t *xfs_attr_trace_buf; #endif =20 +STATIC int +xfs_attr_name_to_name( + xfs_inode_t *ip, + struct xfs_name *xname, + const char *aname) +{ + if (!aname) + return EINVAL; + xname->name =3D aname; + xname->len =3D strlen(aname); + if (xname->len >=3D MAXNAMELEN) + return EFAULT; /* match IRIX behaviour */ + + if (XFS_FORCED_SHUTDOWN(ip->i_mount)) + return EIO; + + return 0; +} =20 /*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D * Overall external interface routines. *=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*/ =20 int -xfs_attr_fetch(xfs_inode_t *ip, const char *name, int namelen, - char *value, int *valuelenp, int flags, struct cred *cred) +xfs_attr_fetch(xfs_inode_t *ip, struct xfs_name *name, + char *value, int *valuelenp, int flags) { xfs_da_args_t args; int error; @@ -122,8 +140,8 @@ xfs_attr_fetch(xfs_inode_t *ip, const ch * Fill in the arg structure for this request. */ memset((char *)&args, 0, sizeof(args)); - args.name =3D name; - args.namelen =3D namelen; + args.name =3D name->name; + args.namelen =3D name->len; args.value =3D value; args.valuelen =3D *valuelenp; args.flags =3D flags; @@ -162,31 +180,27 @@ xfs_attr_get( const char *name, char *value, int *valuelenp, - int flags, - cred_t *cred) + int flags) { - int error, namelen; + int error; + struct xfs_name xname; =20 XFS_STATS_INC(xs_attr_get); =20 - if (!name) - return(EINVAL); - namelen =3D strlen(name); - if (namelen >=3D MAXNAMELEN) - return(EFAULT); /* match IRIX behaviour */ - - if (XFS_FORCED_SHUTDOWN(ip->i_mount)) - return(EIO); + error =3D xfs_attr_name_to_name(ip, &xname, name); + if (error) + return error; =20 xfs_ilock(ip, XFS_ILOCK_SHARED); - error =3D xfs_attr_fetch(ip, name, namelen, value, valuelenp, flags, cred= ); + error =3D xfs_attr_fetch(ip, &xname, value, valuelenp, flags); xfs_iunlock(ip, XFS_ILOCK_SHARED); - return(error); + + return error; } =20 -int -xfs_attr_set_int(xfs_inode_t *dp, const char *name, int namelen, - char *value, int valuelen, int flags) +STATIC int +xfs_attr_set_int(xfs_inode_t *dp, struct xfs_name *name, + char *value, int valuelen, int flags) { xfs_da_args_t args; xfs_fsblock_t firstblock; @@ -209,7 +223,7 @@ xfs_attr_set_int(xfs_inode_t *dp, const=20 */ if (XFS_IFORK_Q(dp) =3D=3D 0) { int sf_size =3D sizeof(xfs_attr_sf_hdr_t) + - XFS_ATTR_SF_ENTSIZE_BYNAME(namelen, valuelen); + XFS_ATTR_SF_ENTSIZE_BYNAME(name->len, valuelen); =20 if ((error =3D xfs_bmap_add_attrfork(dp, sf_size, rsvd))) return(error); @@ -219,8 +233,8 @@ xfs_attr_set_int(xfs_inode_t *dp, const=20 * Fill in the arg structure for this request. */ memset((char *)&args, 0, sizeof(args)); - args.name =3D name; - args.namelen =3D namelen; + args.name =3D name->name; + args.namelen =3D name->len; args.value =3D value; args.valuelen =3D valuelen; args.flags =3D flags; @@ -236,7 +250,7 @@ xfs_attr_set_int(xfs_inode_t *dp, const=20 * Determine space new attribute will use, and if it would be * "local" or "remote" (note: local !=3D inline). */ - size =3D xfs_attr_leaf_newentsize(namelen, valuelen, + size =3D xfs_attr_leaf_newentsize(name->len, valuelen, mp->m_sb.sb_blocksize, &local); =20 nblks =3D XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK); @@ -429,26 +443,24 @@ xfs_attr_set( int valuelen, int flags) { - int namelen; - - namelen =3D strlen(name); - if (namelen >=3D MAXNAMELEN) - return EFAULT; /* match IRIX behaviour */ + int error; + struct xfs_name xname; =20 XFS_STATS_INC(xs_attr_set); =20 - if (XFS_FORCED_SHUTDOWN(dp->i_mount)) - return (EIO); + error =3D xfs_attr_name_to_name(dp, &xname, name); + if (error) + return error; =20 - return xfs_attr_set_int(dp, name, namelen, value, valuelen, flags); + return xfs_attr_set_int(dp, &xname, value, valuelen, flags); } =20 /* * Generic handler routine to remove a name from an attribute list. * Transitions attribute list from Btree to shortform as necessary. */ -int -xfs_attr_remove_int(xfs_inode_t *dp, const char *name, int namelen, int fl= ags) +STATIC int +xfs_attr_remove_int(xfs_inode_t *dp, struct xfs_name *name, int flags) { xfs_da_args_t args; xfs_fsblock_t firstblock; @@ -460,8 +472,8 @@ xfs_attr_remove_int(xfs_inode_t *dp, con * Fill in the arg structure for this request. */ memset((char *)&args, 0, sizeof(args)); - args.name =3D name; - args.namelen =3D namelen; + args.name =3D name->name; + args.namelen =3D name->len; args.flags =3D flags; args.hashval =3D xfs_da_hashname(args.name, args.namelen); args.dp =3D dp; @@ -575,16 +587,14 @@ xfs_attr_remove( const char *name, int flags) { - int namelen; - - namelen =3D strlen(name); - if (namelen >=3D MAXNAMELEN) - return EFAULT; /* match IRIX behaviour */ + int error; + struct xfs_name xname; =20 XFS_STATS_INC(xs_attr_remove); =20 - if (XFS_FORCED_SHUTDOWN(dp->i_mount)) - return (EIO); + error =3D xfs_attr_name_to_name(dp, &xname, name); + if (error) + return error; =20 xfs_ilock(dp, XFS_ILOCK_SHARED); if (XFS_IFORK_Q(dp) =3D=3D 0 || @@ -595,10 +605,10 @@ xfs_attr_remove( } xfs_iunlock(dp, XFS_ILOCK_SHARED); =20 - return xfs_attr_remove_int(dp, name, namelen, flags); + return xfs_attr_remove_int(dp, &xname, flags); } =20 -int /* error */ +STATIC int xfs_attr_list_int(xfs_attr_list_context_t *context) { int error; @@ -2522,8 +2532,7 @@ attr_generic_get( { int error, asize =3D size; =20 - error =3D xfs_attr_get(xfs_vtoi(vp), name, data, - &asize, xflags, NULL); + error =3D xfs_attr_get(xfs_vtoi(vp), name, data, &asize, xflags); if (!error) return asize; return -error; Index: kern_ci/fs/xfs/xfs_attr.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_attr.h +++ kern_ci/fs/xfs/xfs_attr.h @@ -158,14 +158,10 @@ struct xfs_da_args; /* * Overall external interface routines. */ -int xfs_attr_set_int(struct xfs_inode *, const char *, int, char *, int, i= nt); -int xfs_attr_remove_int(struct xfs_inode *, const char *, int, int); -int xfs_attr_list_int(struct xfs_attr_list_context *); int xfs_attr_inactive(struct xfs_inode *dp); =20 int xfs_attr_shortform_getvalue(struct xfs_da_args *); -int xfs_attr_fetch(struct xfs_inode *, const char *, int, - char *, int *, int, struct cred *); +int xfs_attr_fetch(struct xfs_inode *, struct xfs_name *, char *, int *, i= nt); int xfs_attr_rmtval_get(struct xfs_da_args *args); =20 #endif /* __XFS_ATTR_H__ */ Index: kern_ci/fs/xfs/xfs_vnodeops.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_vnodeops.h +++ kern_ci/fs/xfs/xfs_vnodeops.h @@ -50,7 +50,7 @@ int xfs_rename(struct xfs_inode *src_dp, struct xfs_inode *src_ip, struct xfs_inode *target_dp, struct xfs_name *target_name, struct xfs_inode *target_ip); int xfs_attr_get(struct xfs_inode *ip, const char *name, char *value, - int *valuelenp, int flags, cred_t *cred); + int *valuelenp, int flags); int xfs_attr_set(struct xfs_inode *dp, const char *name, char *value, int valuelen, int flags); int xfs_attr_remove(struct xfs_inode *dp, const char *name, int flags); ------------e4TOE9pR9W1Pc1L6bdFs6s-- From owner-xfs@oss.sgi.com Wed Apr 16 20:51:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 16 Apr 2008 20:51:32 -0700 (PDT) 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.0 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 m3H3pAB3008745 for ; Wed, 16 Apr 2008 20:51:13 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA04113; Thu, 17 Apr 2008 13:51:46 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3H3pjsT136101831; Thu, 17 Apr 2008 13:51:46 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3H3piHf100522937; Thu, 17 Apr 2008 13:51:44 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 17 Apr 2008 13:51:44 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: oss git tree busted.... Message-ID: <20080417035144.GU108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15445 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Lachlan, Looks like the last update fom the ptools tree missed a bunch of mods. This (log of all changes with fs/xfs): http://oss.sgi.com/cgi-bin/gitweb.cgi?p=xfs/xfs-2.6.git;a=history;f=fs/xfs;hb=HEAD Shows: 6 days ago Eric Sandeen [XFS] Ensure "both" features2 slots are consistent 6 days ago David Chinner [XFS] Fix superblock features2 field alignment problem 6 days ago Eric Sandeen [XFS] remove shouting-indirection macros from xfs_sb.h 7 days ago David Chinner [XFS] Catch log unmount failures. 7 days ago David Chinner [XFS] Sanitise xfs_log_force error checking. 7 days ago David Chinner [XFS] Check for errors when changing buffer pointers. 7 days ago David Chinner [XFS] Don't allow silent errors in xfs_inactive(). 7 days ago David Chinner [XFS] Catch errors from xfs_imap(). 7 days ago David Chinner [XFS] xaiki@sgi.com xfs_bulkstat_one_dinode() never ... 7 days ago David Chinner [XFS] xfs_iflush_fork() never returns an error. 7 days ago David Chinner [XFS] Catch unwritten extent conversion errors. 7 days ago David Chinner [XFS] xfs_bdwrite() does not return errors. .... It appears that most of the error checking changes I made have been pushed. Note that there's an error in one fo the titles that the scripts have not caught (the reviewers email address!). Can you fix this commit up? However the real problem is that there are several mods that have not been pushed: xfs-linux-melb:xfs-kern:30836a xfs-linux-melb:xfs-kern:30838a xfs-linux-melb:xfs-kern:30845a These are fixes to my original series, and without them you cannot mount an XFS filesystem at all. Can you please push these to the git tree ASAP? Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 16 22:36:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 16 Apr 2008 22:37:14 -0700 (PDT) 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 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 m3H5aqfB016642 for ; Wed, 16 Apr 2008 22:36:55 -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 PAA05836; Thu, 17 Apr 2008 15:37:27 +1000 Date: Thu, 17 Apr 2008 15:38:27 +1000 To: "David Chinner" Subject: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation From: "Barry Naujok" Organization: SGI Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062709.011126702@chook.melbourne.sgi.com> <20080403083151.GS103491721@sgi.com> Message-ID: In-Reply-To: <20080403083151.GS103491721@sgi.com> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m3H5avfB016651 X-archive-position: 15446 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Thu, 03 Apr 2008 18:31:51 +1000, David Chinner wrote: > On Wed, Apr 02, 2008 at 04:25:13PM +1000, Barry Naujok wrote: >> --- kern_ci.orig/fs/xfs/xfs_sb.h >> +++ kern_ci/fs/xfs/xfs_sb.h >> @@ -79,10 +79,18 @@ struct xfs_mount; >> #define XFS_SB_VERSION2_LAZYSBCOUNTBIT 0x00000002 /* Superblk counters >> */ >> #define XFS_SB_VERSION2_RESERVED4BIT 0x00000004 >> #define XFS_SB_VERSION2_ATTR2BIT 0x00000008 /* Inline attr rework */ >> +#define XFS_SB_VERSION2_UNICODEBIT 0x00000020 /* Unicode names */ >> >> -#define XFS_SB_VERSION2_OKREALFBITS \ >> +#ifdef CONFIG_XFS_UNICODE >> +# define XFS_SB_VERSION2_OKREALFBITS \ >> (XFS_SB_VERSION2_LAZYSBCOUNTBIT | \ >> + XFS_SB_VERSION2_UNICODEBIT | \ >> XFS_SB_VERSION2_ATTR2BIT) >> +#else >> +# define XFS_SB_VERSION2_OKREALFBITS \ >> + (XFS_SB_VERSION2_LAZYSBCOUNTBIT | \ >> + XFS_SB_VERSION2_ATTR2BIT) >> +#endif > > Regardless of whether CONFIG_XFS_UNICODE is defined or not, we should > be defining this as a valid bit. What we want is > xfs_sb_version_hasunicode() > to say "not supported" when CONFIG_XFS_UNICODE is not defined. > > IOWs, if the sb_cftino field is defined in the superblock, > XFS_SB_VERSION2_UNICODEBIT must be defined as well. Either this or xfs_sb_good_version() has to be modified to support CONFIG_XFS_UNICODE=n correctly and that such a kernel will refuse to mount a Unicode XFS filesystem. Barry. From owner-xfs@oss.sgi.com Wed Apr 16 23:36:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 16 Apr 2008 23:36:20 -0700 (PDT) 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 m3H6ZxQ9020842 for ; Wed, 16 Apr 2008 23:36:01 -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 QAA06801; Thu, 17 Apr 2008 16:36:31 +1000 Message-ID: <4806EFF8.4000908@sgi.com> Date: Thu, 17 Apr 2008 16:36:40 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: oss git tree busted.... References: <20080417035144.GU108924158@sgi.com> In-Reply-To: <20080417035144.GU108924158@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15447 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs I pushed all available changes, at the time I did the merge, into the master branch so all these changes must have been checked in after (or during) the last merge. I'll run another merge now. David Chinner wrote: > Lachlan, > > Looks like the last update fom the ptools tree missed a bunch of mods. > > This (log of all changes with fs/xfs): > > http://oss.sgi.com/cgi-bin/gitweb.cgi?p=xfs/xfs-2.6.git;a=history;f=fs/xfs;hb=HEAD > > Shows: > > 6 days ago Eric Sandeen [XFS] Ensure "both" features2 slots are consistent > 6 days ago David Chinner [XFS] Fix superblock features2 field alignment problem > 6 days ago Eric Sandeen [XFS] remove shouting-indirection macros from xfs_sb.h > 7 days ago David Chinner [XFS] Catch log unmount failures. > 7 days ago David Chinner [XFS] Sanitise xfs_log_force error checking. > 7 days ago David Chinner [XFS] Check for errors when changing buffer pointers. > 7 days ago David Chinner [XFS] Don't allow silent errors in xfs_inactive(). > 7 days ago David Chinner [XFS] Catch errors from xfs_imap(). > 7 days ago David Chinner [XFS] xaiki@sgi.com xfs_bulkstat_one_dinode() never ... > 7 days ago David Chinner [XFS] xfs_iflush_fork() never returns an error. > 7 days ago David Chinner [XFS] Catch unwritten extent conversion errors. > 7 days ago David Chinner [XFS] xfs_bdwrite() does not return errors. > .... > > It appears that most of the error checking changes I made have been > pushed. Note that there's an error in one fo the titles that the > scripts have not caught (the reviewers email address!). Can you fix > this commit up? > > However the real problem is that there are several mods that have > not been pushed: > > xfs-linux-melb:xfs-kern:30836a > xfs-linux-melb:xfs-kern:30838a > xfs-linux-melb:xfs-kern:30845a > > These are fixes to my original series, and without them you > cannot mount an XFS filesystem at all. Can you please push these > to the git tree ASAP? > > Cheers, > > Dave. From owner-xfs@oss.sgi.com Thu Apr 17 00:12:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 17 Apr 2008 00:12:55 -0700 (PDT) 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 m3H7CYv1025701 for ; Thu, 17 Apr 2008 00:12:36 -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 RAA07519; Thu, 17 Apr 2008 17:13:10 +1000 Message-ID: <4806F88E.3060809@sgi.com> Date: Thu, 17 Apr 2008 17:13:18 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: lachlan@sgi.com CC: David Chinner , xfs-dev , xfs-oss Subject: Re: oss git tree busted.... References: <20080417035144.GU108924158@sgi.com> <4806EFF8.4000908@sgi.com> In-Reply-To: <4806EFF8.4000908@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15448 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs The master branch should now be fully up-to-date. The three mods listed below were in the merge. Lachlan McIlroy wrote: > I pushed all available changes, at the time I did the merge, into the > master > branch so all these changes must have been checked in after (or during) the > last merge. I'll run another merge now. > > David Chinner wrote: >> Lachlan, >> >> Looks like the last update fom the ptools tree missed a bunch of mods. >> >> This (log of all changes with fs/xfs): >> >> http://oss.sgi.com/cgi-bin/gitweb.cgi?p=xfs/xfs-2.6.git;a=history;f=fs/xfs;hb=HEAD >> >> >> Shows: >> >> 6 days ago Eric Sandeen [XFS] Ensure "both" features2 slots are >> consistent >> 6 days ago David Chinner [XFS] Fix superblock features2 field >> alignment problem >> 6 days ago Eric Sandeen [XFS] remove shouting-indirection macros >> from xfs_sb.h >> 7 days ago David Chinner [XFS] Catch log unmount failures. >> 7 days ago David Chinner [XFS] Sanitise xfs_log_force error checking. >> 7 days ago David Chinner [XFS] Check for errors when changing >> buffer pointers. >> 7 days ago David Chinner [XFS] Don't allow silent errors in >> xfs_inactive(). >> 7 days ago David Chinner [XFS] Catch errors from xfs_imap(). >> 7 days ago David Chinner [XFS] xaiki@sgi.com >> xfs_bulkstat_one_dinode() never ... >> 7 days ago David Chinner [XFS] xfs_iflush_fork() never returns an >> error. >> 7 days ago David Chinner [XFS] Catch unwritten extent conversion >> errors. >> 7 days ago David Chinner [XFS] xfs_bdwrite() does not return errors. >> .... >> >> It appears that most of the error checking changes I made have been >> pushed. Note that there's an error in one fo the titles that the >> scripts have not caught (the reviewers email address!). Can you fix >> this commit up? >> >> However the real problem is that there are several mods that have >> not been pushed: >> >> xfs-linux-melb:xfs-kern:30836a >> xfs-linux-melb:xfs-kern:30838a >> xfs-linux-melb:xfs-kern:30845a >> >> These are fixes to my original series, and without them you >> cannot mount an XFS filesystem at all. Can you please push these >> to the git tree ASAP? >> >> Cheers, >> >> Dave. > > > From owner-xfs@oss.sgi.com Thu Apr 17 01:03:47 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 17 Apr 2008 01:04:04 -0700 (PDT) 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=BAYES_20 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 m3H83h2G001143 for ; Thu, 17 Apr 2008 01:03:46 -0700 X-ASG-Debug-ID: 1208419459-651802990000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from rgminet01.oracle.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EA1A9A19771 for ; Thu, 17 Apr 2008 01:04:19 -0700 (PDT) Received: from rgminet01.oracle.com (rgminet01.oracle.com [148.87.113.118]) by cuda.sgi.com with ESMTP id 70JoSpm51bFIktNw for ; Thu, 17 Apr 2008 01:04:19 -0700 (PDT) Received: from oss.oracle.com (oss.oracle.com [141.146.12.120]) by rgminet01.oracle.com (Switch-3.2.4/Switch-3.1.6) with ESMTP id m3H84H2A030432 for ; Thu, 17 Apr 2008 02:04:18 -0600 Received: from localhost ([127.0.0.1] helo=oss.oracle.com) by oss.oracle.com with esmtp (Exim 4.63) (envelope-from ) id 1JmP6P-0007Iz-Os for linux-xfs@oss.sgi.com; Thu, 17 Apr 2008 01:04:17 -0700 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-ASG-Orig-Subj: Your message to Ocfs2-users awaits moderator approval Subject: Your message to Ocfs2-users awaits moderator approval From: ocfs2-users-bounces@oss.oracle.com To: linux-xfs@oss.sgi.com Message-ID: Date: Thu, 17 Apr 2008 01:04:16 -0700 Precedence: bulk X-BeenThere: ocfs2-users@oss.oracle.com X-Mailman-Version: 2.1.9 X-Brightmail-Tracker: AAAAAQAAAAI= X-Whitelist: TRUE X-Barracuda-Connect: rgminet01.oracle.com[148.87.113.118] X-Barracuda-Start-Time: 1208419461 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.47 X-Barracuda-Spam-Status: No, SCORE=-1.47 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48018 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.55 NO_REAL_NAME From: does not include a real name X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15449 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: ocfs2-users-bounces@oss.oracle.com Precedence: bulk X-list: xfs Your mail to 'Ocfs2-users' with the subject RETURNED MAIL: DATA FORMAT ERROR Is being held until the list moderator can review it for approval. The reason it is being held: SpamAssassin identified this message as possible spam (score 5.6) Either the message will get posted to the list, or you will receive notification of the moderator's decision. If you would like to cancel this posting, please visit the following URL: http://oss.oracle.com/mailman/confirm/ocfs2-users/36842e43fa4fce6c294e142100f86919bda44766 From owner-xfs@oss.sgi.com Thu Apr 17 01:48:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 17 Apr 2008 01:49:16 -0700 (PDT) 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.0 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 m3H8ms2A003719 for ; Thu, 17 Apr 2008 01:48:57 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id SAA09363; Thu, 17 Apr 2008 18:49:29 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3H8nRsT136069470; Thu, 17 Apr 2008 18:49:27 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3H8nORt128711032; Thu, 17 Apr 2008 18:49:24 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 17 Apr 2008 18:49:24 +1000 From: David Chinner To: Barry Naujok Cc: David Chinner , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH 5/7] XFS: Unicode case-insensitive lookup implementation Message-ID: <20080417084924.GX108924158@sgi.com> References: <20080402062508.017738664@chook.melbourne.sgi.com> <20080402062709.011126702@chook.melbourne.sgi.com> <20080403083151.GS103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15450 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, Apr 17, 2008 at 03:38:27PM +1000, Barry Naujok wrote: > On Thu, 03 Apr 2008 18:31:51 +1000, David Chinner wrote: > > >On Wed, Apr 02, 2008 at 04:25:13PM +1000, Barry Naujok wrote: > >>--- kern_ci.orig/fs/xfs/xfs_sb.h > >>+++ kern_ci/fs/xfs/xfs_sb.h > >>@@ -79,10 +79,18 @@ struct xfs_mount; > >> #define XFS_SB_VERSION2_LAZYSBCOUNTBIT 0x00000002 /* Superblk > >> counters */ > >> #define XFS_SB_VERSION2_RESERVED4BIT 0x00000004 > >> #define XFS_SB_VERSION2_ATTR2BIT 0x00000008 /* Inline attr > >> rework */ > >>+#define XFS_SB_VERSION2_UNICODEBIT 0x00000020 /* Unicode names */ > >> > >>-#define XFS_SB_VERSION2_OKREALFBITS \ > >>+#ifdef CONFIG_XFS_UNICODE > >>+# define XFS_SB_VERSION2_OKREALFBITS \ > >> (XFS_SB_VERSION2_LAZYSBCOUNTBIT | \ > >>+ XFS_SB_VERSION2_UNICODEBIT | \ > >> XFS_SB_VERSION2_ATTR2BIT) > >>+#else > >>+# define XFS_SB_VERSION2_OKREALFBITS \ > >>+ (XFS_SB_VERSION2_LAZYSBCOUNTBIT | \ > >>+ XFS_SB_VERSION2_ATTR2BIT) > >>+#endif > > > >Regardless of whether CONFIG_XFS_UNICODE is defined or not, we should > >be defining this as a valid bit. What we want is > >xfs_sb_version_hasunicode() > >to say "not supported" when CONFIG_XFS_UNICODE is not defined. > > > >IOWs, if the sb_cftino field is defined in the superblock, > >XFS_SB_VERSION2_UNICODEBIT must be defined as well. > > Either this or xfs_sb_good_version() has to be modified to support > CONFIG_XFS_UNICODE=n correctly and that such a kernel will refuse to > mount a Unicode XFS filesystem. Do the check in the same place we checkfor block size > page size. i.e. in xfs_mount_validate_sb() add: #ifndef CONFIG_XFS_UNICODE if (xfs_sb_version_hasunicode()) { /* big fat warning to syslog */ return XFS_ERROR(ENOSYS); } #endif Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Thu Apr 17 02:00:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 17 Apr 2008 02:00:35 -0700 (PDT) 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.0 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 m3H90C9k004809 for ; Thu, 17 Apr 2008 02:00:15 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id TAA09653; Thu, 17 Apr 2008 19:00:52 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3H90psT136117355; Thu, 17 Apr 2008 19:00:51 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3H90oAm136170777; Thu, 17 Apr 2008 19:00:50 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 17 Apr 2008 19:00:50 +1000 From: David Chinner To: Lachlan McIlroy Cc: David Chinner , xfs-dev , xfs-oss Subject: Re: oss git tree busted.... Message-ID: <20080417090050.GY108924158@sgi.com> References: <20080417035144.GU108924158@sgi.com> <4806EFF8.4000908@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4806EFF8.4000908@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15451 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, Apr 17, 2008 at 04:36:40PM +1000, Lachlan McIlroy wrote: > I pushed all available changes, at the time I did the merge, into the master > branch so all these changes must have been checked in after (or during) the > last merge. I'll run another merge now. Interesting - one of the bug fixes went in in the middle of the series, but it was missed while all the subsequent mods were picked up. Very strange.... Anyway, looks like it's all up to date now. Thanks. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Thu Apr 17 11:26:29 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 17 Apr 2008 11:26:49 -0700 (PDT) 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 m3HIQRWL015628 for ; Thu, 17 Apr 2008 11:26:28 -0700 X-ASG-Debug-ID: 1208456822-04e001230000-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 A6EAE1584743; Thu, 17 Apr 2008 11:27:02 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id cB1wW6hEpg84N1fE; Thu, 17 Apr 2008 11:27:02 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JmYp4-0003Yw-JL; Thu, 17 Apr 2008 18:27:02 +0000 Date: Thu, 17 Apr 2008 14:27:02 -0400 From: Christoph Hellwig To: Barry Naujok Cc: "xfs@oss.sgi.com" , xfs-dev X-ASG-Orig-Subj: Re: [REVIEW] - cleanup xfs_attr a bit Subject: Re: [REVIEW] - cleanup xfs_attr a bit Message-ID: <20080417182702.GA7154@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.17 (2007-11-01) 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: 1208456827 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.1, rules version 3.1.48055 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15452 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, Apr 17, 2008 at 12:35:36PM +1000, Barry Naujok wrote: > This patch starts using struct xfs_name more for the xattr code and > is another step for using xfs_name in xfs_da_args. > > Also, the cred parameter is removed from xfs_attr_get and xfs_attr_fetch. Looks good, but I'd really not expected a function called xfs_attr_name_to_name to do the shutdown check. Either keep it in the callers or give the function a different name. From owner-xfs@oss.sgi.com Thu Apr 17 12:36:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 17 Apr 2008 12:37:11 -0700 (PDT) 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=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 m3HJaeYO024131 for ; Thu, 17 Apr 2008 12:36:43 -0700 X-ASG-Debug-ID: 1208461040-079b031f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from perch.m2000.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6F70B158526E for ; Thu, 17 Apr 2008 12:37:20 -0700 (PDT) Received: from perch.m2000.com (adsl-71-159-205-6.dsl.pltn13.sbcglobal.net [71.159.205.6]) by cuda.sgi.com with ESMTP id 5FBkjEbOXs2OexY4 for ; Thu, 17 Apr 2008 12:37:20 -0700 (PDT) Received: from [192.168.1.225] (unknown [192.168.3.254]) by perch.m2000.com (Postfix) with ESMTP id C0E1B12028F8A; Thu, 17 Apr 2008 12:37:15 -0700 (PDT) Message-ID: <4807A6E8.6010102@m2000.com> Date: Thu, 17 Apr 2008 12:37:12 -0700 From: Adam Schrotenboer User-Agent: Thunderbird 2.0.0.12 (Windows/20080213) MIME-Version: 1.0 To: David Chinner CC: "Josef 'Jeff' Sipek" , NeilBrown , "J. Bruce Fields" , xfs@oss.sgi.com, Jesper Juhl , Trond Myklebust , linux-kernel@vger.kernel.org, linux-nfs@vger.kernel.org, Thomas Daniel , Frederic Revenu , Jeff Doan X-ASG-Orig-Subj: Re: [opensuse] nfs_update_inode: inode X mode changed, Y to Z Subject: Re: [opensuse] nfs_update_inode: inode X mode changed, Y to Z References: <9a8748490803121516u36395872i70cc88b0439adc74@mail.gmail.com> <18394.1501.991087.80264@notabene.brown> <47DAEFD0.9020407@m2000.com> <47E92F8E.7030504@m2000.com> <20080325190943.GF2237@fieldses.org> <32953.192.168.1.70.1206477121.squirrel@neil.brown.name> <20080325212425.GA20257@josefsipek.net> <34178.192.168.1.70.1206481102.squirrel@neil.brown.name> <20080325221321.GC20257@josefsipek.net> <20080326033738.GX103491721@sgi.com> <20080326050208.GH108924158@sgi.com> In-Reply-To: <20080326050208.GH108924158@sgi.com> X-Enigmail-Version: 0.95.6 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enig1BF6A4C9FFDE6A417CF8AEFD" X-Barracuda-Connect: adsl-71-159-205-6.dsl.pltn13.sbcglobal.net[71.159.205.6] X-Barracuda-Start-Time: 1208461040 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.92 X-Barracuda-Spam-Status: No, SCORE=-1.92 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48058 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15453 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: adam@m2000.com Precedence: bulk X-list: xfs This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig1BF6A4C9FFDE6A417CF8AEFD Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: quoted-printable David Chinner wrote: > On Wed, Mar 26, 2008 at 02:37:38PM +1100, David Chinner wrote: >=20=20=20 >> Given this state of affairs (i.e. HSM using ikeep), I guess we can do >> anything we want for the noikeep case. I'll cook up a patch that does >> something similar to ext3 generation numbers for the initial seeding.... >>=20=20=20=20=20 > > Patch below for comments. It passes xfsqa, but there's no userspace > support for it yet. 2.6.26 is the likely target for this change. >=20=20=20 2.6.26 merge window begins now. Has this been pushed yet? Is it in=20 linux-next tree ? --------------enig1BF6A4C9FFDE6A417CF8AEFD Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (MingW32) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFIB6bsyWYDdvnGArwRAgWsAJ9t0nH7ajRgEVsj/2t/tIa6MO+TRwCgnChk IpX4Rz5Lfw83P0S23KKixBc= =pnkR -----END PGP SIGNATURE----- --------------enig1BF6A4C9FFDE6A417CF8AEFD-- From owner-xfs@oss.sgi.com Thu Apr 17 17:06:36 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 17 Apr 2008 17:06:57 -0700 (PDT) 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.0 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 m3I06VIY008909 for ; Thu, 17 Apr 2008 17:06:34 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA28840; Fri, 18 Apr 2008 10:07:03 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3I070sT136006542; Fri, 18 Apr 2008 10:07:02 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3I06vS9137102486; Fri, 18 Apr 2008 10:06:57 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Fri, 18 Apr 2008 10:06:57 +1000 From: David Chinner To: Denys Fedoryshchenko Cc: linux-kernel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: 2.6.25 released with bug, which leads to XFS crash? Message-ID: <20080418000657.GC108924158@sgi.com> References: <200804170949.36864.denys@visp.net.lb> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200804170949.36864.denys@visp.net.lb> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15455 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, Apr 17, 2008 at 09:49:36AM +0300, Denys Fedoryshchenko wrote: > Hi again > > I reported about http://bugzilla.kernel.org/show_bug.cgi?id=10421 , and it > is triggerable on different loaded servers with XFS (squid with aufs), > just it is happening even on heavy load after 1-2 days. IMHO such bugs is > critical (same as getting kernel panic, and etc), Well, yes, and we treat shutdown bugs as such. A filesystem shutdown is effectively a filesystem panic and is indicative of either a corruption or a bug. The reality is that it takes time to triage such a problem that only occurs on one workload on one set of identical machines once every day or two. This does not make the problem a release blocker, though. The other side of it is that problems like this in Linux are often the result of a bug in a lower layer and not XFS itself. Given this particular problem seems to be memory corruption it could be anything that is causing it.... > cause they are unrecoverable, causing minor filesystem corruption, and only > way to fix them - wakeup sysadmin. Worst thing, it is hapenning at night, > when i restart squid, and probably it is doing agressive unlinking stale > cache entries. It doesn't do panic, or even oops, but filesystem will be > disconnected, > and squid will remain in loop trying to restart. Sure it is > easy to restart it, but maybe it has to be OOPS? so at least i can do > sysctl -w kernel.panic_on_oops = 1, and FS will be recovered on reboot. Rather than fearmongering, perhaps you should ask on the XFS list (xfs@oss.sgi.com) whether anything like this can be done. Then you might have learnt about Documentation/filesystems/xfs.txt and /proc/sys/fs/xfs/panic_mask: fs.xfs.panic_mask (Min: 0 Default: 0 Max: 127) Causes certain error conditions to call BUG(). Value is a bitmask; AND together the tags which represent errors which should cause panics: > Just want to warn people who is using XFS on loaded servers to keep > attention while using 2.6.25, and if you face same bug, report to bugzilla. Actually, I'd much prefer XFS bug reports to go to xfs@oss.sgi.com rather than the kernel bugzilla - that way most of the XFS community will see the bug report and the triage being done and then there's no need for spamming lkml like this.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Thu Apr 17 17:06:29 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 17 Apr 2008 17:06:45 -0700 (PDT) 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 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 m3I06PdE008894 for ; Thu, 17 Apr 2008 17:06: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 KAA28834; Fri, 18 Apr 2008 10:06:55 +1000 To: "Christoph Hellwig" Subject: Re: [REVIEW] - cleanup xfs_attr a bit From: "Barry Naujok" Organization: SGI Cc: "xfs@oss.sgi.com" , xfs-dev Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080417182702.GA7154@infradead.org> Content-Transfer-Encoding: 7bit Date: Fri, 18 Apr 2008 10:10:22 +1000 Message-ID: In-Reply-To: <20080417182702.GA7154@infradead.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15454 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Fri, 18 Apr 2008 04:27:02 +1000, Christoph Hellwig wrote: > On Thu, Apr 17, 2008 at 12:35:36PM +1000, Barry Naujok wrote: >> This patch starts using struct xfs_name more for the xattr code and >> is another step for using xfs_name in xfs_da_args. >> >> Also, the cred parameter is removed from xfs_attr_get and >> xfs_attr_fetch. > > Looks good, but I'd really not expected a function called > xfs_attr_name_to_name to do the shutdown check. Either keep it in the > callers or give the function a different name. I agree with that sentiment, just couldn't think of a better name :) From owner-xfs@oss.sgi.com Thu Apr 17 20:16:56 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 17 Apr 2008 20:17:14 -0700 (PDT) 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.0 required=5.0 tests=BAYES_50 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 m3I3GrY1018222 for ; Thu, 17 Apr 2008 20:16:56 -0700 X-ASG-Debug-ID: 1208488652-6de3018e0000-dIjHVC X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from list.audettemedia.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C90DF10A0315 for ; Thu, 17 Apr 2008 20:17:32 -0700 (PDT) Received: from list.audettemedia.com (94.b182.bendtel.net [66.39.182.94]) by cuda.sgi.com with ESMTP id uB4YbtlzogelEq7i for ; Thu, 17 Apr 2008 20:17:32 -0700 (PDT) Received: from spudmonk (66.39.182.94) by list.audettemedia.com (LSMTP for Windows NT v1.1b) with SMTP id <2.00282DF4@list.audettemedia.com>; Thu, 17 Apr 2008 20:24:05 -0700 Date: Thu, 17 Apr 2008 20:24:05 -0700 From: "L-Soft list server at AudetteMedia (1.8d)" X-ASG-Orig-Subj: Command confirmation request (A71B3A69) Subject: Command confirmation request (A71B3A69) To: linux-xfs@oss.sgi.com X-LSV-ListID: COOLTRICKS X-Barracuda-Connect: 94.b182.bendtel.net[66.39.182.94] X-Barracuda-Start-Time: 1208488653 Message-Id: <20080418031732.C90DF10A0315@cuda.sgi.com> X-Barracuda-Bayes: INNOCENT GLOBAL 0.4990 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.91 X-Barracuda-Spam-Status: No, SCORE=0.91 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=FROM_NO_LOWER, MSGID_FROM_MTA_ID X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48089 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 FROM_NO_LOWER From address has no lower-case characters 0.70 MSGID_FROM_MTA_ID Message-Id for external message added locally X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15456 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: LISTSERV@LIST.AUDETTEMEDIA.COM Precedence: bulk X-list: xfs Your command: JOIN COOLTRICKS (no name available) has been received. You must now reply to this message (as explained below) to complete your subscription. The purpose of this confirmation procedure is to check that the address LISTSERV is about to add to the list for your subscription is reachable. This is a typical procedure for high-volume lists and all new subscribers are subjected to it - you are not being singled out. Every effort has been made to make this verification as simple and painless as possible. Thanks in advance for your cooperation. To confirm the execution of your command, simply point your browser to the following URL: http://list.audettemedia.com/SCRIPTS/WA.EXE?OK=A71B3A69&L=COOLTRICKS Alternatively, if you have no WWW access, you can reply to the present message and type "ok" (without the quotes) as the text of your message. Just the word "ok" - do not retype the command. This procedure will work with any mail program that fully conforms to the Internet standards for electronic mail. If you receive an error message, try sending a new message to LISTSERV@LIST.AUDETTEMEDIA.COM (without using the "reply" function - this is very important) and type "ok A71B3A69" as the text of your message. Finally, your command will be cancelled automatically if LISTSERV does not receive your confirmation within 120h. After that time, you must start over and resend the command to get a new confirmation code. If you change your mind and decide that you do NOT want to confirm the command, simply discard the present message and let the request expire on its own. From owner-xfs@oss.sgi.com Thu Apr 17 22:05:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 17 Apr 2008 22:06:42 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,WEIRD_PORT 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 m3I55Jbm027848 for ; Thu, 17 Apr 2008 22:05:21 -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 PAA03588; Fri, 18 Apr 2008 15:05:47 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id 0E70F58C4C15; Fri, 18 Apr 2008 15:05:46 +1000 (EST) Date: Fri, 18 Apr 2008 15:05:46 +1000 To: torvalds@linux-foundation.org Cc: linux-kernel@vger.kernel.org, xfs@oss.sgi.com, akpm@linux-foundation.org Subject: [GIT PULL] XFS update for 2.6.26-rc1 User-Agent: nail 11.25 7/29/05 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Message-Id: <20080418050547.0E70F58C4C15@chook.melbourne.sgi.com> From: lachlan@sgi.com (Lachlan McIlroy) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m3I55Pbm027858 X-archive-position: 15457 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Please pull from the for-linus branch: git pull git://oss.sgi.com:8090/xfs/xfs-2.6.git for-linus This will update the following files: Documentation/filesystems/xfs.txt | 15 +- fs/xfs/Kconfig | 12 - fs/xfs/linux-2.6/kmem.c | 6 +- fs/xfs/linux-2.6/xfs_aops.c | 12 +- fs/xfs/linux-2.6/xfs_buf.c | 8 +- fs/xfs/linux-2.6/xfs_buf.h | 8 +- fs/xfs/linux-2.6/xfs_cred.h | 2 +- fs/xfs/linux-2.6/xfs_export.c | 14 +- fs/xfs/linux-2.6/xfs_file.c | 13 +- fs/xfs/linux-2.6/xfs_fs_subr.c | 36 +-- fs/xfs/linux-2.6/xfs_ioctl.c | 676 ++++++++++++++---------------- fs/xfs/linux-2.6/xfs_iops.c | 223 ++++++----- fs/xfs/linux-2.6/xfs_linux.h | 1 - fs/xfs/linux-2.6/xfs_lrw.c | 70 ++-- fs/xfs/linux-2.6/xfs_lrw.h | 3 +- fs/xfs/linux-2.6/xfs_stats.h | 4 +- fs/xfs/linux-2.6/xfs_super.c | 27 +- fs/xfs/linux-2.6/xfs_super.h | 8 +- fs/xfs/linux-2.6/xfs_vfs.h | 1 - fs/xfs/linux-2.6/xfs_vnode.h | 30 +-- fs/xfs/quota/xfs_dquot.c | 20 +- fs/xfs/quota/xfs_dquot_item.c | 14 +- fs/xfs/quota/xfs_qm.c | 76 ++-- fs/xfs/quota/xfs_qm.h | 2 +- fs/xfs/quota/xfs_qm_stats.h | 4 +- fs/xfs/quota/xfs_qm_syscalls.c | 44 ++- fs/xfs/support/ktrace.c | 37 +- fs/xfs/support/ktrace.h | 3 +- fs/xfs/xfs.h | 2 +- fs/xfs/xfs_acl.c | 16 +- fs/xfs/xfs_alloc.c | 65 ++-- fs/xfs/xfs_attr.c | 10 +- fs/xfs/xfs_attr_leaf.c | 2 +- fs/xfs/xfs_bmap.c | 59 ++-- fs/xfs/xfs_bmap.h | 2 +- fs/xfs/xfs_bmap_btree.c | 54 ++- fs/xfs/xfs_buf_item.c | 7 +- fs/xfs/xfs_dir2.c | 62 ++-- fs/xfs/xfs_dir2.h | 12 +- fs/xfs/xfs_filestream.c | 2 +- fs/xfs/xfs_ialloc.c | 44 ++- fs/xfs/xfs_iget.c | 49 +-- fs/xfs/xfs_inode.c | 823 ++++++++++++++++++------------------- fs/xfs/xfs_inode.h | 23 +- fs/xfs/xfs_inode_item.c | 8 +- fs/xfs/xfs_inode_item.h | 8 + fs/xfs/xfs_iomap.c | 7 +- fs/xfs/xfs_itable.c | 7 +- fs/xfs/xfs_log.c | 259 ++++-------- fs/xfs/xfs_log.h | 5 +- fs/xfs/xfs_log_priv.h | 93 +++-- fs/xfs/xfs_log_recover.c | 123 ++++-- fs/xfs/xfs_mount.c | 66 ++-- fs/xfs/xfs_mount.h | 30 +- fs/xfs/xfs_rename.c | 121 ++---- fs/xfs/xfs_rtalloc.c | 41 ++- fs/xfs/xfs_rw.c | 8 +- fs/xfs/xfs_trans.h | 8 +- fs/xfs/xfs_trans_ail.c | 151 +++---- fs/xfs/xfs_trans_buf.c | 15 +- fs/xfs/xfs_types.h | 5 + fs/xfs/xfs_utils.c | 26 +-- fs/xfs/xfs_utils.h | 15 +- fs/xfs/xfs_vfsops.c | 76 ++--- fs/xfs/xfs_vnodeops.c | 505 +++++++---------------- fs/xfs/xfs_vnodeops.h | 33 +- 66 files changed, 1907 insertions(+), 2304 deletions(-) through these commits: commit 65e67f5165c8a156b34ee7adf65d5ed3b16a910d Author: Lachlan McIlroy Date: Fri Apr 18 12:59:45 2008 +1000 [XFS] Fix merge failure commit 3b2816be271b8b364294a5b48721a3e68af46cfa Author: Lachlan McIlroy Date: Fri Apr 18 12:43:35 2008 +1000 [XFS] The forward declarations for the xfs_ioctl() helpers and the associated comment about gcc behavior really aren't needed; all of these functions are marked STATIC which includes noinline, and the stack usage won't be a problem. This effectively just removes the forward declarations and moves xfs_ioctl() back to the end of the file. SGI-PV: 971186 SGI-Modid: xfs-linux-melb:xfs-kern:30534a Signed-off-by: Eric Sandeen Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit f6e9f28865552bd9d79a9df93cf120436b073223 Author: Josef Sipek Date: Fri Apr 11 17:11:02 2008 +1000 [XFS] Update XFS documentation for noikeep/ikeep. Mention how DMAPI affects default for noikeep. Slightly modified since Josef's patch was based on an old xfs.txt prior to Dave's (dgc) checkin which missed going to oss. Signed-off-by: Josef Sipek Signed-off-by: Tim Shimmin commit 033bfb1a65242e0d60e6fc991cd9b3553053d334 Author: David Chinner Date: Fri Apr 11 17:05:49 2008 +1000 [XFS] Update XFS Documentation for ikeep and ihashsize Update xfs docs for: * In memory inode hashes has been removed. * noikeep is now the default. SGI-PV: 969561 SGI-Modid: 2.6.x-xfs-melb:linux:29481b Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Tim Shimmin commit e687330b5ed1ea899fdaf0dea50aba196b6e019a Author: Donald Douwsma Date: Thu Apr 17 16:50:28 2008 +1000 [XFS] Remove unused HAVE_SPLICE macro. HAVE_SPLICE was part of the infrastructure for building 2.4 and 2.6 kernels out of the same tree. Now we don't build 2.4 kernels this SGI-PV: 971046 SGI-Modid: xfs-linux-melb:xfs-kern:30878a Signed-off-by: Donald Douwsma Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit f7d3c34788696f5ba9ac9fa414ad80e2a91d4b2e Author: Eric Sandeen Date: Thu Apr 17 16:50:22 2008 +1000 [XFS] Remove CONFIG_XFS_SECURITY. There is no point to the CONFIG_XFS_SECURITY option; it disables the ability to set security attributes at runtime, but it does not actually slim down or remove any code for runtime. Just remove it and always allow security attributes to be set. SGI-PV: 980310 SGI-Modid: xfs-linux-melb:xfs-kern:30877a Signed-off-by: Eric Sandeen Signed-off-by: Tim Shimmin Signed-off-by: Lachlan McIlroy commit 6d1337b29bf09a97682d39db36ac2d0dfc6659c0 Author: Tim Shimmin Date: Thu Apr 17 16:50:16 2008 +1000 [XFS] xfs_bmap_compute_maxlevels should be based on di_forkoff Fix up xfs_bmap_compute_maxlevels() to account for the case when we go from using attr2 to using attr1. In that case attr1 will no longer necessarily be at m_attr_offset>>3, but could be at a different value for di_forkoff. Therefore, we return the worst case scenario using MINDBTPTRS and MINABTPTRS, as this function is used for determining the maximum log space. SGI-PV: 979606 SGI-Modid: xfs-linux-melb:xfs-kern:30862a Signed-off-by: Tim Shimmin Signed-off-by: Eric Sandeen Signed-off-by: Lachlan McIlroy commit cb49dbb130e17a6f9af4cb4714cf6976cf09afdf Author: Eric Sandeen Date: Thu Apr 17 16:50:09 2008 +1000 [XFS] Always use di_forkoff when checking for attr space. In the case where we mount a filesystem which was previously using the attr2 format as attr1, returning the default mp->m_attroffset instead of the per-inode di_forkoff for inline attribute fit calculations, may result in corruption, if for example, the data fork is already taking more space than the default fork offset and we try to add an extended attribute. Fix tested by xfstests/186. SGI-PV: 979606 SGI-Modid: xfs-linux-melb:xfs-kern:30861a Signed-off-by: Eric Sandeen Signed-off-by: Tim Shimmin Signed-off-by: Lachlan McIlroy commit f6485057c5cfbc84e5eff639ddea1ce0d668607b Author: David Chinner Date: Thu Apr 17 16:50:04 2008 +1000 [XFS] Ensure the inode is joined in xfs_itruncate_finish On success, we still need to join the inode to the current transaction in xfs_itruncate_finish(). Fixes regression from error handling changes. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30845a Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 7e20694d91f817f8e9f62404aca793ae0df4d98a Author: David Chinner Date: Thu Apr 17 16:49:55 2008 +1000 [XFS] Remove periodic logging of in-core superblock counters. xfssyncd triggers the logging of superblock counters every 30s if the filesystem is made with lazy-count=1. This will prevent disks from idling and spinning down as there will be a log write every 30s. With the way counter recovery works for lazy-count=1, this code is unnecessary and provides no real benefit, so just remove it. SGI-PV: 980145 SGI-Modid: xfs-linux-melb:xfs-kern:30840a Signed-off-by: David Chinner Signed-off-by: Barry Naujok Signed-off-by: Lachlan McIlroy commit e6430037e9fd0b3d02ceaf5ab99bfe3ccb763be7 Author: David Chinner Date: Thu Apr 17 16:49:49 2008 +1000 [XFS] fix logic error in xfs_alloc_ag_vextent_near() Fix a logic error in xfs_alloc_ag_vextent_near(). This is a regression introduced by the error handling changes. SGI-PV: 890084 SGI-Modid: xfs-linux-melb:xfs-kern:30838a Signed-off-by: David Chinner Signed-off-by: Barry Naujok Signed-off-by: Lachlan McIlroy commit d4055947bd0913864f4d8ac96bf1197338071622 Author: David Chinner Date: Thu Apr 17 16:49:35 2008 +1000 [XFS] Don't error out on good I/Os. xfsbdstrat() made all I/Os error out, good or bad. Fix it. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30836a Signed-off-by: David Chinner Signed-off-by: Donald Douwsma Signed-off-by: Lachlan McIlroy commit 1bb7d6b5a82f1d9487fd44415484a368f7c87bed Author: David Chinner Date: Thu Apr 10 12:24:38 2008 +1000 [XFS] Catch log unmount failures. Unmounting the log can fail. unlikely, but it can. Catch all the error conditions an make sure it's propagated upwards. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30833a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit b911ca0472c3762d2bafc4d21e432a9056844064 Author: David Chinner Date: Thu Apr 10 12:24:30 2008 +1000 [XFS] Sanitise xfs_log_force error checking. xfs_log_force() is declared to return an error, but we almost never check it. We don't need to check it in most cases; if there's a log I/O error then we'll be shutting down the filesystem anyway and that means we'll catch the error somewhere else. However, on certain calls we should be returning an error - sync transactions, fsync, sync writes, etc. so this isn't a pure black and white distinction. Hence make xfs_log_force() a void function that issues a warning to the syslog on error, and call _xfs_log_force() in all the places where we actually care about the error status returned. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30832a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 234f56aca20a4f66b6ba3d3bf2787634dd9e0999 Author: David Chinner Date: Thu Apr 10 12:24:24 2008 +1000 [XFS] Check for errors when changing buffer pointers. xfs_buf_associate_memory() can fail, but the return is never checked. Propagate the error through XFS_BUF_SET_PTR() so that failures are detected. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30831a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 78e9da77f1bf265fe750b9223ec15707473fb6e8 Author: David Chinner Date: Thu Apr 10 12:24:17 2008 +1000 [XFS] Don't allow silent errors in xfs_inactive(). xfs_inactive() fails to report errors when committing the inactive transaction. Hence we can get silent failures either finishing off the truncation or committing the transaction. Even if we get errors, we need to continue, so simply warn loudly to the system if we get errors here. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30830a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 64bfe1bfae833e89ed77f72c61ded19f4b1976f8 Author: David Chinner Date: Thu Apr 10 12:24:10 2008 +1000 [XFS] Catch errors from xfs_imap(). Catch errors from xfs_imap() in log recovery when we might be trying to map an invalid inode number due to a corrupted log. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30829a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 7b07339048f7b020575706b492c004b5664b67ab Author: David Chinner Date: Thu Apr 10 12:24:04 2008 +1000 [XFS] xfs_bulkstat_one_dinode() never returns an error. Mark it void. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30828a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit e4ac967b117c5780760abbd9ae996210c31cb398 Author: David Chinner Date: Thu Apr 10 12:23:58 2008 +1000 [XFS] xfs_iflush_fork() never returns an error. xfs_iflush_fork() never returns an error. Mark it void and clean up the code calling it that checks for errors. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30827a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit cc88466f3f67bb16fc91b0b974e51c2a43a9e597 Author: David Chinner Date: Thu Apr 10 12:23:52 2008 +1000 [XFS] Catch unwritten extent conversion errors. On unwritten I/O completion, we fail to propagate an error when converting the extent to a written extent. This means that the I/O silently fails. propagate the error onto the ioend so that the inode is marked with an error appropriately. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30826a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 958d4ec606d4af590f86a601a238613f21e878ee Author: David Chinner Date: Thu Apr 10 12:23:46 2008 +1000 [XFS] xfs_bdwrite() does not return errors. xfs_bdwrite() cannot return an error; it only queues buffers to the delayed write list and as such never encounters anything that can fail. Mark it void. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30825a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit db7a19f2c89d99b66874a7e0c0dc681ff1f37b4e Author: David Chinner Date: Thu Apr 10 12:22:24 2008 +1000 [XFS] Ensure xfs_bawrite() errors are checked. xfs_bawrite() can return immediate error status on async writes. Unlike xfsbdstrat() we don't ever check the error on the buffer after the call, so we currently do not catch errors at all here. Ensure we catch and propagate or warn to the syslog about up-front async write errors. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30824a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit d64e31a2f53cdcb2f95b782196faacb0995ca0c0 Author: David Chinner Date: Thu Apr 10 12:22:17 2008 +1000 [XFS] Ensure errors from xfs_bdstrat() are correctly checked. xfsbdstrat() is declared to return an error. That is never checked because the error is propagated by the xfs_buf_t that is passed through the function. Mark xfsbdstrat() as returning void and comment the prototype on the methods needed for error checking. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30823a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 556b8b166c9514b5f940047a41dad8fe8cd9a778 Author: Barry Naujok Date: Thu Apr 10 12:22:07 2008 +1000 [XFS] remove bhv_vname_t and xfs_rename code SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30804a Signed-off-by: Barry Naujok Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 7c9ef85c5672ae316aafd7bbe0bbadebe90301e6 Author: David Chinner Date: Thu Apr 10 12:21:59 2008 +1000 [XFS] Catch errors returned from xfs_bmap_last_offset(). xfs_bmap_last_offset() can fail and return an error. xfs_iomap_write_allocate() fails to detect and propagate the error. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30802a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit fc6149d8d9634814cdcd9283b8f2efd3359181df Author: David Chinner Date: Thu Apr 10 12:21:53 2008 +1000 [XFS] Check for xfs_free_extent() failing. xfs_free_extent() can fail, but log recovery never bothers to check if it successfully free the extent it was supposed to. This could lead to silent corruption during log recovery. Abort log recovery if we fail to free an extent. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30801a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit d87dd6360dce86cad9099aed74f14b4dd0143301 Author: David Chinner Date: Thu Apr 10 12:21:46 2008 +1000 [XFS] Warn if errors come from block_truncate_page(). block_truncate_page() can return errors that we currently ignore and silently discard. We should not ever get errors reported here - an error indicates a bug somewhere else. Hence catch the error and issue a stack dump to the syslog because we cannot propagate the error any further up the call chain. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30800a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit c2b1cba6833da77b1b478ac144f9cf5144d276ec Author: David Chinner Date: Thu Apr 10 12:21:40 2008 +1000 [XFS] xfs_bmap_adjacent() never returns an error. Mark it void. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30798a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 12375c82375ec39ec948a3ad62e5e77533515e83 Author: David Chinner Date: Thu Apr 10 12:21:32 2008 +1000 [XFS] Make xfs_alloc_compute_aligned() void. xfs_alloc_compute_aligned() returns a value based on a comparison of the computed extent length and the minimum length allowed. This is only used by some callers - the other four return parameters are used more often. Hence move the comparison to the code that actually needs to do it and make xfs_alloc_compute_aligned() a void function. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30797a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit f4586e40613a9f8bb9f7f9c8a796062a9ab1614c Author: David Chinner Date: Thu Apr 10 12:21:25 2008 +1000 [XFS] Clean up xfs_alloc_search_busy() return values. xfs_alloc_search_busy() returns an index into the busy array if the extent was found in the array. This is never checked, and the xfs_alloc_search_busy() does a log force to prevent reuse of the extent before the free transaction hits the disk. Hence the return value is useless. Declare the function void and remove the slot number from the tracing as well. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30796a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit e5720eec0548c08943d759e39db0388d8fe59287 Author: David Chinner Date: Thu Apr 10 12:21:18 2008 +1000 [XFS] Propagate errors from xfs_trans_commit(). xfs_trans_commit() can return errors when there are problems in the transaction subsystem. They are indicative that the entire transaction may be incomplete, and hence the error should be propagated as there is a good possibility that there is something fatally wrong in the filesystem. Catch and propagate or warn about commit errors in the places where they are currently ignored. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30795a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 3c1e2bbe5bcdcd435510a05eb121fa74b848e24f Author: David Chinner Date: Thu Apr 10 12:21:11 2008 +1000 [XFS] Propagate xfs_trans_reserve() errors. xfs_trans_reserve() reports errors that should not be ignored. For example, a shutdown filesystem will report errors through xfs_trans_reserve() to prevent further changes from being attempted on a damaged filesystem. Catch and propagate all error conditions from xfs_trans_reserve(). SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30794a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 5ca1f261a08d5cff5f29eaa0887b59baae2ae7f7 Author: David Chinner Date: Thu Apr 10 12:21:04 2008 +1000 [XFS] Catch errors from xfs_acl_vremove(). Removing an ACL can return an error. Propagate it. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30793a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 0c928299676c8df2b00e75d5691cd4846e6c0868 Author: David Chinner Date: Thu Apr 10 12:20:58 2008 +1000 [XFS] Catch errors from xfs_acl_setmode(). Propagate the error status from xfs_acl_setmode() so that callers know if the ACl was set correctly or not. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30792a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 88ab02085363b7c45935d66ab3e969b4fec9a20c Author: David Chinner Date: Thu Apr 10 12:20:51 2008 +1000 [XFS] Propagate quota file truncation errors. Truncating the quota files can silently fail. Ensure that truncation errors are propagated to the callers. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30791a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit cb6edc26c386d2268dcf61bcdec02b6fb50b6ba2 Author: David Chinner Date: Thu Apr 10 12:20:45 2008 +1000 [XFS] Catch errors when turning off quotas. When turning off quota, we need to write various transactions to the log to ensure that they are cleanly removed in the case of a crash. We need to check that the transactions hit the disk correctly. If we fail to write the final quota off transaction, we are corrupt in memory and so the only option is to shut the filesystem down at this point. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30790a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 31d5577b35d8397dea19f2ba7550e9225605a785 Author: David Chinner Date: Thu Apr 10 12:20:38 2008 +1000 [XFS] Catch errors resetting quota flags. Warn to the syslog if we fail to reset the quota flags in the superblock when a quota check fails. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30789a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 53aa7915d67b9d0f5986c9f08e76846fedc520d4 Author: David Chinner Date: Thu Apr 10 12:20:31 2008 +1000 [XFS] Clean up quotamount error handling. xfs_qm_mount_quotas() returns an error status that is ignored. If we fail to mount quotas, we continue with quota's turned off, which is all handled inside xfs_qm_mount_quotas(). Mark it as void to indicate that errors need not be returned to the callers. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30788a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 3c56836f92683cb871ebbf44c512069b0d48a08f Author: David Chinner Date: Thu Apr 10 12:20:24 2008 +1000 [XFS] Check for dquot flush errors xfs_qm_dqflush() can fail, but the return is not checked anywhere. Hence we never know if we've failed to flush a dquot to disk. Propagate the error and warn to the syslog if a flush ever fails. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30787a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 4b8879df8c21bed3efd1eb2da5d72501199aba29 Author: David Chinner Date: Thu Apr 10 12:20:17 2008 +1000 [XFS] Propagate xfs_qm_dqflush_all() errors. xfs_qm_dqflush_all() can return flush errors. Ensure they are propagated into the quotacheck code to determine if the quotacheck succeeded or not. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30786a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 5b1397385bf536cbdb60f3362f44079d15d5f5ee Author: David Chinner Date: Thu Apr 10 12:20:10 2008 +1000 [XFS] xfs_qm_reset_dqcounts() does not return errors. Declare it void. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30785a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 714082bc12b6c305f825411df02177efcb0085f1 Author: David Chinner Date: Thu Apr 10 12:20:03 2008 +1000 [XFS] Report errors from xfs_reserve_blocks(). xfs_reserve_blocks() can fail in interesting ways. In neither case is it a fatal error, but the result can lead to sub-optimal behaviour. Warn to the syslog if the call fails but otherwise continue. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30784a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 36fbe6e6bd5408b09341043dfece978b4a7a0f34 Author: David Chinner Date: Thu Apr 10 12:19:56 2008 +1000 [XFS] xfs_icsb_counter_disabled() never returns an error. Mark it void. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30782a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit a414047fc97aea7db6237176ce00013117839cd5 Author: David Chinner Date: Thu Apr 10 12:19:47 2008 +1000 [XFS] Remove useless whitespace in function prototypes Makes it simpler to annotate function prototypes with __must_check via sed scripts. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30781a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit 3c85c36cc2e87018d38fcd033f41bbdf1360c07a Author: David Chinner Date: Thu Apr 10 12:19:40 2008 +1000 [XFS] xfs_quiesce_fs() never returns an error. Mark it void. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30780a Signed-off-by: David Chinner Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy commit b6ddc4e6fed9c6f4adb273c8b36e1731f90ec17e Author: Christoph Hellwig Date: Thu Apr 10 12:19:27 2008 +1000 [XFS] Don't validate symlink target component length This target component validation is not POSIX conformant and it is not done by any other Linux filesystem so remove it from XFS. SGI-PV: 980080 SGI-Modid: xfs-linux-melb:xfs-kern:30776a Signed-off-by: Christoph Hellwig Signed-off-by: David Chinner Signed-off-by: Lachlan McIlroy commit 34a622b2e1c8e11c8990184634f101c1aad42fec Author: Harvey Harrison Date: Thu Apr 10 12:19:21 2008 +1000 [XFS] replace remaining __FUNCTION__ occurrences __FUNCTION__ is gcc-specific, use __func__ SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30775a Signed-off-by: Harvey Harrison Signed-off-by: David Chinner Signed-off-by: Lachlan McIlroy commit 0225da1f35df46c67785eb08526995d7cdb4e3b0 Author: Harvey Harrison Date: Thu Apr 10 12:19:10 2008 +1000 [XFS] Replace __inline with inline Remove the remaining uses of __inline in the XFS code base. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30774a Signed-off-by: Harvey Harrison Signed-off-by: David Chinner Signed-off-by: Lachlan McIlroy commit 6b1d1a732f886936fe515d911b1a01d9cc50e179 Author: David Chinner Date: Thu Apr 10 12:19:02 2008 +1000 [XFS] Fix lock inversion in forced shutdown. Recent changes to xlog_state_release_iclog() placed the grant_lock inside the icloglock. forced unmount of the log does this the opposite way around, but does not depend on the order for correct working. Fix the inversion by changing the order locks are gained in xfs_log_force_umount(). SGI-PV: 979661 SGI-Modid: xfs-linux-melb:xfs-kern:30773a Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 4679b2d36d53ed508c956337972fbbea8db99a77 Author: David Chinner Date: Thu Apr 10 12:18:54 2008 +1000 [XFS] Reorganise xlog_t for better cacheline isolation of contention To reduce contention on the log in large CPU count, separate out different parts of the xlog_t structure onto different cachelines. Move each lock onto a different cacheline along with all the members that are accessed/modified while that lock is held. Also, move the debugging code into debug code. SGI-PV: 978729 SGI-Modid: xfs-linux-melb:xfs-kern:30772a Signed-off-by: David Chinner Signed-off-by: Lachlan McIlroy commit eb01c9cd87c7a9998c2edf209721ea069e3e3652 Author: David Chinner Date: Thu Apr 10 12:18:46 2008 +1000 [XFS] Remove the xlog_ticket allocator The ticket allocator is just a simple slab implementation internal to the log. It requires the icloglock to be held when manipulating it and this contributes to contention on that lock. Just kill the entire allocator and use a memory zone instead. While there, allow us to gracefully fail allocation with ENOMEM. SGI-PV: 978729 SGI-Modid: xfs-linux-melb:xfs-kern:30771a Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 114d23aae51233b2bc62d8e2a632bcb55de1953d Author: David Chinner Date: Thu Apr 10 12:18:39 2008 +1000 [XFS] Per iclog callback chain lock Rather than use the icloglock for protecting the iclog completion callback chain, use a new per-iclog lock so that walking the callback chain doesn't require holding a global lock. This reduces contention on the icloglock during transaction commit and log I/O completion by reducing the number of times we need to hold the global icloglock during these operations. SGI-PV: 978729 SGI-Modid: xfs-linux-melb:xfs-kern:30770a Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 2abdb8c88110bab78bfe17e51346e735560daa02 Author: Lachlan McIlroy Date: Thu Mar 27 18:01:14 2008 +1100 [XFS] Prevent xfs_bmap_check_leaf_extents() referencing unmapped memory. While investigating the extent corruption bug I ran into this bug in debug only code. xfs_bmap_check_leaf_extents() loops through the leaf blocks of the extent btree checking that every extent is entirely before the next extent. It also compares the last extent in the previous block to the first extent in the current block when the previous block has been released and potentially unmapped. So take a copy of the last extent instead of a pointer. Also move the last extent check out of the loop because we only need to do it once. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30718a Signed-off-by: Lachlan McIlroy Signed-off-by: Christoph Hellwig commit 433550990e6c2e94995239bac6a52b4df454cae0 Author: Christoph Hellwig Date: Thu Mar 27 18:01:08 2008 +1100 [XFS] remove most calls to VN_RELE Most VN_RELE calls either directly contain a XFS_ITOV or have the corresponding xfs_inode already in scope. Use the IRELE helper instead of VN_RELE to clarify the code. With a little more work we can kill VN_RELE altogether and define IRELE in terms of iput directly. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30710a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit df26cfe849d8fd767b26fcd4bfebfff67bda9f3a Author: Lachlan McIlroy Date: Fri Apr 18 11:44:03 2008 +1000 [XFS] split xfs_ioc_xattr The three subcases of xfs_ioc_xattr don't share any semantics and almost no code, so split it into three separate helpers. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30709a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit f3dcc13f6fa20af1171eac7a537a4b89b1a84849 Author: Christoph Hellwig Date: Thu Mar 27 18:00:54 2008 +1100 [XFS] cleanup root inode handling in xfs_fs_fill_super - rename rootvp to root for clarify - remove useless vn_to_inode call - check is_bad_inode before calling d_alloc_root - use iput instead of VN_RELE in the error case SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30708a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 59a33f9f776b051018ec98af95bd9fe8ba9d0f3e Author: David Chinner Date: Thu Mar 27 18:00:45 2008 +1100 [XFS] Ensure a btree insert returns a valid cursor. When writing into preallocated regions there is a case where XFS can oops or hang doing the unwritten extent conversion on I/O completion. It turns out that the problem is related to the btree cursor being invalid. When we do an insert into the tree, we may need to split blocks in the tree. When we only split at the leaf level (i.e. level 0), everything works just fine. However, if we have a multi-level split in the btreee, the cursor passed to the insert function is no longer valid once the insert is complete. The leaf level split is handled correctly because all the operations at level 0 are done using the original cursor, hence it is updated correctly. However, when we need to update the next level up the tree, we don't use that cursor - we use a cloned cursor that points to the index in the next level up where we need to do the insert. Hence if we need to split a second level, the changes to the tree are reflected in the cloned cursor and not the original cursor. This clone-and-move-up-a-level-on-split behaviour recurses all the way to the top of the tree. The complexity here is that these cloned cursors do not point to the original index that was inserted - they point to the newly allocated block (the right block) and the original cursor pointer to that level may still point to the left block. Hence, without deep examination of the cloned cursor and buffers, we cannot update the original cursor with the new path from the cloned cursor. In these cases the original cursor could be pointing to the wrong block(s) and hence a subsequent modification to the tree using that cursor will lead to corruption of the tree. The crash case occurs when the tree changes height - we insert a new level in the tree, and the cursor does not have a buffer in it's path for that level. Hence any attempt to walk back up the cursor to the root block will result in a null pointer dereference. To make matters even more complex, the BMAP BT is rooted in an inode, so we can have a change of height in the btree *without a root split*. That is, if the root block in the inode is full when we split a leaf node, we cannot fit the pointer to the new block in the root, so we allocate a new block, migrate all the ptrs out of the inode into the new block and point the inode root block at the newly allocated block. This changes the height of the tree without a root split having occurred and hence invalidates the path in the original cursor. The patch below prevents xfs_bmbt_insert() from returning with an invalid cursor by detecting the cases that invalidate the original cursor and refresh it by do a lookup into the btree for the original index we were inserting at. Note that the INOBT, AGFBNO and AGFCNT btree implementations also have this bug, but the cursor is currently always destroyed or revalidated after an insert for those trees. Hence this patch only address the problem in the BMBT code. SGI-PV: 979339 SGI-Modid: xfs-linux-melb:xfs-kern:30701a Signed-off-by: David Chinner Signed-off-by: Lachlan McIlroy commit 75de2a91c98a6f486f261c1367fe59f5583e15a3 Author: David Chinner Date: Thu Mar 27 18:00:38 2008 +1100 [XFS] Account for inode cluster alignment in all allocations At ENOSPC, we can get a filesystem shutdown due to a cancelling a dirty transaction in xfs_mkdir or xfs_create. This is due to the initial allocation attempt not taking into account inode alignment and hence we can prepare the AGF freelist for allocation when it's not actually possible to do an allocation. This results in inode allocation returning ENOSPC with a dirty transaction, and hence we shut down the filesystem. Because the first allocation is an exact allocation attempt, we must tell the allocator that the alignment does not affect the allocation attempt. i.e. we will accept any extent alignment as long as the extent starts at the block we want. Unfortunately, this means that if the longest free extent is less than the length + alignment necessary for fallback allocation attempts but is long enough to attempt a non-aligned allocation, we will modify the free list. If we then have the exact allocation fail, all other allocation attempts will also fail due to the alignment constraint being taken into account. Hence the initial attempt needs to set the "alignment slop" field so that alignment, while not required, must be taken into account when determining if there is enough space left in the AG to do the allocation. That means if the exact allocation fails, we will not dirty the freelist if there is not enough space available fo a subsequent allocation to succeed. Hence we get an ENOSPC error back to userspace without shutting down the filesystem. SGI-PV: 978886 SGI-Modid: xfs-linux-melb:xfs-kern:30699a Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 535f6b3735db6ef6026537bfe55ae00c3d9cc1ee Author: Josef 'Jeff' Sipek Date: Thu Mar 27 17:58:27 2008 +1100 [XFS] Replace custom AIL linked-list code with struct list_head Replace the xfs_ail_entry_t with a struct list_head and clean the surrounding code up. Also fixes a livelock in xfs_trans_first_push_ail() by terminating the loop at the head of the list correctly. SGI-PV: 978682 SGI-Modid: xfs-linux-melb:xfs-kern:30636a Signed-off-by: Josef 'Jeff' Sipek Signed-off-by: David Chinner Signed-off-by: Lachlan McIlroy commit a45c796867df8dabc8eed6e72898d7ba1609bd7e Author: Christoph Hellwig Date: Thu Mar 6 13:49:36 2008 +1100 [XFS] Remove superflous xfs_readsb call in xfs_mountfs. When xfs_mountfs is called by xfs_mount xfs_readsb was called 35 lines above unconditionally, so there is no need to try to read the superblock if it's not present. If any other port doesn't have the superblock read at this point it should just call it directly from it's xfs_mount equivalent. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30603a Signed-off-by: Christoph Hellwig Signed-off-by: Donald Douwsma Signed-off-by: Lachlan McIlroy commit dfa18b117974d7667a2d5b941853fac3f2e256db Author: Niv Sardi Date: Thu Mar 6 13:49:26 2008 +1100 [XFS] kill t_sema member of struct xfs_trans It's completely unused so we might aswell kill it. Note that there is another t_sema in struct xlog_ticket, which is used and actually an sv_t despite the name. That one is left untouched by this patch. SGI-PV: 971186 SGI-Modid: xfs-linux-melb:xfs-kern:30591a Signed-off-by: Niv Sardi Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 5f90150abad61b49dbb4a6ca1087fe0a75001ef9 Author: Christoph Hellwig Date: Thu Mar 6 13:46:49 2008 +1100 [XFS] cleanup vnode use in xfs_bmap.c SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30553a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit af048193fcfe2650e7ed3b1ab3d48b1ed0efb467 Author: Christoph Hellwig Date: Thu Mar 6 13:46:43 2008 +1100 [XFS] cleanup vnode use in xfs_iops.c SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30552a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit dcf49cc5cfbbc0070ad4307428f8282dc7e04e58 Author: Christoph Hellwig Date: Thu Mar 6 13:46:37 2008 +1100 [XFS] cleanup vnode use in xfs_lrw.c SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30551a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit ef1f5e7ad38e5414d016983a8cc5a8db7654a61d Author: Christoph Hellwig Date: Thu Mar 6 13:46:25 2008 +1100 [XFS] cleanup vnode use in xfs_lookup SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30550a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 3937be5ba836a204d3d1df96b518eecd6cdacbb9 Author: Christoph Hellwig Date: Thu Mar 6 13:46:19 2008 +1100 [XFS] cleanup vnode use in xfs_symlink and xfs_rename SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30548a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit a3da789640871c897901c5f766e33be78d56f35a Author: Christoph Hellwig Date: Thu Mar 6 13:46:12 2008 +1100 [XFS] cleanup vnode use in xfs_link SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30547a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 979ebab11623894528d4d37b947533ea4e8649d1 Author: Christoph Hellwig Date: Thu Mar 6 13:46:05 2008 +1100 [XFS] cleanup vnode use in xfs_create/mknod/mkdir SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30546a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit bc4ac74a4e5bd7db02976eb1b681e1d11f81c9ce Author: Christoph Hellwig Date: Thu Mar 6 13:45:58 2008 +1100 [XFS] cleanup vnode use in dmapi calls SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30545a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit d234154125197053d5215711b5df867979e55ebd Author: David Chinner Date: Thu Mar 6 13:45:43 2008 +1100 [XFS] Use power-of-2 sized buffers to reduce overhead Now that the ktrace_enter() code is using atomics, the non-power-of-2 buffer sizes - which require modulus operations to get the index - are showing up as using substantial CPU in the profiles. Force the buffer sizes to be rounded up to the nearest power of two and use masking rather than modulus operations to convert the index counter to the buffer index. This reduces ktrace_enter overhead to 8% of a CPU time, and again almost halves the trace intensive test runtime. SGI-PV: 977546 SGI-Modid: xfs-linux-melb:xfs-kern:30538a Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 6ee4752ffe782be6e86bea1403a2fe0f682aa71a Author: David Chinner Date: Thu Mar 6 13:45:35 2008 +1100 [XFS] Use atomic counters for ktrace buffer indexes ktrace_enter() is consuming vast amounts of CPU time due to the use of a single global lock for protecting buffer index increments. Change it to use per-buffer atomic counters - this reduces ktrace_enter() overhead during a trace intensive test on a 4p machine from 58% of all CPU time to 12% and halves test runtime. SGI-PV: 977546 SGI-Modid: xfs-linux-melb:xfs-kern:30537a Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 44d814ced4cffbfe6a775c5bb8b941a6e734e7d9 Author: David Chinner Date: Thu Mar 6 13:45:29 2008 +1100 [XFS] Update c/mtime correctly on truncates XFS changes the c/mtime of an inode when truncating it to the same size. The c/mtime is only supposed to change if the size is changed. Not to be confused with ftruncate, where the c/mtime is supposed to be changed even if the size is not changed. The Linux VFS encodes this semantic difference in the flags it sends down to ->setattr, which XFS currently ignores. We need to make XFS pay attention to the VFS flags and hence Do The Right Thing. SGI-PV: 977547 SGI-Modid: xfs-linux-melb:xfs-kern:30536a Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 24bd861d1c3fff5248de7ba3bdddb3369087ad46 Author: Christoph Hellwig Date: Thu Mar 6 13:45:16 2008 +1100 [XFS] don't encode parent in nfs filehandles unless nessecary As Dave pointed out after the export ops changes we now always encode the parent into the filehandle for regular files, but it's not actually needed when the filesystem is export with no_subtree_check. This one-liner fixes xfs_fs_encode_fh to skip encoding the parent unless nessecary. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30535a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 126468b1156211e26d97f74b2f1767acd141005a Author: Christoph Hellwig Date: Thu Mar 6 13:44:57 2008 +1100 [XFS] kill xfs_rwlock/xfs_rwunlock We can just use xfs_ilock/xfs_iunlock instead and get rid of the ugly bhv_vrwlock_t. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30533a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 43973964a386348af0a392266f008ba24170aa30 Author: Christoph Hellwig Date: Thu Mar 6 13:44:50 2008 +1100 [XFS] kill xfs_get_dir_entry Instead of of xfs_get_dir_entry use a macro to get the xfs_inode from the dentry in the callers and grab the reference manually. Only grab the reference once as it's fine to keep it over the dmapi calls. (And even that reference is actually superflous in Linux but I'll leave that for another patch) SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30531a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit a8b3acd57e3aaaf73a863a28e0e9f6cca37cd8e3 Author: Christoph Hellwig Date: Thu Mar 6 13:44:41 2008 +1100 [XFS] vnode cleanup in xfs_fs_subr.c Cleanup the unneeded intermediate vnode step in the flushing helpers and go directly from the xfs_inode to the struct address_space. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30530a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit db0bb7baa1533db156d8af3ebeda1f0473a0197a Author: Christoph Hellwig Date: Thu Mar 6 13:44:35 2008 +1100 [XFS] cleanup xfs_vn_mknod - use proper goto based unwinding instead of the current mess of multiple conditionals - rename ip to inode because that's the normal convention for Linux inodes while ip is the convention for xfs_inodes - remove unlikely checks for the default_acl - branches marked unlikely might lead to extreme branch bredictor slowdons if taken and for some workloads a default acl is quite common - properly indent the switch statements - remove xfs_has_fs_struct as nfsd has a fs_struct in any semi-recent kernel SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30529a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 155cc6b784a959ed456fe46dca522e1d28b3b718 Author: David Chinner Date: Thu Mar 6 13:44:14 2008 +1100 [XFS] Use atomics for iclog reference counting Now that we update the log tail LSN less frequently on transaction completion, we pass the contention straight to the global log state lock (l_iclog_lock) during transaction completion. We currently have to take this lock to decrement the iclog reference count. there is a reference count on each iclog, so we need to take þhe global lock for all refcount changes. When large numbers of processes are all doing small trnasctions, the iclog reference counts will be quite high, and the state change that absolutely requires the l_iclog_lock is the except rather than the norm. Change the reference counting on the iclogs to use atomic_inc/dec so that we can use atomic_dec_and_lock during transaction completion and avoid the need for grabbing the l_iclog_lock for every reference count decrement except the one that matters - the last. SGI-PV: 975671 SGI-Modid: xfs-linux-melb:xfs-kern:30505a Signed-off-by: David Chinner Signed-off-by: Tim Shimmin Signed-off-by: Lachlan McIlroy commit b589334c7a1fff85d2f009d5db4c34fad48925e9 Author: David Chinner Date: Thu Mar 6 13:44:06 2008 +1100 [XFS] Prevent AIL lock contention during transaction completion When hundreds of processors attempt to commit transactions at the same time, they can contend on the AIL lock when updating the tail LSN held in the in-core log structure. At the moment, the tail LSN is only needed when actually writing out an iclog, so it really does not need to be updated on every single transaction completion - only those that result in switching iclogs and flushing them to disk. The result is that we reduce the number of times we need to grab the AIL lock and the log grant lock by up to two orders of magnitude on large processor count machines. The problem has previously been hidden by AIL lock contention walking the AIL list which was recently solved and uncovered this issue. SGI-PV: 975671 SGI-Modid: xfs-linux-melb:xfs-kern:30504a Signed-off-by: David Chinner Signed-off-by: Tim Shimmin Signed-off-by: Lachlan McIlroy commit 3354040897f828644be6ca5783588e9f64a53b8e Author: David Chinner Date: Thu Mar 6 13:43:59 2008 +1100 [XFS] Use xfs_inode_clean() in more places Remove open coded checks for the whether the inode is clean and replace them with an inlined function. SGI-PV: 977461 SGI-Modid: xfs-linux-melb:xfs-kern:30503a Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit bad5584332e888ac40ca13584e8c114149ddb01e Author: David Chinner Date: Thu Mar 6 13:43:49 2008 +1100 [XFS] Remove the xfs_icluster structure Remove the xfs_icluster structure and replace with a radix tree lookup. We don't need to keep a list of inodes in each cluster around anymore as we can look them up quickly when we need to. The only time we need to do this now is during inode writeback. Factor the inode cluster writeback code out of xfs_iflush and convert it to use radix_tree_gang_lookup() instead of walking a list of inodes built when we first read in the inodes. This remove 3 pointers from each xfs_inode structure and the xfs_icluster structure per inode cluster. Hence we reduce the cache footprint of the xfs_inodes by between 5-10% depending on cluster sparseness. To be truly efficient we need a radix_tree_gang_lookup_range() call to stop searching once we are past the end of the cluster instead of trying to find a full cluster's worth of inodes. Before (ia64): $ cat /sys/slab/xfs_inode/object_size 536 After: $ cat /sys/slab/xfs_inode/object_size 512 SGI-PV: 977460 SGI-Modid: xfs-linux-melb:xfs-kern:30502a Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit a3f74ffb6d1448d9a8f482e593b80ec15f1695d4 Author: David Chinner Date: Thu Mar 6 13:43:42 2008 +1100 [XFS] Don't block pdflush when writing back inodes When pdflush is writing back inodes, it can get stuck on inode cluster buffers that are currently under I/O. This occurs when we write data to multiple inodes in the same inode cluster at the same time. Effectively, delayed allocation marks the inode dirty during the data writeback. Hence if the inode cluster was flushed during the writeback of the first inode, the writeback of the second inode will block waiting for the inode cluster write to complete before writing it again for the newly dirtied inode. Basically, we want to avoid this from happening so we don't block pdflush and slow down all of writeback. Hence we introduce a non-blocking async inode flush flag that pdflush uses. If this flag is set, we use non-blocking operations (e.g. try locks) whereever we can to avoid blocking or extra I/O being issued. SGI-PV: 970925 SGI-Modid: xfs-linux-melb:xfs-kern:30501a Signed-off-by: David Chinner Signed-off-by: Lachlan McIlroy commit 4ae29b4321b99b711bcfde5527c4fbf249eac60f Author: David Chinner Date: Thu Mar 6 13:43:34 2008 +1100 [XFS] Factor xfs_itobp() and xfs_inotobp(). The only difference between the functions is one passes an inode for the lookup, the other passes an inode number. However, they don't do the same validity checking or set all the same state on the buffer that is returned yet they should. Factor the functions into a common implementation. SGI-PV: 970925 SGI-Modid: xfs-linux-melb:xfs-kern:30500a Signed-off-by: David Chinner Signed-off-by: Lachlan McIlroy commit e9a56b7cdaf6129892fd7c8d950b71a1a4304bb0 Author: Lachlan McIlroy Date: Thu Mar 6 13:43:27 2008 +1100 [XFS] Fix regression due to refcache removal SGI-PV: 971186 SGI-Modid: xfs-linux-melb:xfs-kern:30490a Signed-off-by: Lachlan McIlroy Signed-off-by: Donald Douwsma commit 163d3686bb09d88e2120bffe780a3f2d7cc4c948 Author: Donald Douwsma Date: Thu Mar 6 13:43:20 2008 +1100 [XFS] Remove the xfs_refcache Remove the xfs_refcache, it was only needed while we were still building for 2.4 kernels. SGI-PV: 971186 SGI-Modid: xfs-linux-melb:xfs-kern:30472a Signed-off-by: Donald Douwsma Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 461aa8a22595e3bd3e6f4dc2894d7c4315ea2bb9 Author: Lachlan McIlroy Date: Thu Mar 6 13:43:11 2008 +1100 [XFS] make inode reclaim synchronise with xfs_iflush_done() On a forced shutdown, xfs_finish_reclaim() will skip flushing the inode. If the inode flush lock is not already held and there is an outstanding xfs_iflush_done() then we might free the inode prematurely. By acquiring and releasing the flush lock we will synchronise with xfs_iflush_done(). SGI-PV: 909874 SGI-Modid: xfs-linux-melb:xfs-kern:30468a Signed-off-by: Lachlan McIlroy Signed-off-by: David Chinner commit e12070a5dca8bfeee352e9655ae79772a96b32f8 Author: Niv Sardi Date: Thu Mar 6 13:43:03 2008 +1100 [XFS] actually check error returned by xfs_flush_pages, clean up and bailout if fails. SGI-PV: 973041 SGI-Modid: xfs-linux-melb:xfs-kern:30462a Signed-off-by: Niv Sardi Signed-off-by: Lachlan McIlroy From owner-xfs@oss.sgi.com Thu Apr 17 22:10:06 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 17 Apr 2008 22:10:14 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42, J_CHICKENPOX_45,J_CHICKENPOX_47,J_CHICKENPOX_48 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 m3I59xiU028274 for ; Thu, 17 Apr 2008 22:10:01 -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 PAA03676; Fri, 18 Apr 2008 15:10:27 +1000 To: "Christoph Hellwig" Subject: Re: [REVIEW] - cleanup xfs_attr a bit From: "Barry Naujok" Organization: SGI Cc: "xfs@oss.sgi.com" , xfs-dev Content-Type: multipart/mixed; boundary=----------AM4LHBp66LgJJGbTwZhLkO MIME-Version: 1.0 References: <20080417182702.GA7154@infradead.org> Date: Fri, 18 Apr 2008 15:11:22 +1000 Message-ID: In-Reply-To: <20080417182702.GA7154@infradead.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15458 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs ------------AM4LHBp66LgJJGbTwZhLkO Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 Content-Transfer-Encoding: Quoted-Printable On Fri, 18 Apr 2008 04:27:02 +1000, Christoph Hellwig = =20=20 wrote: > On Thu, Apr 17, 2008 at 12:35:36PM +1000, Barry Naujok wrote: >> This patch starts using struct xfs_name more for the xattr code and >> is another step for using xfs_name in xfs_da_args. >> >> Also, the cred parameter is removed from xfs_attr_get and=20=20 >> xfs_attr_fetch. > > Looks good, but I'd really not expected a function called > xfs_attr_name_to_name to do the shutdown check. Either keep it in the > callers or give the function a different name. Ok, done: --- fs/xfs/dmapi/xfs_dm.c | 13 ++---- fs/xfs/linux-2.6/xfs_ioctl.c | 6 +- fs/xfs/xfs_acl.c | 7 +-- fs/xfs/xfs_attr.c | 93=20=20 ++++++++++++++++++++++++------------------- fs/xfs/xfs_attr.h | 6 -- fs/xfs/xfs_vnodeops.h | 2 6 files changed, 68 insertions(+), 59 deletions(-) Index: kern_ci/fs/xfs/dmapi/xfs_dm.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/dmapi/xfs_dm.c +++ kern_ci/fs/xfs/dmapi/xfs_dm.c @@ -516,8 +516,7 @@ xfs_dm_bulkall_iget_one( xfs_iunlock(ip, XFS_ILOCK_SHARED); memset(&xbuf->dx_attrdata, 0, sizeof(dm_vardata_t)); - error =3D xfs_attr_get(ip, attr_name, attr_buf, - &value_len, ATTR_ROOT, sys_cred); + error =3D xfs_attr_get(ip, attr_name, attr_buf, &value_len, ATTR_ROOT); iput(ip->i_vnode); DM_EA_XLATE_ERR(error); @@ -1691,8 +1690,8 @@ xfs_dm_get_destroy_dmattr( if (value =3D=3D NULL) return(-ENOMEM); - error =3D xfs_attr_get(XFS_I(inode), dkattrname.dan_chars, value,=20=20 &value_len, - ATTR_ROOT, sys_cred); + error =3D xfs_attr_get(XFS_I(inode), dkattrname.dan_chars, value, + &value_len, ATTR_ROOT); if (error =3D=3D ERANGE) { kfree(value); alloc_size =3D value_len; @@ -1701,7 +1700,7 @@ xfs_dm_get_destroy_dmattr( return(-ENOMEM); error =3D xfs_attr_get(XFS_I(inode), dkattrname.dan_chars, value, - &value_len, ATTR_ROOT, sys_cred); + &value_len, ATTR_ROOT); } if (error) { kfree(value); @@ -1970,7 +1969,7 @@ xfs_dm_get_dmattr( value_len =3D alloc_size; /* in/out parameter */ error =3D xfs_attr_get(XFS_I(inode), name.dan_chars, value, &value_len, - ATTR_ROOT, NULL); + ATTR_ROOT); DM_EA_XLATE_ERR(error); /* DMAPI requires an errno of ENOENT if an attribute does not exist, @@ -2217,7 +2216,7 @@ xfs_dm_getall_dmattr( error =3D xfs_attr_get(XFS_I(inode), entry->a_name, (void *)(ulist + 1), &value_len, - ATTR_ROOT, NULL); + ATTR_ROOT); DM_EA_XLATE_ERR(error); if (error || value_len !=3D entry->a_valuelen) { Index: kern_ci/fs/xfs/linux-2.6/xfs_ioctl.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_ioctl.c +++ kern_ci/fs/xfs/linux-2.6/xfs_ioctl.c @@ -505,14 +505,14 @@ xfs_attrmulti_attr_get( { char *kbuf; int error =3D EFAULT; -=09 + if (*len > XATTR_SIZE_MAX) return EINVAL; kbuf =3D kmalloc(*len, GFP_KERNEL); if (!kbuf) return ENOMEM; - error =3D xfs_attr_get(XFS_I(inode), name, kbuf, (int *)len, flags, NULL); + error =3D xfs_attr_get(XFS_I(inode), name, kbuf, (int *)len, flags); if (error) goto out_kfree; @@ -548,7 +548,7 @@ xfs_attrmulti_attr_set( if (copy_from_user(kbuf, ubuf, len)) goto out_kfree; -=09=09=09 + error =3D xfs_attr_set(XFS_I(inode), name, kbuf, len, flags); out_kfree: Index: kern_ci/fs/xfs/xfs_acl.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_acl.c +++ kern_ci/fs/xfs/xfs_acl.c @@ -341,14 +341,15 @@ xfs_acl_iaccess( { xfs_acl_t *acl; int rval; + struct xfs_name acl_name =3D {SGI_ACL_FILE, SGI_ACL_FILE_SIZE}; if (!(_ACL_ALLOC(acl))) return -1; /* If the file has no ACL return -1. */ rval =3D sizeof(xfs_acl_t); - if (xfs_attr_fetch(ip, SGI_ACL_FILE, SGI_ACL_FILE_SIZE, - (char *)acl, &rval, ATTR_ROOT | ATTR_KERNACCESS, cr)) { + if (xfs_attr_fetch(ip, &acl_name, (char *)acl, &rval, + ATTR_ROOT | ATTR_KERNACCESS)) { _ACL_FREE(acl); return -1; } @@ -595,7 +596,7 @@ xfs_acl_get_attr( *error =3D xfs_attr_get(xfs_vtoi(vp), kind =3D=3D _ACL_TYPE_ACCESS ? SGI_ACL_FILE : SGI_ACL_DEFAULT, - (char *)aclp, &len, flags, sys_cred); + (char *)aclp, &len, flags); if (*error || (flags & ATTR_KERNOVAL)) return; xfs_acl_get_endian(aclp); Index: kern_ci/fs/xfs/xfs_attr.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_attr.c +++ kern_ci/fs/xfs/xfs_attr.c @@ -101,14 +101,28 @@ STATIC int xfs_attr_rmtval_remove(xfs_da ktrace_t *xfs_attr_trace_buf; #endif +STATIC int +xfs_attr_name_to_xname( + struct xfs_name *xname, + const char *aname) +{ + if (!aname) + return EINVAL; + xname->name =3D aname; + xname->len =3D strlen(aname); + if (xname->len >=3D MAXNAMELEN) + return EFAULT; /* match IRIX behaviour */ + + return 0; +} /*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D * Overall external interface routines. *=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*/ int -xfs_attr_fetch(xfs_inode_t *ip, const char *name, int namelen, - char *value, int *valuelenp, int flags, struct cred *cred) +xfs_attr_fetch(xfs_inode_t *ip, struct xfs_name *name, + char *value, int *valuelenp, int flags) { xfs_da_args_t args; int error; @@ -122,8 +136,8 @@ xfs_attr_fetch(xfs_inode_t *ip, const ch * Fill in the arg structure for this request. */ memset((char *)&args, 0, sizeof(args)); - args.name =3D name; - args.namelen =3D namelen; + args.name =3D name->name; + args.namelen =3D name->len; args.value =3D value; args.valuelen =3D *valuelenp; args.flags =3D flags; @@ -162,31 +176,29 @@ xfs_attr_get( const char *name, char *value, int *valuelenp, - int flags, - cred_t *cred) + int flags) { - int error, namelen; + int error; + struct xfs_name xname; XFS_STATS_INC(xs_attr_get); - if (!name) - return(EINVAL); - namelen =3D strlen(name); - if (namelen >=3D MAXNAMELEN) - return(EFAULT); /* match IRIX behaviour */ - if (XFS_FORCED_SHUTDOWN(ip->i_mount)) return(EIO); + error =3D xfs_attr_name_to_xname(&xname, name); + if (error) + return error; + xfs_ilock(ip, XFS_ILOCK_SHARED); - error =3D xfs_attr_fetch(ip, name, namelen, value, valuelenp, flags, cred= ); + error =3D xfs_attr_fetch(ip, &xname, value, valuelenp, flags); xfs_iunlock(ip, XFS_ILOCK_SHARED); return(error); } -int -xfs_attr_set_int(xfs_inode_t *dp, const char *name, int namelen, - char *value, int valuelen, int flags) +STATIC int +xfs_attr_set_int(xfs_inode_t *dp, struct xfs_name *name, + char *value, int valuelen, int flags) { xfs_da_args_t args; xfs_fsblock_t firstblock; @@ -209,7 +221,7 @@ xfs_attr_set_int(xfs_inode_t *dp, const */ if (XFS_IFORK_Q(dp) =3D=3D 0) { int sf_size =3D sizeof(xfs_attr_sf_hdr_t) + - XFS_ATTR_SF_ENTSIZE_BYNAME(namelen, valuelen); + XFS_ATTR_SF_ENTSIZE_BYNAME(name->len, valuelen); if ((error =3D xfs_bmap_add_attrfork(dp, sf_size, rsvd))) return(error); @@ -219,8 +231,8 @@ xfs_attr_set_int(xfs_inode_t *dp, const * Fill in the arg structure for this request. */ memset((char *)&args, 0, sizeof(args)); - args.name =3D name; - args.namelen =3D namelen; + args.name =3D name->name; + args.namelen =3D name->len; args.value =3D value; args.valuelen =3D valuelen; args.flags =3D flags; @@ -236,7 +248,7 @@ xfs_attr_set_int(xfs_inode_t *dp, const * Determine space new attribute will use, and if it would be * "local" or "remote" (note: local !=3D inline). */ - size =3D xfs_attr_leaf_newentsize(namelen, valuelen, + size =3D xfs_attr_leaf_newentsize(name->len, valuelen, mp->m_sb.sb_blocksize, &local); nblks =3D XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK); @@ -429,26 +441,27 @@ xfs_attr_set( int valuelen, int flags) { - int namelen; - - namelen =3D strlen(name); - if (namelen >=3D MAXNAMELEN) - return EFAULT; /* match IRIX behaviour */ + int error; + struct xfs_name xname; XFS_STATS_INC(xs_attr_set); if (XFS_FORCED_SHUTDOWN(dp->i_mount)) return (EIO); - return xfs_attr_set_int(dp, name, namelen, value, valuelen, flags); + error =3D xfs_attr_name_to_xname(&xname, name); + if (error) + return error; + + return xfs_attr_set_int(dp, &xname, value, valuelen, flags); } /* * Generic handler routine to remove a name from an attribute list. * Transitions attribute list from Btree to shortform as necessary. */ -int -xfs_attr_remove_int(xfs_inode_t *dp, const char *name, int namelen, int=20= =20 flags) +STATIC int +xfs_attr_remove_int(xfs_inode_t *dp, struct xfs_name *name, int flags) { xfs_da_args_t args; xfs_fsblock_t firstblock; @@ -460,8 +473,8 @@ xfs_attr_remove_int(xfs_inode_t *dp, con * Fill in the arg structure for this request. */ memset((char *)&args, 0, sizeof(args)); - args.name =3D name; - args.namelen =3D namelen; + args.name =3D name->name; + args.namelen =3D name->len; args.flags =3D flags; args.hashval =3D xfs_da_hashname(args.name, args.namelen); args.dp =3D dp; @@ -575,17 +588,18 @@ xfs_attr_remove( const char *name, int flags) { - int namelen; - - namelen =3D strlen(name); - if (namelen >=3D MAXNAMELEN) - return EFAULT; /* match IRIX behaviour */ + int error; + struct xfs_name xname; XFS_STATS_INC(xs_attr_remove); if (XFS_FORCED_SHUTDOWN(dp->i_mount)) return (EIO); + error =3D xfs_attr_name_to_xname(&xname, name); + if (error) + return error; + xfs_ilock(dp, XFS_ILOCK_SHARED); if (XFS_IFORK_Q(dp) =3D=3D 0 || (dp->i_d.di_aformat =3D=3D XFS_DINODE_FMT_EXTENTS && @@ -595,10 +609,10 @@ xfs_attr_remove( } xfs_iunlock(dp, XFS_ILOCK_SHARED); - return xfs_attr_remove_int(dp, name, namelen, flags); + return xfs_attr_remove_int(dp, &xname, flags); } -int /* error */ +STATIC int xfs_attr_list_int(xfs_attr_list_context_t *context) { int error; @@ -2522,8 +2536,7 @@ attr_generic_get( { int error, asize =3D size; - error =3D xfs_attr_get(xfs_vtoi(vp), name, data, - &asize, xflags, NULL); + error =3D xfs_attr_get(xfs_vtoi(vp), name, data, &asize, xflags); if (!error) return asize; return -error; Index: kern_ci/fs/xfs/xfs_attr.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_attr.h +++ kern_ci/fs/xfs/xfs_attr.h @@ -158,14 +158,10 @@ struct xfs_da_args; /* * Overall external interface routines. */ -int xfs_attr_set_int(struct xfs_inode *, const char *, int, char *, int,= =20=20 int); -int xfs_attr_remove_int(struct xfs_inode *, const char *, int, int); -int xfs_attr_list_int(struct xfs_attr_list_context *); int xfs_attr_inactive(struct xfs_inode *dp); int xfs_attr_shortform_getvalue(struct xfs_da_args *); -int xfs_attr_fetch(struct xfs_inode *, const char *, int, - char *, int *, int, struct cred *); +int xfs_attr_fetch(struct xfs_inode *, struct xfs_name *, char *, int *,= =20=20 int); int xfs_attr_rmtval_get(struct xfs_da_args *args); #endif /* __XFS_ATTR_H__ */ Index: kern_ci/fs/xfs/xfs_vnodeops.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_vnodeops.h +++ kern_ci/fs/xfs/xfs_vnodeops.h @@ -50,7 +50,7 @@ int xfs_rename(struct xfs_inode *src_dp, struct xfs_inode *src_ip, struct xfs_inode *target_dp, struct xfs_name *target_name, struct xfs_inode *target_ip); int xfs_attr_get(struct xfs_inode *ip, const char *name, char *value, - int *valuelenp, int flags, cred_t *cred); + int *valuelenp, int flags); int xfs_attr_set(struct xfs_inode *dp, const char *name, char *value, int valuelen, int flags); int xfs_attr_remove(struct xfs_inode *dp, const char *name, int flags); ------------AM4LHBp66LgJJGbTwZhLkO Content-Disposition: attachment; filename=attr_name.patch Content-Type: text/x-patch; name=attr_name.patch Content-Transfer-Encoding: Quoted-Printable --- fs/xfs/dmapi/xfs_dm.c | 13 ++---- fs/xfs/linux-2.6/xfs_ioctl.c | 6 +- fs/xfs/xfs_acl.c | 7 +-- fs/xfs/xfs_attr.c | 93 ++++++++++++++++++++++++--------------= ----- fs/xfs/xfs_attr.h | 6 -- fs/xfs/xfs_vnodeops.h | 2=20 6 files changed, 68 insertions(+), 59 deletions(-) Index: kern_ci/fs/xfs/dmapi/xfs_dm.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/dmapi/xfs_dm.c +++ kern_ci/fs/xfs/dmapi/xfs_dm.c @@ -516,8 +516,7 @@ xfs_dm_bulkall_iget_one( xfs_iunlock(ip, XFS_ILOCK_SHARED); =20 memset(&xbuf->dx_attrdata, 0, sizeof(dm_vardata_t)); - error =3D xfs_attr_get(ip, attr_name, attr_buf, - &value_len, ATTR_ROOT, sys_cred); + error =3D xfs_attr_get(ip, attr_name, attr_buf, &value_len, ATTR_ROOT); iput(ip->i_vnode); =20 DM_EA_XLATE_ERR(error); @@ -1691,8 +1690,8 @@ xfs_dm_get_destroy_dmattr( if (value =3D=3D NULL) return(-ENOMEM); =20 - error =3D xfs_attr_get(XFS_I(inode), dkattrname.dan_chars, value, &value_= len, - ATTR_ROOT, sys_cred); + error =3D xfs_attr_get(XFS_I(inode), dkattrname.dan_chars, value, + &value_len, ATTR_ROOT); if (error =3D=3D ERANGE) { kfree(value); alloc_size =3D value_len; @@ -1701,7 +1700,7 @@ xfs_dm_get_destroy_dmattr( return(-ENOMEM); =20 error =3D xfs_attr_get(XFS_I(inode), dkattrname.dan_chars, value, - &value_len, ATTR_ROOT, sys_cred); + &value_len, ATTR_ROOT); } if (error) { kfree(value); @@ -1970,7 +1969,7 @@ xfs_dm_get_dmattr( value_len =3D alloc_size; /* in/out parameter */ =20 error =3D xfs_attr_get(XFS_I(inode), name.dan_chars, value, &value_len, - ATTR_ROOT, NULL); + ATTR_ROOT); DM_EA_XLATE_ERR(error); =20 /* DMAPI requires an errno of ENOENT if an attribute does not exist, @@ -2217,7 +2216,7 @@ xfs_dm_getall_dmattr( =20 error =3D xfs_attr_get(XFS_I(inode), entry->a_name, (void *)(ulist + 1), &value_len, - ATTR_ROOT, NULL); + ATTR_ROOT); DM_EA_XLATE_ERR(error); =20 if (error || value_len !=3D entry->a_valuelen) { Index: kern_ci/fs/xfs/linux-2.6/xfs_ioctl.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/linux-2.6/xfs_ioctl.c +++ kern_ci/fs/xfs/linux-2.6/xfs_ioctl.c @@ -505,14 +505,14 @@ xfs_attrmulti_attr_get( { char *kbuf; int error =3D EFAULT; -=09 + if (*len > XATTR_SIZE_MAX) return EINVAL; kbuf =3D kmalloc(*len, GFP_KERNEL); if (!kbuf) return ENOMEM; =20 - error =3D xfs_attr_get(XFS_I(inode), name, kbuf, (int *)len, flags, NULL); + error =3D xfs_attr_get(XFS_I(inode), name, kbuf, (int *)len, flags); if (error) goto out_kfree; =20 @@ -548,7 +548,7 @@ xfs_attrmulti_attr_set( =20 if (copy_from_user(kbuf, ubuf, len)) goto out_kfree; -=09=09=09 + error =3D xfs_attr_set(XFS_I(inode), name, kbuf, len, flags); =20 out_kfree: Index: kern_ci/fs/xfs/xfs_acl.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_acl.c +++ kern_ci/fs/xfs/xfs_acl.c @@ -341,14 +341,15 @@ xfs_acl_iaccess( { xfs_acl_t *acl; int rval; + struct xfs_name acl_name =3D {SGI_ACL_FILE, SGI_ACL_FILE_SIZE}; =20 if (!(_ACL_ALLOC(acl))) return -1; =20 /* If the file has no ACL return -1. */ rval =3D sizeof(xfs_acl_t); - if (xfs_attr_fetch(ip, SGI_ACL_FILE, SGI_ACL_FILE_SIZE, - (char *)acl, &rval, ATTR_ROOT | ATTR_KERNACCESS, cr)) { + if (xfs_attr_fetch(ip, &acl_name, (char *)acl, &rval, + ATTR_ROOT | ATTR_KERNACCESS)) { _ACL_FREE(acl); return -1; } @@ -595,7 +596,7 @@ xfs_acl_get_attr( *error =3D xfs_attr_get(xfs_vtoi(vp), kind =3D=3D _ACL_TYPE_ACCESS ? SGI_ACL_FILE : SGI_ACL_DEFAULT, - (char *)aclp, &len, flags, sys_cred); + (char *)aclp, &len, flags); if (*error || (flags & ATTR_KERNOVAL)) return; xfs_acl_get_endian(aclp); Index: kern_ci/fs/xfs/xfs_attr.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_attr.c +++ kern_ci/fs/xfs/xfs_attr.c @@ -101,14 +101,28 @@ STATIC int xfs_attr_rmtval_remove(xfs_da ktrace_t *xfs_attr_trace_buf; #endif =20 +STATIC int +xfs_attr_name_to_xname( + struct xfs_name *xname, + const char *aname) +{ + if (!aname) + return EINVAL; + xname->name =3D aname; + xname->len =3D strlen(aname); + if (xname->len >=3D MAXNAMELEN) + return EFAULT; /* match IRIX behaviour */ + + return 0; +} =20 /*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D * Overall external interface routines. *=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*/ =20 int -xfs_attr_fetch(xfs_inode_t *ip, const char *name, int namelen, - char *value, int *valuelenp, int flags, struct cred *cred) +xfs_attr_fetch(xfs_inode_t *ip, struct xfs_name *name, + char *value, int *valuelenp, int flags) { xfs_da_args_t args; int error; @@ -122,8 +136,8 @@ xfs_attr_fetch(xfs_inode_t *ip, const ch * Fill in the arg structure for this request. */ memset((char *)&args, 0, sizeof(args)); - args.name =3D name; - args.namelen =3D namelen; + args.name =3D name->name; + args.namelen =3D name->len; args.value =3D value; args.valuelen =3D *valuelenp; args.flags =3D flags; @@ -162,31 +176,29 @@ xfs_attr_get( const char *name, char *value, int *valuelenp, - int flags, - cred_t *cred) + int flags) { - int error, namelen; + int error; + struct xfs_name xname; =20 XFS_STATS_INC(xs_attr_get); =20 - if (!name) - return(EINVAL); - namelen =3D strlen(name); - if (namelen >=3D MAXNAMELEN) - return(EFAULT); /* match IRIX behaviour */ - if (XFS_FORCED_SHUTDOWN(ip->i_mount)) return(EIO); =20 + error =3D xfs_attr_name_to_xname(&xname, name); + if (error) + return error; + xfs_ilock(ip, XFS_ILOCK_SHARED); - error =3D xfs_attr_fetch(ip, name, namelen, value, valuelenp, flags, cred= ); + error =3D xfs_attr_fetch(ip, &xname, value, valuelenp, flags); xfs_iunlock(ip, XFS_ILOCK_SHARED); return(error); } =20 -int -xfs_attr_set_int(xfs_inode_t *dp, const char *name, int namelen, - char *value, int valuelen, int flags) +STATIC int +xfs_attr_set_int(xfs_inode_t *dp, struct xfs_name *name, + char *value, int valuelen, int flags) { xfs_da_args_t args; xfs_fsblock_t firstblock; @@ -209,7 +221,7 @@ xfs_attr_set_int(xfs_inode_t *dp, const=20 */ if (XFS_IFORK_Q(dp) =3D=3D 0) { int sf_size =3D sizeof(xfs_attr_sf_hdr_t) + - XFS_ATTR_SF_ENTSIZE_BYNAME(namelen, valuelen); + XFS_ATTR_SF_ENTSIZE_BYNAME(name->len, valuelen); =20 if ((error =3D xfs_bmap_add_attrfork(dp, sf_size, rsvd))) return(error); @@ -219,8 +231,8 @@ xfs_attr_set_int(xfs_inode_t *dp, const=20 * Fill in the arg structure for this request. */ memset((char *)&args, 0, sizeof(args)); - args.name =3D name; - args.namelen =3D namelen; + args.name =3D name->name; + args.namelen =3D name->len; args.value =3D value; args.valuelen =3D valuelen; args.flags =3D flags; @@ -236,7 +248,7 @@ xfs_attr_set_int(xfs_inode_t *dp, const=20 * Determine space new attribute will use, and if it would be * "local" or "remote" (note: local !=3D inline). */ - size =3D xfs_attr_leaf_newentsize(namelen, valuelen, + size =3D xfs_attr_leaf_newentsize(name->len, valuelen, mp->m_sb.sb_blocksize, &local); =20 nblks =3D XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK); @@ -429,26 +441,27 @@ xfs_attr_set( int valuelen, int flags) { - int namelen; - - namelen =3D strlen(name); - if (namelen >=3D MAXNAMELEN) - return EFAULT; /* match IRIX behaviour */ + int error; + struct xfs_name xname; =20 XFS_STATS_INC(xs_attr_set); =20 if (XFS_FORCED_SHUTDOWN(dp->i_mount)) return (EIO); =20 - return xfs_attr_set_int(dp, name, namelen, value, valuelen, flags); + error =3D xfs_attr_name_to_xname(&xname, name); + if (error) + return error; + + return xfs_attr_set_int(dp, &xname, value, valuelen, flags); } =20 /* * Generic handler routine to remove a name from an attribute list. * Transitions attribute list from Btree to shortform as necessary. */ -int -xfs_attr_remove_int(xfs_inode_t *dp, const char *name, int namelen, int fl= ags) +STATIC int +xfs_attr_remove_int(xfs_inode_t *dp, struct xfs_name *name, int flags) { xfs_da_args_t args; xfs_fsblock_t firstblock; @@ -460,8 +473,8 @@ xfs_attr_remove_int(xfs_inode_t *dp, con * Fill in the arg structure for this request. */ memset((char *)&args, 0, sizeof(args)); - args.name =3D name; - args.namelen =3D namelen; + args.name =3D name->name; + args.namelen =3D name->len; args.flags =3D flags; args.hashval =3D xfs_da_hashname(args.name, args.namelen); args.dp =3D dp; @@ -575,17 +588,18 @@ xfs_attr_remove( const char *name, int flags) { - int namelen; - - namelen =3D strlen(name); - if (namelen >=3D MAXNAMELEN) - return EFAULT; /* match IRIX behaviour */ + int error; + struct xfs_name xname; =20 XFS_STATS_INC(xs_attr_remove); =20 if (XFS_FORCED_SHUTDOWN(dp->i_mount)) return (EIO); =20 + error =3D xfs_attr_name_to_xname(&xname, name); + if (error) + return error; + xfs_ilock(dp, XFS_ILOCK_SHARED); if (XFS_IFORK_Q(dp) =3D=3D 0 || (dp->i_d.di_aformat =3D=3D XFS_DINODE_FMT_EXTENTS && @@ -595,10 +609,10 @@ xfs_attr_remove( } xfs_iunlock(dp, XFS_ILOCK_SHARED); =20 - return xfs_attr_remove_int(dp, name, namelen, flags); + return xfs_attr_remove_int(dp, &xname, flags); } =20 -int /* error */ +STATIC int xfs_attr_list_int(xfs_attr_list_context_t *context) { int error; @@ -2522,8 +2536,7 @@ attr_generic_get( { int error, asize =3D size; =20 - error =3D xfs_attr_get(xfs_vtoi(vp), name, data, - &asize, xflags, NULL); + error =3D xfs_attr_get(xfs_vtoi(vp), name, data, &asize, xflags); if (!error) return asize; return -error; Index: kern_ci/fs/xfs/xfs_attr.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_attr.h +++ kern_ci/fs/xfs/xfs_attr.h @@ -158,14 +158,10 @@ struct xfs_da_args; /* * Overall external interface routines. */ -int xfs_attr_set_int(struct xfs_inode *, const char *, int, char *, int, i= nt); -int xfs_attr_remove_int(struct xfs_inode *, const char *, int, int); -int xfs_attr_list_int(struct xfs_attr_list_context *); int xfs_attr_inactive(struct xfs_inode *dp); =20 int xfs_attr_shortform_getvalue(struct xfs_da_args *); -int xfs_attr_fetch(struct xfs_inode *, const char *, int, - char *, int *, int, struct cred *); +int xfs_attr_fetch(struct xfs_inode *, struct xfs_name *, char *, int *, i= nt); int xfs_attr_rmtval_get(struct xfs_da_args *args); =20 #endif /* __XFS_ATTR_H__ */ Index: kern_ci/fs/xfs/xfs_vnodeops.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern_ci.orig/fs/xfs/xfs_vnodeops.h +++ kern_ci/fs/xfs/xfs_vnodeops.h @@ -50,7 +50,7 @@ int xfs_rename(struct xfs_inode *src_dp, struct xfs_inode *src_ip, struct xfs_inode *target_dp, struct xfs_name *target_name, struct xfs_inode *target_ip); int xfs_attr_get(struct xfs_inode *ip, const char *name, char *value, - int *valuelenp, int flags, cred_t *cred); + int *valuelenp, int flags); int xfs_attr_set(struct xfs_inode *dp, const char *name, char *value, int valuelen, int flags); int xfs_attr_remove(struct xfs_inode *dp, const char *name, int flags); ------------AM4LHBp66LgJJGbTwZhLkO-- From owner-xfs@oss.sgi.com Thu Apr 17 22:24:33 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 17 Apr 2008 22:24:50 -0700 (PDT) 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 m3I5OWgr029618 for ; Thu, 17 Apr 2008 22:24:33 -0700 X-ASG-Debug-ID: 1208496311-571b02140000-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 C02E4A41092; Thu, 17 Apr 2008 22:25:12 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id MFoZAPHUaDXizFd7; Thu, 17 Apr 2008 22:25:12 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jmj5z-0006QK-Ix; Fri, 18 Apr 2008 05:25:11 +0000 Date: Fri, 18 Apr 2008 01:25:11 -0400 From: Christoph Hellwig To: Barry Naujok Cc: Christoph Hellwig , "xfs@oss.sgi.com" , xfs-dev X-ASG-Orig-Subj: Re: [REVIEW] - cleanup xfs_attr a bit Subject: Re: [REVIEW] - cleanup xfs_attr a bit Message-ID: <20080418052511.GA23310@infradead.org> References: <20080417182702.GA7154@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1208496312 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.1, rules version 3.1.48097 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15459 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs Looks good. From owner-xfs@oss.sgi.com Thu Apr 17 23:23:19 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 17 Apr 2008 23:23:34 -0700 (PDT) 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.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42, J_CHICKENPOX_45,J_CHICKENPOX_47,J_CHICKENPOX_48 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 m3I6NBBR000604 for ; Thu, 17 Apr 2008 23:23:16 -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 QAA05020; Fri, 18 Apr 2008 16:23:37 +1000 Message-ID: <48083E68.4000002@sgi.com> Date: Fri, 18 Apr 2008 16:23:36 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Barry Naujok CC: Christoph Hellwig , "xfs@oss.sgi.com" , xfs-dev Subject: Re: [REVIEW] - cleanup xfs_attr a bit References: <20080417182702.GA7154@infradead.org> In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15460 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Barry Naujok wrote: > On Fri, 18 Apr 2008 04:27:02 +1000, Christoph Hellwig > wrote: > >> On Thu, Apr 17, 2008 at 12:35:36PM +1000, Barry Naujok wrote: >>> This patch starts using struct xfs_name more for the xattr code and >>> is another step for using xfs_name in xfs_da_args. >>> >>> Also, the cred parameter is removed from xfs_attr_get and >>> xfs_attr_fetch. >> Yeah, we used to have callers to capable_cred() which just compared with sys_cred (to effectively bypass cred checks). But we don't seem to have any callers anymore. Used to be in xfs_iaccess() and xfs_acl_capability_check() use it. So is anyone using sys_cred now? Is anyone using creds at all now? i.e. should the cred removal be part of an entire cred cleanup? So xfs_attr_fetch takes xfs_name instead of . You made xfs_attr_remove_int, set_int and list_int version STATIC and removed header protos. Ok. So xfs_attr_name_to_xname() was invented to abstract validity code being used in xfs_attr_get() and xfs_attr_set() and set up struct. Yeah, some of these functions changed so that we could pass in binary names instead of null-terminated ones, within the kernel code (e.g. parent ptrs) and hence needed name-len as param. --Tim >> Looks good, but I'd really not expected a function called >> xfs_attr_name_to_name to do the shutdown check. Either keep it in the >> callers or give the function a different name. > > Ok, done: > > --- > fs/xfs/dmapi/xfs_dm.c | 13 ++---- > fs/xfs/linux-2.6/xfs_ioctl.c | 6 +- > fs/xfs/xfs_acl.c | 7 +-- > fs/xfs/xfs_attr.c | 93 > ++++++++++++++++++++++++------------------- > fs/xfs/xfs_attr.h | 6 -- > fs/xfs/xfs_vnodeops.h | 2 > 6 files changed, 68 insertions(+), 59 deletions(-) > > Index: kern_ci/fs/xfs/dmapi/xfs_dm.c > =================================================================== > --- kern_ci.orig/fs/xfs/dmapi/xfs_dm.c > +++ kern_ci/fs/xfs/dmapi/xfs_dm.c > @@ -516,8 +516,7 @@ xfs_dm_bulkall_iget_one( > xfs_iunlock(ip, XFS_ILOCK_SHARED); > > memset(&xbuf->dx_attrdata, 0, sizeof(dm_vardata_t)); > - error = xfs_attr_get(ip, attr_name, attr_buf, > - &value_len, ATTR_ROOT, sys_cred); > + error = xfs_attr_get(ip, attr_name, attr_buf, &value_len, ATTR_ROOT); > iput(ip->i_vnode); > > DM_EA_XLATE_ERR(error); > @@ -1691,8 +1690,8 @@ xfs_dm_get_destroy_dmattr( > if (value == NULL) > return(-ENOMEM); > > - error = xfs_attr_get(XFS_I(inode), dkattrname.dan_chars, value, > &value_len, > - ATTR_ROOT, sys_cred); > + error = xfs_attr_get(XFS_I(inode), dkattrname.dan_chars, value, > + &value_len, ATTR_ROOT); > if (error == ERANGE) { > kfree(value); > alloc_size = value_len; > @@ -1701,7 +1700,7 @@ xfs_dm_get_destroy_dmattr( > return(-ENOMEM); > > error = xfs_attr_get(XFS_I(inode), dkattrname.dan_chars, value, > - &value_len, ATTR_ROOT, sys_cred); > + &value_len, ATTR_ROOT); > } > if (error) { > kfree(value); > @@ -1970,7 +1969,7 @@ xfs_dm_get_dmattr( > value_len = alloc_size; /* in/out parameter */ > > error = xfs_attr_get(XFS_I(inode), name.dan_chars, value, &value_len, > - ATTR_ROOT, NULL); > + ATTR_ROOT); > DM_EA_XLATE_ERR(error); > > /* DMAPI requires an errno of ENOENT if an attribute does not exist, > @@ -2217,7 +2216,7 @@ xfs_dm_getall_dmattr( > > error = xfs_attr_get(XFS_I(inode), entry->a_name, > (void *)(ulist + 1), &value_len, > - ATTR_ROOT, NULL); > + ATTR_ROOT); > DM_EA_XLATE_ERR(error); > > if (error || value_len != entry->a_valuelen) { > Index: kern_ci/fs/xfs/linux-2.6/xfs_ioctl.c > =================================================================== > --- kern_ci.orig/fs/xfs/linux-2.6/xfs_ioctl.c > +++ kern_ci/fs/xfs/linux-2.6/xfs_ioctl.c > @@ -505,14 +505,14 @@ xfs_attrmulti_attr_get( > { > char *kbuf; > int error = EFAULT; > - > + > if (*len > XATTR_SIZE_MAX) > return EINVAL; > kbuf = kmalloc(*len, GFP_KERNEL); > if (!kbuf) > return ENOMEM; > > - error = xfs_attr_get(XFS_I(inode), name, kbuf, (int *)len, flags, > NULL); > + error = xfs_attr_get(XFS_I(inode), name, kbuf, (int *)len, flags); > if (error) > goto out_kfree; > > @@ -548,7 +548,7 @@ xfs_attrmulti_attr_set( > > if (copy_from_user(kbuf, ubuf, len)) > goto out_kfree; > - > + > error = xfs_attr_set(XFS_I(inode), name, kbuf, len, flags); > > out_kfree: > Index: kern_ci/fs/xfs/xfs_acl.c > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_acl.c > +++ kern_ci/fs/xfs/xfs_acl.c > @@ -341,14 +341,15 @@ xfs_acl_iaccess( > { > xfs_acl_t *acl; > int rval; > + struct xfs_name acl_name = {SGI_ACL_FILE, SGI_ACL_FILE_SIZE}; > > if (!(_ACL_ALLOC(acl))) > return -1; > > /* If the file has no ACL return -1. */ > rval = sizeof(xfs_acl_t); > - if (xfs_attr_fetch(ip, SGI_ACL_FILE, SGI_ACL_FILE_SIZE, > - (char *)acl, &rval, ATTR_ROOT | ATTR_KERNACCESS, cr)) { > + if (xfs_attr_fetch(ip, &acl_name, (char *)acl, &rval, > + ATTR_ROOT | ATTR_KERNACCESS)) { > _ACL_FREE(acl); > return -1; > } > @@ -595,7 +596,7 @@ xfs_acl_get_attr( > *error = xfs_attr_get(xfs_vtoi(vp), > kind == _ACL_TYPE_ACCESS ? > SGI_ACL_FILE : SGI_ACL_DEFAULT, > - (char *)aclp, &len, flags, sys_cred); > + (char *)aclp, &len, flags); > if (*error || (flags & ATTR_KERNOVAL)) > return; > xfs_acl_get_endian(aclp); > Index: kern_ci/fs/xfs/xfs_attr.c > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_attr.c > +++ kern_ci/fs/xfs/xfs_attr.c > @@ -101,14 +101,28 @@ STATIC int xfs_attr_rmtval_remove(xfs_da > ktrace_t *xfs_attr_trace_buf; > #endif > > +STATIC int > +xfs_attr_name_to_xname( > + struct xfs_name *xname, > + const char *aname) > +{ > + if (!aname) > + return EINVAL; > + xname->name = aname; > + xname->len = strlen(aname); > + if (xname->len >= MAXNAMELEN) > + return EFAULT; /* match IRIX behaviour */ > + > + return 0; > +} > > /*======================================================================== > * Overall external interface routines. > > *========================================================================*/ > > int > -xfs_attr_fetch(xfs_inode_t *ip, const char *name, int namelen, > - char *value, int *valuelenp, int flags, struct cred *cred) > +xfs_attr_fetch(xfs_inode_t *ip, struct xfs_name *name, > + char *value, int *valuelenp, int flags) > { > xfs_da_args_t args; > int error; > @@ -122,8 +136,8 @@ xfs_attr_fetch(xfs_inode_t *ip, const ch > * Fill in the arg structure for this request. > */ > memset((char *)&args, 0, sizeof(args)); > - args.name = name; > - args.namelen = namelen; > + args.name = name->name; > + args.namelen = name->len; > args.value = value; > args.valuelen = *valuelenp; > args.flags = flags; > > XFS_STATS_INC(xs_attr_get); > > - if (!name) > - return(EINVAL); > - namelen = strlen(name); > - if (namelen >= MAXNAMELEN) > - return(EFAULT); /* match IRIX behaviour */ > - > if (XFS_FORCED_SHUTDOWN(ip->i_mount)) > return(EIO); > > + error = xfs_attr_name_to_xname(&xname, name); > + if (error) > + return error; > + > xfs_ilock(ip, XFS_ILOCK_SHARED); > - error = xfs_attr_fetch(ip, name, namelen, value, valuelenp, flags, > cred); > + error = xfs_attr_fetch(ip, &xname, value, valuelenp, flags); > xfs_iunlock(ip, XFS_ILOCK_SHARED); > return(error); > } > > -int > -xfs_attr_set_int(xfs_inode_t *dp, const char *name, int namelen, > - char *value, int valuelen, int flags) > +STATIC int > +xfs_attr_set_int(xfs_inode_t *dp, struct xfs_name *name, > + char *value, int valuelen, int flags) > { > xfs_da_args_t args; > xfs_fsblock_t firstblock; > @@ -209,7 +221,7 @@ xfs_attr_set_int(xfs_inode_t *dp, const > */ > if (XFS_IFORK_Q(dp) == 0) { > int sf_size = sizeof(xfs_attr_sf_hdr_t) + > - XFS_ATTR_SF_ENTSIZE_BYNAME(namelen, valuelen); > + XFS_ATTR_SF_ENTSIZE_BYNAME(name->len, valuelen); > > if ((error = xfs_bmap_add_attrfork(dp, sf_size, rsvd))) > return(error); > @@ -219,8 +231,8 @@ xfs_attr_set_int(xfs_inode_t *dp, const > * Fill in the arg structure for this request. > */ > memset((char *)&args, 0, sizeof(args)); > - args.name = name; > - args.namelen = namelen; > + args.name = name->name; > + args.namelen = name->len; > args.value = value; > args.valuelen = valuelen; > args.flags = flags; > @@ -236,7 +248,7 @@ xfs_attr_set_int(xfs_inode_t *dp, const > * Determine space new attribute will use, and if it would be > * "local" or "remote" (note: local != inline). > */ > - size = xfs_attr_leaf_newentsize(namelen, valuelen, > + size = xfs_attr_leaf_newentsize(name->len, valuelen, > mp->m_sb.sb_blocksize, &local); > > nblks = XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK); > @@ -429,26 +441,27 @@ xfs_attr_set( > int valuelen, > int flags) > { > - int namelen; > - > - namelen = strlen(name); > - if (namelen >= MAXNAMELEN) > - return EFAULT; /* match IRIX behaviour */ > + int error; > + struct xfs_name xname; > > XFS_STATS_INC(xs_attr_set); > > if (XFS_FORCED_SHUTDOWN(dp->i_mount)) > return (EIO); > > - return xfs_attr_set_int(dp, name, namelen, value, valuelen, flags); > + error = xfs_attr_name_to_xname(&xname, name); > + if (error) > + return error; > + > + return xfs_attr_set_int(dp, &xname, value, valuelen, flags); > } > > /* > * Generic handler routine to remove a name from an attribute list. > * Transitions attribute list from Btree to shortform as necessary. > */ > -int > -xfs_attr_remove_int(xfs_inode_t *dp, const char *name, int namelen, int > flags) > +STATIC int > +xfs_attr_remove_int(xfs_inode_t *dp, struct xfs_name *name, int flags) > { > xfs_da_args_t args; > xfs_fsblock_t firstblock; > @@ -460,8 +473,8 @@ xfs_attr_remove_int(xfs_inode_t *dp, con > * Fill in the arg structure for this request. > */ > memset((char *)&args, 0, sizeof(args)); > - args.name = name; > - args.namelen = namelen; > + args.name = name->name; > + args.namelen = name->len; > args.flags = flags; > args.hashval = xfs_da_hashname(args.name, args.namelen); > args.dp = dp; > @@ -575,17 +588,18 @@ xfs_attr_remove( > const char *name, > int flags) > { > - int namelen; > - > - namelen = strlen(name); > - if (namelen >= MAXNAMELEN) > - return EFAULT; /* match IRIX behaviour */ > + int error; > + struct xfs_name xname; > > XFS_STATS_INC(xs_attr_remove); > > if (XFS_FORCED_SHUTDOWN(dp->i_mount)) > return (EIO); > > + error = xfs_attr_name_to_xname(&xname, name); > + if (error) > + return error; > + > xfs_ilock(dp, XFS_ILOCK_SHARED); > if (XFS_IFORK_Q(dp) == 0 || > (dp->i_d.di_aformat == XFS_DINODE_FMT_EXTENTS && > @@ -595,10 +609,10 @@ xfs_attr_remove( > } > xfs_iunlock(dp, XFS_ILOCK_SHARED); > > - return xfs_attr_remove_int(dp, name, namelen, flags); > + return xfs_attr_remove_int(dp, &xname, flags); > } > > -int /* error */ > +STATIC int > xfs_attr_list_int(xfs_attr_list_context_t *context) > { > int error; > @@ -2522,8 +2536,7 @@ attr_generic_get( > { > int error, asize = size; > > - error = xfs_attr_get(xfs_vtoi(vp), name, data, > - &asize, xflags, NULL); > + error = xfs_attr_get(xfs_vtoi(vp), name, data, &asize, xflags); > if (!error) > return asize; > return -error; > Index: kern_ci/fs/xfs/xfs_attr.h > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_attr.h > +++ kern_ci/fs/xfs/xfs_attr.h > @@ -158,14 +158,10 @@ struct xfs_da_args; > /* > * Overall external interface routines. > */ > -int xfs_attr_set_int(struct xfs_inode *, const char *, int, char *, > int, int); > -int xfs_attr_remove_int(struct xfs_inode *, const char *, int, int); > -int xfs_attr_list_int(struct xfs_attr_list_context *); > int xfs_attr_inactive(struct xfs_inode *dp); > > int xfs_attr_shortform_getvalue(struct xfs_da_args *); > -int xfs_attr_fetch(struct xfs_inode *, const char *, int, > - char *, int *, int, struct cred *); > +int xfs_attr_fetch(struct xfs_inode *, struct xfs_name *, char *, int > *, int); > int xfs_attr_rmtval_get(struct xfs_da_args *args); > > #endif /* __XFS_ATTR_H__ */ > Index: kern_ci/fs/xfs/xfs_vnodeops.h > =================================================================== > --- kern_ci.orig/fs/xfs/xfs_vnodeops.h > +++ kern_ci/fs/xfs/xfs_vnodeops.h > @@ -50,7 +50,7 @@ int xfs_rename(struct xfs_inode *src_dp, > struct xfs_inode *src_ip, struct xfs_inode *target_dp, > struct xfs_name *target_name, struct xfs_inode *target_ip); > int xfs_attr_get(struct xfs_inode *ip, const char *name, char *value, > - int *valuelenp, int flags, cred_t *cred); > + int *valuelenp, int flags); > int xfs_attr_set(struct xfs_inode *dp, const char *name, char *value, > int valuelen, int flags); > int xfs_attr_remove(struct xfs_inode *dp, const char *name, int flags); > From owner-xfs@oss.sgi.com Fri Apr 18 00:06:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 18 Apr 2008 00:07:03 -0700 (PDT) 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.0 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 m3I76ZYe005166 for ; Fri, 18 Apr 2008 00:06:37 -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 RAA05823; Fri, 18 Apr 2008 17:06:50 +1000 Message-ID: <4808488A.7010204@sgi.com> Date: Fri, 18 Apr 2008 17:06:50 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Andi Kleen CC: David Chinner , Niv Sardi , Christoph Hellwig , xfs@oss.sgi.com Subject: likely and unlikely was: Re: [PATCH] split xfs_ioc_xattr References: <20080319204014.GA23644@lst.de> <20080414032940.GA10579@lst.de> <20080416063712.GN108924158@sgi.com> <4805A589.7080906@sgi.com> <87ve2i5kbs.fsf@basil.nowhere.org> In-Reply-To: <87ve2i5kbs.fsf@basil.nowhere.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15461 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Hi, Thanks for the explanation, Andi. So I guess the upshot is, that it can make a difference but in many cases (where the perf difference isn't an issue) it is probably not worth the ugliness. And in performance cases, it would be best to test the hypothesis with the unlikely profiler patch => it will be _unlikely_ we will bother ;-) So I don't think I'll be bothering with them then unless an issue comes up :) --Tim Andi Kleen wrote: > Timothy Shimmin writes: >> I'm still wondering if likely() and unlikely() should ever be used or not? > > It's more than just branch predictors. unlikely also moves unlikely > code out of line and keeps it out of the icache (the obvious > drawback is that it makes the asm code much harder to read > during debugging though -- that is why it used to be turned off > on x86-64) > > Then CPUs have two types of branch predictors: dynamic ones with > history and static ones. Dynamic branch predictors tend to only work > when the code has been recently executed several times and is still > cached in their history buffers > > Now the nature of the kernel is that it is a library serving much more > code running in user space. This leads to often the user space > clearing out the history buffers and caches so kernel code has to often > deal with running cache cold and also branch predictor cold. > > Then there are the static branch predictors in the CPU and unlikely() > actually rearranges code to make them predict correctly. > > Personally I would say the cache effects (moving code out of line) > are more important than the branch prediction because cache misses > are more costly than branch misprediction. > > That all said it might make sense in some really performance critical code, > especially if it's a in a loop and the gcc static branch predictors > (gcc has a large range of builtin heuristics that say e.g. (x < 0) or > (x == NULL) is unlikely). Most code is probably not performance critical > enough to justify the ugliness of the code annotations. And again > for many situations the builtin predictors of gcc (and the CPU) do > fine without help anyways. > > Also if you add them you should at some point run with the unlikely > profiler patch from mm just to make sure that your guesses about > which paths are likely are actually correct. Humans are unfortunately > often wrong on such guesses. > > Ideally (but that might ask for too much for normal code writing) you > would only add them to code where you have oprofile data for branch > mispredictions or icache misses. > > -Andi > From owner-xfs@oss.sgi.com Fri Apr 18 01:25:20 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 18 Apr 2008 01:25:37 -0700 (PDT) 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.5 required=5.0 tests=AWL,BAYES_50,SUBJ_NOTIFICATION autolearn=no 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 m3I8PIpS014916 for ; Fri, 18 Apr 2008 01:25:19 -0700 X-ASG-Debug-ID: 1208507155-321003dc0000-dIjHVC X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from list.audettemedia.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EF081158D673 for ; Fri, 18 Apr 2008 01:25:55 -0700 (PDT) Received: from list.audettemedia.com (94.b182.bendtel.net [66.39.182.94]) by cuda.sgi.com with ESMTP id eWS4IRFJ95FVVOzK for ; Fri, 18 Apr 2008 01:25:55 -0700 (PDT) Received: from spudmonk (66.39.182.94) by list.audettemedia.com (LSMTP for Windows NT v1.1b) with SMTP id <3.00283624@list.audettemedia.com>; Fri, 18 Apr 2008 1:32:28 -0700 Date: Fri, 18 Apr 2008 01:32:28 -0700 From: "L-Soft list server at AudetteMedia (1.8d)" X-ASG-Orig-Subj: COOLTRICKS list request notification Subject: COOLTRICKS list request notification To: linux-xfs@oss.sgi.com Reply-To: cooltricks-signoff-request@LIST.AUDETTEMEDIA.COM X-LSV-ListID: COOLTRICKS X-Barracuda-Connect: 94.b182.bendtel.net[66.39.182.94] X-Barracuda-Start-Time: 1208507157 Message-Id: <20080418082555.EF081158D673@cuda.sgi.com> X-Barracuda-Bayes: INNOCENT GLOBAL 0.5002 1.0000 0.7500 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 1.66 X-Barracuda-Spam-Status: No, SCORE=1.66 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=FROM_NO_LOWER, MSGID_FROM_MTA_ID X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48109 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 FROM_NO_LOWER From address has no lower-case characters 0.70 MSGID_FROM_MTA_ID Message-Id for external message added locally X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15462 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: LISTSERV@LIST.AUDETTEMEDIA.COM Precedence: bulk X-list: xfs Fri, 18 Apr 2008 01:32:28 Your subscription to the COOLTRICKS list (Cool Tricks & Trinkets Newsletter) has been accepted. If this subscription was made in error, simply send a blank reply to this message and you will be unsubscribed. Welcome to The Cool Tricks and Trinkets Newsletter (free) offering weekly insights into new, useful, fun, unusual and interesting sites on the Internet. Published each Thursday, it is one of the Internet's most widely read newsletters with over 200,000 subscribers. You can read the current issue online: http://www.tricksandtrinkets.com Please note that this signoff method requires that you send from the same email account that you joined with. You subscribed as linux-xfs@OSS.SGI.COM. If you have trouble unsubscribing, send your unsubscribe request with this address to: info@tricksandtrinkets.com From owner-xfs@oss.sgi.com Fri Apr 18 06:34:29 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 18 Apr 2008 06:34:42 -0700 (PDT) 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 (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 m3IDYPD9005520 for ; Fri, 18 Apr 2008 06:34:28 -0700 X-ASG-Debug-ID: 1208525705-0dae03830000-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 70095158FBC2 for ; Fri, 18 Apr 2008 06:35:05 -0700 (PDT) Received: from one.firstfloor.org (one.firstfloor.org [213.235.205.2]) by cuda.sgi.com with ESMTP id spcN6v39T7bB05v5 for ; Fri, 18 Apr 2008 06:35:05 -0700 (PDT) Received: from [78.53.156.173] (f053156173.adsl.alicedsl.de [78.53.156.173]) by one.firstfloor.org (Postfix) with ESMTP id 992EB1B10001; Fri, 18 Apr 2008 15:40:21 +0200 (CEST) Message-ID: <4808A383.5050907@firstfloor.org> Date: Fri, 18 Apr 2008 15:34:59 +0200 From: Andi Kleen User-Agent: Thunderbird 1.5.0.12 (X11/20060911) MIME-Version: 1.0 To: Timothy Shimmin CC: David Chinner , Niv Sardi , Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: likely and unlikely was: Re: [PATCH] split xfs_ioc_xattr Subject: Re: likely and unlikely was: Re: [PATCH] split xfs_ioc_xattr References: <20080319204014.GA23644@lst.de> <20080414032940.GA10579@lst.de> <20080416063712.GN108924158@sgi.com> <4805A589.7080906@sgi.com> <87ve2i5kbs.fsf@basil.nowhere.org> <4808488A.7010204@sgi.com> In-Reply-To: <4808488A.7010204@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: one.firstfloor.org[213.235.205.2] X-Barracuda-Start-Time: 1208525706 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.1, rules version 3.1.48129 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15463 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: andi@firstfloor.org Precedence: bulk X-list: xfs Timothy Shimmin wrote: > Hi, > > Thanks for the explanation, Andi. > So I guess the upshot is, that it can make a difference but > in many cases (where the perf difference isn't an issue) > it is probably not worth the ugliness. > And in performance cases, it would be best to test the hypothesis > with the unlikely profiler patch > => it will be _unlikely_ we will bother ;-) > So I don't think I'll be bothering with them then unless > an issue comes up :) Ideal would be to not bother by default, but occasionally run oprofile with icache and branch misprediction profiling for macro benchmarks (significant user space code running) and if you see any icache miss/mispredict hot spots in your code add the annotations there and then double check with the unlikely profiler. -Andi From owner-xfs@oss.sgi.com Fri Apr 18 07:05:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 18 Apr 2008 07:05:23 -0700 (PDT) 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.7 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 m3IE529L007735 for ; Fri, 18 Apr 2008 07:05:04 -0700 X-ASG-Debug-ID: 1208527542-116401220000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx1.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B9E7AA49FCE; Fri, 18 Apr 2008 07:05:42 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id KUlfWOOPmE1YqlOp; Fri, 18 Apr 2008 07:05:42 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id m3IE5aGl029469; Fri, 18 Apr 2008 10:05:36 -0400 Received: from file.rdu.redhat.com (file.rdu.redhat.com [10.11.255.147]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m3IE5TMu016418; Fri, 18 Apr 2008 10:05:29 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by file.rdu.redhat.com (8.13.1/8.13.1) with ESMTP id m3IE5PSf018125; Fri, 18 Apr 2008 10:05:26 -0400 Message-ID: <4808AAA5.1060201@sandeen.net> Date: Fri, 18 Apr 2008 09:05:25 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (X11/20080226) MIME-Version: 1.0 To: Timothy Shimmin CC: Andi Kleen , David Chinner , Niv Sardi , Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: likely and unlikely was: Re: [PATCH] split xfs_ioc_xattr Subject: Re: likely and unlikely was: Re: [PATCH] split xfs_ioc_xattr References: <20080319204014.GA23644@lst.de> <20080414032940.GA10579@lst.de> <20080416063712.GN108924158@sgi.com> <4805A589.7080906@sgi.com> <87ve2i5kbs.fsf@basil.nowhere.org> <4808488A.7010204@sgi.com> In-Reply-To: <4808488A.7010204@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 X-Barracuda-Connect: mx1.redhat.com[66.187.233.31] X-Barracuda-Start-Time: 1208527543 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15464 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Timothy Shimmin wrote: > Hi, > > Thanks for the explanation, Andi. > So I guess the upshot is, that it can make a difference but > in many cases (where the perf difference isn't an issue) > it is probably not worth the ugliness. > And in performance cases, it would be best to test the hypothesis > with the unlikely profiler patch > => it will be _unlikely_ we will bother ;-) > So I don't think I'll be bothering with them then unless > an issue comes up :) > > --Tim ISTR that the dir2 code on Irix had tons of compiler pragmas for likely and unlikely paths, and that it actually was well-profiled and tested. Did that ever get translated into Linux hints? -Eric From owner-xfs@oss.sgi.com Fri Apr 18 13:11:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 18 Apr 2008 13:11:39 -0700 (PDT) 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.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 m3IKBF45002159 for ; Fri, 18 Apr 2008 13:11:18 -0700 X-ASG-Debug-ID: 1208549515-077a00470000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D3256159372A for ; Fri, 18 Apr 2008 13:11:55 -0700 (PDT) Received: from smtp7-g19.free.fr (smtp7-g19.free.fr [212.27.42.64]) by cuda.sgi.com with ESMTP id HjI7m42pAvAmXIi0 for ; Fri, 18 Apr 2008 13:11:55 -0700 (PDT) Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by smtp7-g19.free.fr (Postfix) with ESMTP id B6EC4322809; Fri, 18 Apr 2008 22:11:54 +0200 (CEST) Received: from galadriel.home (pla78-1-82-235-234-79.fbx.proxad.net [82.235.234.79]) by smtp7-g19.free.fr (Postfix) with ESMTP id 527E5322863; Fri, 18 Apr 2008 22:11:54 +0200 (CEST) Date: Fri, 18 Apr 2008 22:10:33 +0200 From: Emmanuel Florac To: "Amicus Services Inc." Cc: xfs@oss.sgi.com, vincent.roy@geoglobal.com X-ASG-Orig-Subj: Re: XFS error cannot mount RAID Subject: Re: XFS error cannot mount RAID Message-ID: <20080418221033.66c1fb34@galadriel.home> In-Reply-To: <200804161801.35174.support@geoglobal.com> References: <200804161801.35174.support@geoglobal.com> Organization: Intellique X-Mailer: Claws Mail 2.9.1 (GTK+ 2.8.20; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp7-g19.free.fr[212.27.42.64] X-Barracuda-Start-Time: 1208549515 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.1, rules version 3.1.48154 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m3IKBI45002161 X-archive-position: 15465 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Wed, 16 Apr 2008 18:01:35 -0600 vous écriviez: > I have a AMCC RAID 5 which has been verified without error but cannot > mount on a SUSE 10.1 OS. Inconsistency on the volume may have > occurred during an abrupt power shutdown. Not sure if it would be > prudent to run XFS_Repair at this stage since XFS_check returned info > indicating inconsistencies exist. Well I know from experience that xfs_repair may bite, unfortunately, and that 3Ware RAID-5 really is touchy about power... BBU really is a must. Anyway, here is what to do : 1) if possible, use xfs_dump to backup the whole filesystem as is on some other device, tape, disk, whatever you have available. 2) run xfs_repair -n /dev/sdXX >> /tmp/testfile and send "testfile" to the list. good luck! -- -------------------------------------------------- Emmanuel Florac www.intellique.com -------------------------------------------------- From owner-xfs@oss.sgi.com Fri Apr 18 17:07:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 18 Apr 2008 17:07:36 -0700 (PDT) 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.0 required=5.0 tests=BAYES_50,RCVD_IN_PSBL autolearn=no 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 m3J07FNc015806 for ; Fri, 18 Apr 2008 17:07:18 -0700 X-ASG-Debug-ID: 1208563670-76f202300000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.pragma.ru (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BA6BA1B248B5 for ; Fri, 18 Apr 2008 17:07:50 -0700 (PDT) Received: from mail.pragma.ru (isp.pragma.ru [217.107.14.2]) by cuda.sgi.com with ESMTP id GB3Xbhiw5uCkz4SN for ; Fri, 18 Apr 2008 17:07:50 -0700 (PDT) Received: from COMP2 (241-dialup.tetra.pragma.ru [80.76.140.241]) by mail.pragma.ru (8.13.1/8.13.1) with SMTP id m3J07kiU027358 for ; Sat, 19 Apr 2008 05:07:47 +0500 Message-ID: <005b01c8a21c$f8f038bc$a94ee7c8@yoim> From: "Russian Paintings gallery" To: X-ASG-Orig-Subj: [Russian Pintings gallery presents] - New painters and paintings added - 19.04.2008 5:06:55 Subject: [Russian Pintings gallery presents] - New painters and paintings added - 19.04.2008 5:06:55 Date: Sat, 19 Apr 2008 05:06:55 +0400 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Priority: 1 X-MSMail-Priority: High X-Mailer: Microsoft Outlook Express 5.50.4522.1200 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4522.1200 X-Barracuda-Connect: isp.pragma.ru[217.107.14.2] X-Barracuda-Start-Time: 1208563674 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5175 1.0000 0.7500 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.87 X-Barracuda-Spam-Status: No, SCORE=0.87 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=X_PRIORITY_HIGH X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48170 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.12 X_PRIORITY_HIGH Sent with 'X-Priority' set to high X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15466 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: noreply@mail.pragma.ru Precedence: bulk X-list: xfs Respected visitors of the Russian Paintings Gallery site! Let us inform you about the new additions on the gallery's site: 1. Personal page of Ulybin Gennadiy added 2. Personal page of Demakov Yevgeniy added 3. Personal page of Fattah Hallah Abdel added 3. 2 paintings of Dmitriew George added 4. 6 paintings by Bezruckov Petr added 5. 2 paintings by Brahinskiy Arthur added Please, visit the news page of our site for detailed information: http://www.russianpaintings.org/gallery_news =================================================================== The first page of the site http://www.russianpaintings.org/ Sort artworks by authors http://www.russianpaintings.org/gallery_author Sort artworks by genres http://www.russianpaintings.org/gallery_genre Sort artworks by contents http://www.russianpaintings.org/gallery_content Museum area with masterpieces of old masters http://www.russianpaintings.org/museum_area Contact us page with all contact information: http://www.russianpaintings.org/gallery_contact =================================================================== With respect, Administration of the Russian Paintings gallery tggyuoiqxfg From owner-xfs@oss.sgi.com Sat Apr 19 07:34:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 19 Apr 2008 07:35:27 -0700 (PDT) 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 (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 m3JEYtmx012962 for ; Sat, 19 Apr 2008 07:34:59 -0700 X-ASG-Debug-ID: 1208615732-03db03490000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fg-out-1718.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5A3F9A5AF84 for ; Sat, 19 Apr 2008 07:35:32 -0700 (PDT) Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.155]) by cuda.sgi.com with ESMTP id ISL9bGY6VyCqvcoQ for ; Sat, 19 Apr 2008 07:35:32 -0700 (PDT) Received: by fg-out-1718.google.com with SMTP id e12so848468fga.8 for ; Sat, 19 Apr 2008 07:35:31 -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:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; bh=EUReRzD51/YF3K7nL7WOYIwzylMyohpEOjE5nd/rT9Q=; b=OtYA/igLbqUX8hGCzvp3VZSLnSPL6SNeWhedvn5khkj60AZHzKb2Hh4dz7mhdAi6YXy+aSmPTzbgLD88xbCYp1MEacXK7paBxAo3XRyjlbylLmPUn3xqWRZchrLSddQkAKYnVxvaRvDWeR7b8aop4qjcXhcbabFvrkDMleQ2Pt0= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=fgjh7LaQyDbyfAKVQnq8KUE3jQucIj96QXQDMVwSJeQy8mVTjnpg7bpm15fgsgqAEpJaT8WJXp4xSSXBz2j6uDKiJVPO0SxF8Oas40Ec+h0xDD+PFUbtlY+oZVlkJ+nri7L2ANavm24D5qZG3f1nDd7LajIFD1SA5lUO68L4w/Y= Received: by 10.86.97.7 with SMTP id u7mr8083827fgb.39.1208615731777; Sat, 19 Apr 2008 07:35:31 -0700 (PDT) Received: by 10.86.80.20 with HTTP; Sat, 19 Apr 2008 07:35:31 -0700 (PDT) Message-ID: <6101e8c40804190735g17f1e0bj25c2bc0e2a6eac26@mail.gmail.com> Date: Sat, 19 Apr 2008 16:35:31 +0200 From: "Oliver Pinter" To: "Ingo Molnar" X-ASG-Orig-Subj: Re: x86: 4kstacks default Subject: Re: x86: 4kstacks default Cc: "Andrew Morton" , "Linux Kernel Mailing List" , "Arjan van de Ven" , "Thomas Gleixner" , "Christoph Hellwig" , "David Chinner" , xfs@oss.sgi.com In-Reply-To: <20080419142329.GA5339@elte.hu> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <200804181737.m3IHbabI010051@hera.kernel.org> <20080418142934.38ce6bf4.akpm@linux-foundation.org> <20080419142329.GA5339@elte.hu> X-Barracuda-Connect: fg-out-1718.google.com[72.14.220.155] X-Barracuda-Start-Time: 1208615735 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.1, rules version 3.1.48227 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15467 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: oliver.pntr@gmail.com Precedence: bulk X-list: xfs Hi Ingo! with the older kernel is typical: xfs+nfs+4k stack(+lvm) On 4/19/08, Ingo Molnar wrote: > > * Andrew Morton wrote: > > > > config 4KSTACKS > > > bool "Use 4Kb for kernel stacks instead of 8Kb" > > > - depends on DEBUG_KERNEL > > > depends on X86_32 > > > + default y > > > > This patch will cause kernels to crash. > > what mainline kernels crash and how will they crash? Fedora and other > distros have had 4K stacks enabled for years: > > $ grep 4K /boot/config-2.6.24-9.fc9 > CONFIG_4KSTACKS=y > > and we've conducted tens of thousands of bootup tests with all sorts of > drivers and kernel options enabled and have yet to see a single crash > due to 4K stacks. So basically the kernel default just follows the > common distro default now. (distros and users can still disable it) > > Ingo > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > -- Thanks, Oliver From owner-xfs@oss.sgi.com Sat Apr 19 08:19:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 19 Apr 2008 08:19:48 -0700 (PDT) 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=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 m3JFJLPa020432 for ; Sat, 19 Apr 2008 08:19:26 -0700 X-ASG-Debug-ID: 1208618400-3ca901460000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp6.pp.htv.fi (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 448F31B857A8 for ; Sat, 19 Apr 2008 08:20:00 -0700 (PDT) Received: from smtp6.pp.htv.fi (smtp6.pp.htv.fi [213.243.153.40]) by cuda.sgi.com with ESMTP id bnRy0pVtD1lFAv9f for ; Sat, 19 Apr 2008 08:20:00 -0700 (PDT) Received: from cs181133002.pp.htv.fi (cs181133002.pp.htv.fi [82.181.133.2]) by smtp6.pp.htv.fi (Postfix) with ESMTP id 1444F5BC002; Sat, 19 Apr 2008 18:19:39 +0300 (EEST) Date: Sat, 19 Apr 2008 18:19:11 +0300 From: Adrian Bunk To: Oliver Pinter Cc: Ingo Molnar , Andrew Morton , Linux Kernel Mailing List , Arjan van de Ven , Thomas Gleixner , Christoph Hellwig , David Chinner , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: x86: 4kstacks default Subject: Re: x86: 4kstacks default Message-ID: <20080419151911.GB1595@cs181133002.pp.htv.fi> References: <200804181737.m3IHbabI010051@hera.kernel.org> <20080418142934.38ce6bf4.akpm@linux-foundation.org> <20080419142329.GA5339@elte.hu> <6101e8c40804190735g17f1e0bj25c2bc0e2a6eac26@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <6101e8c40804190735g17f1e0bj25c2bc0e2a6eac26@mail.gmail.com> User-Agent: Mutt/1.5.17+20080114 (2008-01-14) X-Barracuda-Connect: smtp6.pp.htv.fi[213.243.153.40] X-Barracuda-Start-Time: 1208618402 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.1, rules version 3.1.48230 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15468 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bunk@kernel.org Precedence: bulk X-list: xfs On Sat, Apr 19, 2008 at 04:35:31PM +0200, Oliver Pinter wrote: >... > with the older kernel is typical: xfs+nfs+4k stack(+lvm) Does anyone still experience problems with 2.6.25? We all know that there once were problems, but if there are any left they should be reported and fixed. > Thanks, > Oliver cu Adrian -- "Is there not promise of rain?" Ling Tan asked suddenly out of the darkness. There had been need of rain for many days. "Only a promise," Lao Er said. Pearl S. Buck - Dragon Seed From owner-xfs@oss.sgi.com Sat Apr 19 08:41:29 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 19 Apr 2008 08:41:50 -0700 (PDT) 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 m3JFfQwo022213 for ; Sat, 19 Apr 2008 08:41:29 -0700 X-ASG-Debug-ID: 1208619726-39ee03780000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fg-out-1718.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5EA8FA5B1EA for ; Sat, 19 Apr 2008 08:42:06 -0700 (PDT) Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.154]) by cuda.sgi.com with ESMTP id A8oIrZNG4E8ctQDV for ; Sat, 19 Apr 2008 08:42:06 -0700 (PDT) Received: by fg-out-1718.google.com with SMTP id e12so866128fga.8 for ; Sat, 19 Apr 2008 08:42:05 -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:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; bh=TSd6vb0WBBl/HXhZhTw99gHeOaxroSe+YnKlETk8hLA=; b=vvnb7OwWv2oIIUfEs37COTUprCl4PvIm8VWUIz8ZR+vV3S9p5p143yx+QY/f/pg8JnwfpnM4zsCiIFlcpW7ijGxUL1sEJ8CB/G899hG6Dw0vBv/HFLrpRSFDrdYfJ1FXU7GaEq9J9XLI3T7ETY6r+cqDo1WbET0rwfaGAgu4nFk= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=opj6GLeAU9CRifSZ5uxK7n2u/9GCZ2YvxATxwtHSYU+3FobwWSyM61pwEAYKvyeSBdkkN5OWoHJQX0QHQOBWYwAJYpl0pwZNe+2xJeGQMmGNj2E9a6aQy1Hh89R4AnvMirqZu5mgiW0GMNrzv4+MnuiK0VlY/wL1JpJ0Ezgbckw= Received: by 10.86.31.18 with SMTP id e18mr8152156fge.68.1208619725387; Sat, 19 Apr 2008 08:42:05 -0700 (PDT) Received: by 10.86.80.20 with HTTP; Sat, 19 Apr 2008 08:42:05 -0700 (PDT) Message-ID: <6101e8c40804190842n315bd61ft5ae0cffd456a8519@mail.gmail.com> Date: Sat, 19 Apr 2008 17:42:05 +0200 From: "Oliver Pinter" To: "Adrian Bunk" X-ASG-Orig-Subj: Re: x86: 4kstacks default Subject: Re: x86: 4kstacks default Cc: "Ingo Molnar" , "Andrew Morton" , "Linux Kernel Mailing List" , "Arjan van de Ven" , "Thomas Gleixner" , "Christoph Hellwig" , "David Chinner" , xfs@oss.sgi.com In-Reply-To: <20080419151911.GB1595@cs181133002.pp.htv.fi> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <200804181737.m3IHbabI010051@hera.kernel.org> <20080418142934.38ce6bf4.akpm@linux-foundation.org> <20080419142329.GA5339@elte.hu> <6101e8c40804190735g17f1e0bj25c2bc0e2a6eac26@mail.gmail.com> <20080419151911.GB1595@cs181133002.pp.htv.fi> X-Barracuda-Connect: fg-out-1718.google.com[72.14.220.154] X-Barracuda-Start-Time: 1208619727 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.1, rules version 3.1.48229 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15469 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: oliver.pntr@gmail.com Precedence: bulk X-list: xfs I dont know, thet this problem presentiert in 2.6.25, but im older kernels yes (2.6.22> or 2.6.23>). On 4/19/08, Adrian Bunk wrote: > On Sat, Apr 19, 2008 at 04:35:31PM +0200, Oliver Pinter wrote: > >... > > with the older kernel is typical: xfs+nfs+4k stack(+lvm) > > Does anyone still experience problems with 2.6.25? > > We all know that there once were problems, but if there are any left > they should be reported and fixed. > > > Thanks, > > Oliver > > cu > Adrian > > -- > > "Is there not promise of rain?" Ling Tan asked suddenly out > of the darkness. There had been need of rain for many days. > "Only a promise," Lao Er said. > Pearl S. Buck - Dragon Seed > > -- Thanks, Oliver From owner-xfs@oss.sgi.com Sat Apr 19 18:55:33 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 19 Apr 2008 18:55:57 -0700 (PDT) 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 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 m3K1tU9F032762 for ; Sat, 19 Apr 2008 18:55:33 -0700 X-ASG-Debug-ID: 1208656570-29ee03ca0000-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 71CD01595CBC for ; Sat, 19 Apr 2008 18:56:11 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id E6rp8xopVMdpI6vT for ; Sat, 19 Apr 2008 18:56:11 -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 BE24B18019ABA; Sat, 19 Apr 2008 20:56:09 -0500 (CDT) Message-ID: <480AA2B9.10305@sandeen.net> Date: Sat, 19 Apr 2008 20:56:09 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Adrian Bunk CC: Oliver Pinter , Ingo Molnar , Andrew Morton , Linux Kernel Mailing List , Arjan van de Ven , Thomas Gleixner , Christoph Hellwig , David Chinner , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: x86: 4kstacks default Subject: Re: x86: 4kstacks default References: <200804181737.m3IHbabI010051@hera.kernel.org> <20080418142934.38ce6bf4.akpm@linux-foundation.org> <20080419142329.GA5339@elte.hu> <6101e8c40804190735g17f1e0bj25c2bc0e2a6eac26@mail.gmail.com> <20080419151911.GB1595@cs181133002.pp.htv.fi> In-Reply-To: <20080419151911.GB1595@cs181133002.pp.htv.fi> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1208656571 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.1, rules version 3.1.48272 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15470 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Adrian Bunk wrote: > On Sat, Apr 19, 2008 at 04:35:31PM +0200, Oliver Pinter wrote: >> ... >> with the older kernel is typical: xfs+nfs+4k stack(+lvm) > > Does anyone still experience problems with 2.6.25? There are always problems. You can always come up with something that will crash in 4k, IMHO. Rather than foisting this upon everyone, I'd rather see work put into making stack size a boot parameter or something, so that people can choose what's appropriate for their workload (or their IO stack, if you prefer). -Eric > We all know that there once were problems, but if there are any left > they should be reported and fixed. > >> Thanks, >> Oliver > > cu > Adrian > From owner-xfs@oss.sgi.com Sat Apr 19 20:21:36 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 19 Apr 2008 20:21:53 -0700 (PDT) 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 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 m3K3LZYh009694 for ; Sat, 19 Apr 2008 20:21:36 -0700 X-ASG-Debug-ID: 1208661734-64d502020000-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 F0200107EF81 for ; Sat, 19 Apr 2008 20:22:15 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id vBccuK7J6YwNpHKF for ; Sat, 19 Apr 2008 20:22:15 -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 2C02A18019ABA; Sat, 19 Apr 2008 22:22:14 -0500 (CDT) Message-ID: <480AB6E5.7030003@sandeen.net> Date: Sat, 19 Apr 2008 22:22:13 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Nathan Scott CC: dgc@melbourne.sgi.com, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: review: add a splice command to xfs_io Subject: Re: review: add a splice command to xfs_io References: <20060901165450.T3186664@wobbly.melbourne.sgi.com> In-Reply-To: <20060901165450.T3186664@wobbly.melbourne.sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1208661736 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.1, rules version 3.1.48278 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15471 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Nathan Scott wrote: > Yo Dave, > > Here's some code which should help exercising the splice functionality > from a QA test. Needs a /usr/include/sys/splice.h (attached also, but > glibc will get this at some point I guess). No QA test yet though - I > will hack something up there on Monday (its beer o'clock). > > cheers. > > hm, any reason this never went in? It still applies, though "sys/splice.h" doesn't exist; you just need fcntl.h (see the splice(2) man page...) -Eric From owner-xfs@oss.sgi.com Sat Apr 19 21:14:05 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 19 Apr 2008 21:14:26 -0700 (PDT) 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.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 m3K4E2UY012829 for ; Sat, 19 Apr 2008 21:14:05 -0700 X-ASG-Debug-ID: 1208664882-222e031f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail114c25.carrierzone.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8982B12A17A7 for ; Sat, 19 Apr 2008 21:14:42 -0700 (PDT) Received: from mail114c25.carrierzone.com (mail114c25.carrierzone.com [64.29.147.184]) by cuda.sgi.com with ESMTP id Sts0Zm7Uyg7NjURe for ; Sat, 19 Apr 2008 21:14:42 -0700 (PDT) X-Authenticated-User: support.geoglobal.com Received: from ggrmilesl.geoglobal.ca ([68.145.110.189]) (authenticated bits=0) by mail114c25.carrierzone.com (8.13.6.20060614/8.13.1) with ESMTP id m3K4Ed6T008672; Sun, 20 Apr 2008 04:14:40 GMT From: support@geoglobal.com To: xfs@oss.sgi.com, vincent.roy@geoglobal.com X-ASG-Orig-Subj: xfs_repair -n report Subject: xfs_repair -n report Date: Sat, 19 Apr 2008 23:22:26 -0600 User-Agent: KMail/1.9.1 MIME-Version: 1.0 Message-Id: <200804192322.26555.support@geoglobal.com> Content-Type: Multipart/Mixed; boundary="Boundary-00=_SMtCICdJHLPHwYF" X-Barracuda-Connect: mail114c25.carrierzone.com[64.29.147.184] X-Barracuda-Start-Time: 1208664883 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.47 X-Barracuda-Spam-Status: No, SCORE=-1.47 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48281 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.55 NO_REAL_NAME From: does not include a real name X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15472 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: support@geoglobal.com Precedence: bulk X-list: xfs --Boundary-00=_SMtCICdJHLPHwYF Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline RAID 5 - 4 disks on 9550 AMCC production machine / backup disk failed also verified without error - rebuilt after abrupt power shut down cannot mount - inconsistencies indicated - could not dump fs Here is testfile based xfs_repair -n Please help in anyway. All comments welcome.... Regards, Vincent --Boundary-00=_SMtCICdJHLPHwYF Content-Type: application/x-zerosize; name="testfile" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="testfile" --Boundary-00=_SMtCICdJHLPHwYF-- From owner-xfs@oss.sgi.com Sat Apr 19 21:25:50 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 19 Apr 2008 21:26:07 -0700 (PDT) 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 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 m3K4PmSc014102 for ; Sat, 19 Apr 2008 21:25:50 -0700 X-ASG-Debug-ID: 1208665589-6758007a0000-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 CCECC12A18B7 for ; Sat, 19 Apr 2008 21:26:29 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id law550gQcYHrahcC for ; Sat, 19 Apr 2008 21:26:29 -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 AD61D18003F13; Sat, 19 Apr 2008 23:26:27 -0500 (CDT) Message-ID: <480AC5F3.6060303@sandeen.net> Date: Sat, 19 Apr 2008 23:26:27 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: support@geoglobal.com CC: xfs@oss.sgi.com, vincent.roy@geoglobal.com X-ASG-Orig-Subj: Re: xfs_repair -n report Subject: Re: xfs_repair -n report References: <200804192322.26555.support@geoglobal.com> In-Reply-To: <200804192322.26555.support@geoglobal.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1208665589 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.1, rules version 3.1.48281 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15473 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs support@geoglobal.com wrote: > RAID 5 - 4 disks on 9550 AMCC production machine / backup disk failed also > verified without error - rebuilt after abrupt power shut down > cannot mount - inconsistencies indicated - could not dump fs > > Here is testfile based xfs_repair -n > > Please help in anyway. All comments welcome.... > > Regards, > Vincent The attachment appears to be 0 length. -Eric From owner-xfs@oss.sgi.com Sat Apr 19 21:37:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 19 Apr 2008 21:38:03 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_210, SUBJECT_FUZZY_TION autolearn=no 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 m3K4bivj015154 for ; Sat, 19 Apr 2008 21:37:46 -0700 X-ASG-Debug-ID: 1208666305-3d2301250000-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 03B021596001 for ; Sat, 19 Apr 2008 21:38:25 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id Qk51FAG3F9pB3Acd for ; Sat, 19 Apr 2008 21:38:25 -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 7005118003F13; Sat, 19 Apr 2008 23:38:25 -0500 (CDT) Message-ID: <480AC8C1.1050102@sandeen.net> Date: Sat, 19 Apr 2008 23:38:25 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: James Klaas CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Is my partition repairable? Subject: Re: Is my partition repairable? References: <18b102300804090813u24423515k4c478635494534dc@mail.gmail.com> In-Reply-To: <18b102300804090813u24423515k4c478635494534dc@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1208666306 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.1, rules version 3.1.48282 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15474 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs James Klaas wrote: > I've been struggling to recover/repair an XFS partition that is on a > Linux software raid. This is on Ubuntu Feisty (7.04) with xfsprogs > v2.8.18. > > When I try to mount the system, it attempts a recovery: > > [127094.470809] Filesystem "md0": Disabling barriers, not supported by > the underlying device > [127094.471954] XFS mounting filesystem md0 > [127094.613551] Starting XFS recovery on filesystem: md0 (logdev: internal) > [127094.858897] Filesystem "md0": XFS internal error > xfs_btree_check_sblock at line 334 of file fs/xfs/xfs_btree.c. Caller > 0xf8eda9fb The simplest approach, though perhaps not the least prone to data loss, is to run xfs_repair with the -L option to zero out the log before proceeding. You could also mount -o ro,norecovery first to back up as much critical data as possible, beforehand. -Eric From owner-xfs@oss.sgi.com Sun Apr 20 00:42:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 00:42:35 -0700 (PDT) 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=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 m3K7gAoJ032575 for ; Sun, 20 Apr 2008 00:42:13 -0700 X-ASG-Debug-ID: 1208677371-6e50015b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp5.pp.htv.fi (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D7B5D1596D23 for ; Sun, 20 Apr 2008 00:42:51 -0700 (PDT) Received: from smtp5.pp.htv.fi (smtp5.pp.htv.fi [213.243.153.39]) by cuda.sgi.com with ESMTP id tdB9Dm9v1g59D6fX for ; Sun, 20 Apr 2008 00:42:51 -0700 (PDT) Received: from cs181133002.pp.htv.fi (cs181133002.pp.htv.fi [82.181.133.2]) by smtp5.pp.htv.fi (Postfix) with ESMTP id 5C2E75BC00C; Sun, 20 Apr 2008 10:42:50 +0300 (EEST) Date: Sun, 20 Apr 2008 10:42:28 +0300 From: Adrian Bunk To: Eric Sandeen Cc: Oliver Pinter , Ingo Molnar , Andrew Morton , Linux Kernel Mailing List , Arjan van de Ven , Thomas Gleixner , Christoph Hellwig , David Chinner , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: x86: 4kstacks default Subject: Re: x86: 4kstacks default Message-ID: <20080420074228.GE1595@cs181133002.pp.htv.fi> References: <200804181737.m3IHbabI010051@hera.kernel.org> <20080418142934.38ce6bf4.akpm@linux-foundation.org> <20080419142329.GA5339@elte.hu> <6101e8c40804190735g17f1e0bj25c2bc0e2a6eac26@mail.gmail.com> <20080419151911.GB1595@cs181133002.pp.htv.fi> <480AA2B9.10305@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <480AA2B9.10305@sandeen.net> User-Agent: Mutt/1.5.17+20080114 (2008-01-14) X-Barracuda-Connect: smtp5.pp.htv.fi[213.243.153.39] X-Barracuda-Start-Time: 1208677371 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.1, rules version 3.1.48294 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15475 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bunk@kernel.org Precedence: bulk X-list: xfs On Sat, Apr 19, 2008 at 08:56:09PM -0500, Eric Sandeen wrote: > Adrian Bunk wrote: > > On Sat, Apr 19, 2008 at 04:35:31PM +0200, Oliver Pinter wrote: > >> ... > >> with the older kernel is typical: xfs+nfs+4k stack(+lvm) > > > > Does anyone still experience problems with 2.6.25? > > There are always problems. You can always come up with something that > will crash in 4k, IMHO. We are going from 6k to 4k. Your "You can always come up with something that will crash in" point would be invariant to this change (although it might be harder to trigger in real life). > Rather than foisting this upon everyone, I'd rather see work put into > making stack size a boot parameter or something, so that people can > choose what's appropriate for their workload (or their IO stack, if you > prefer). Why should users have to poke with such deeply internal things? That doesn't sound right. Excessive stack usage in the kernel is considered to be a bug. We should identify and fix all remaining problems (if any). > -Eric cu Adrian -- "Is there not promise of rain?" Ling Tan asked suddenly out of the darkness. There had been need of rain for many days. "Only a promise," Lao Er said. Pearl S. Buck - Dragon Seed From owner-xfs@oss.sgi.com Sun Apr 20 03:13:24 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 03:13:43 -0700 (PDT) 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.9 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 m3KADK5T010084 for ; Sun, 20 Apr 2008 03:13:24 -0700 X-ASG-Debug-ID: 1208686439-3a5a03150000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from main.carme.maven.pl (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7B024B6079 for ; Sun, 20 Apr 2008 03:13:59 -0700 (PDT) Received: from main.carme.maven.pl (main.carme.maven.pl [193.239.45.138]) by cuda.sgi.com with ESMTP id G02atcUWNBliwEWf for ; Sun, 20 Apr 2008 03:13:59 -0700 (PDT) Received: from chello089076023161.chello.pl ([89.76.23.161]:3054 helo=[192.168.0.124]) by main.carme.maven.pl with esmtpa (Exim 4.69) (envelope-from ) id 1JnWXu-0005OQ-TS for xfs@oss.sgi.com; Sun, 20 Apr 2008 12:13:18 +0200 From: Arkadiusz Miskiewicz Organization: SelfOrganizing To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] xfs_quota tool exit status + bugzilla problem Subject: [PATCH] xfs_quota tool exit status + bugzilla problem Date: Sun, 20 Apr 2008 12:13:52 +0200 User-Agent: PLD Linux KMail/1.9.9 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-2" Content-Disposition: inline Message-Id: <200804201213.52772.arekm@maven.pl> X-Barracuda-Connect: main.carme.maven.pl[193.239.45.138] X-Barracuda-Start-Time: 1208686441 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.1, rules version 3.1.48304 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m3KADO5T010087 X-archive-position: 15476 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: arekm@maven.pl Precedence: bulk X-list: xfs Hello, Could anyone review and commit http://oss.sgi.com/bugzilla/show_bug.cgi?id=781 ? The second thing is - please change bugzilla configuration to allow email address changes. Right now it's not possible to change email to new one (and in my case old email used no longer works). Thanks, -- Arkadiusz Mi¶kiewicz PLD/Linux Team arekm / maven.pl http://ftp.pld-linux.org/ From owner-xfs@oss.sgi.com Sun Apr 20 04:48:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 04:48:30 -0700 (PDT) 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 m3KBm4Xk021177 for ; Sun, 20 Apr 2008 04:48:08 -0700 X-ASG-Debug-ID: 1208692124-2e1400e60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp-out03.alice-dsl.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BA2BF786D73 for ; Sun, 20 Apr 2008 04:48:45 -0700 (PDT) Received: from smtp-out03.alice-dsl.net (smtp-out03.alice-dsl.net [88.44.63.5]) by cuda.sgi.com with ESMTP id RNWkPQXNVqEl8nWQ for ; Sun, 20 Apr 2008 04:48:45 -0700 (PDT) Received: from out.alice-dsl.de ([192.168.125.62]) by smtp-out03.alice-dsl.net with Microsoft SMTPSVC(6.0.3790.1830); Sun, 20 Apr 2008 13:41:53 +0200 Received: from basil.firstfloor.org ([78.53.156.173]) by out.alice-dsl.de with Microsoft SMTPSVC(6.0.3790.1830); Sun, 20 Apr 2008 13:41:52 +0200 Received: by basil.firstfloor.org (Postfix, from userid 1000) id B48AF1B41F5; Sun, 20 Apr 2008 13:48:40 +0200 (CEST) To: Eric Sandeen Cc: Adrian Bunk , Oliver Pinter , Ingo Molnar , Andrew Morton , Linux Kernel Mailing List , Arjan van de Ven , Thomas Gleixner , Christoph Hellwig , David Chinner , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: x86: 4kstacks default Subject: Re: x86: 4kstacks default From: Andi Kleen References: <200804181737.m3IHbabI010051@hera.kernel.org> <20080418142934.38ce6bf4.akpm@linux-foundation.org> <20080419142329.GA5339@elte.hu> <6101e8c40804190735g17f1e0bj25c2bc0e2a6eac26@mail.gmail.com> <20080419151911.GB1595@cs181133002.pp.htv.fi> <480AA2B9.10305__23983.3358479247$1208657639$gmane$org@sandeen.net> Date: Sun, 20 Apr 2008 13:48:40 +0200 In-Reply-To: <480AA2B9.10305__23983.3358479247$1208657639$gmane$org@sandeen.net> (Eric Sandeen's message of "Sat, 19 Apr 2008 20:56:09 -0500") Message-ID: <87abjobvc7.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-OriginalArrivalTime: 20 Apr 2008 11:41:52.0779 (UTC) FILETIME=[87135DB0:01C8A2DB] X-Barracuda-Connect: smtp-out03.alice-dsl.net[88.44.63.5] X-Barracuda-Start-Time: 1208692125 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.1, rules version 3.1.48312 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15477 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: andi@firstfloor.org Precedence: bulk X-list: xfs Eric Sandeen writes: > Adrian Bunk wrote: >> On Sat, Apr 19, 2008 at 04:35:31PM +0200, Oliver Pinter wrote: >>> ... >>> with the older kernel is typical: xfs+nfs+4k stack(+lvm) >> >> Does anyone still experience problems with 2.6.25? > > There are always problems. You can always come up with something that > will crash in 4k, IMHO. But what are a few crashes compared against the ability to run 50000 kernel threads on a 32bit machine? Something has to give in the aim for useless checkbox numbers after all. -Andi From owner-xfs@oss.sgi.com Sun Apr 20 10:09:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 10:09:32 -0700 (PDT) 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=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 m3KH90qd009300 for ; Sun, 20 Apr 2008 10:09:04 -0700 X-ASG-Debug-ID: 1208711378-4ed501d80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from QMTA04.westchester.pa.mail.comcast.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5EF1AB749A for ; Sun, 20 Apr 2008 10:09:38 -0700 (PDT) Received: from QMTA04.westchester.pa.mail.comcast.net (qmta04.westchester.pa.mail.comcast.net [76.96.62.40]) by cuda.sgi.com with ESMTP id u1Rzx8CbX7arZdSF for ; Sun, 20 Apr 2008 10:09:38 -0700 (PDT) Received: from OMTA04.westchester.pa.mail.comcast.net ([76.96.62.35]) by QMTA04.westchester.pa.mail.comcast.net with comcast id Fn431Z0070ldTLk540ei00; Sun, 20 Apr 2008 17:07:43 +0000 Received: from stupidest.org ([67.169.95.103]) by OMTA04.westchester.pa.mail.comcast.net with comcast id Ft9a1Z0052DpGEz3Q00000; Sun, 20 Apr 2008 17:09:38 +0000 X-Authority-Analysis: v=1.0 c=1 a=Q8Gs9bZg81cupfBjvhMA:9 a=0Hgyp1d33VZ9vveNF3AA:7 a=uVxzsZc6kX8zZpzCKzFreaTV0zUA:4 a=LY0hPdMaydYA:10 Received: by tuatara.stupidest.org (Postfix, from userid 10000) id C77D72849F79; Sun, 20 Apr 2008 09:59:39 -0700 (PDT) Date: Sun, 20 Apr 2008 09:59:39 -0700 From: Chris Wedgwood To: Adrian Bunk Cc: Eric Sandeen , Oliver Pinter , Ingo Molnar , Andrew Morton , Linux Kernel Mailing List , Arjan van de Ven , Thomas Gleixner , Christoph Hellwig , David Chinner , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: x86: 4kstacks default Subject: Re: x86: 4kstacks default Message-ID: <20080420165939.GB7963@puku.stupidest.org> References: <200804181737.m3IHbabI010051@hera.kernel.org> <20080418142934.38ce6bf4.akpm@linux-foundation.org> <20080419142329.GA5339@elte.hu> <6101e8c40804190735g17f1e0bj25c2bc0e2a6eac26@mail.gmail.com> <20080419151911.GB1595@cs181133002.pp.htv.fi> <480AA2B9.10305@sandeen.net> <20080420074228.GE1595@cs181133002.pp.htv.fi> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080420074228.GE1595@cs181133002.pp.htv.fi> X-Barracuda-Connect: qmta04.westchester.pa.mail.comcast.net[76.96.62.40] X-Barracuda-Start-Time: 1208711381 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.1, rules version 3.1.48332 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15478 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: cw@f00f.org Precedence: bulk X-list: xfs On Sun, Apr 20, 2008 at 10:42:28AM +0300, Adrian Bunk wrote: > We are going from 6k to 4k. 6k? > Why should users have to poke with such deeply internal things? > That doesn't sound right. they shouldn't, so a 4k default is a problem for them > Excessive stack usage in the kernel is considered to be a bug. define excessive > We should identify and fix all remaining problems (if any). let's see your patches then From owner-xfs@oss.sgi.com Sun Apr 20 12:04:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 12:04:56 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,WEIRD_PORT autolearn=no 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 m3KJ4a4i016747 for ; Sun, 20 Apr 2008 12:04:38 -0700 X-ASG-Debug-ID: 1208718316-27ba03c70000-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 516511598515; Sun, 20 Apr 2008 12:05:16 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id rqBVIcmn8SkRp9Pe; Sun, 20 Apr 2008 12:05:16 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jneqh-0006fU-I6; Sun, 20 Apr 2008 19:05:15 +0000 Date: Sun, 20 Apr 2008 15:05:15 -0400 From: Christoph Hellwig To: Lachlan McIlroy Cc: xfs@oss.sgi.com, akpm@linux-foundation.org X-ASG-Orig-Subj: Re: [GIT PULL] XFS update for 2.6.26-rc1 Subject: Re: [GIT PULL] XFS update for 2.6.26-rc1 Message-ID: <20080420190515.GA19219@infradead.org> References: <20080418050547.0E70F58C4C15@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080418050547.0E70F58C4C15@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1208718317 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.1, rules version 3.1.48340 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15479 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Fri, Apr 18, 2008 at 03:05:46PM +1000, Lachlan McIlroy wrote: > Please pull from the for-linus branch: > git pull git://oss.sgi.com:8090/xfs/xfs-2.6.git for-linus > > This will update the following files: Seems like you forgot the three mainline-only patches I sent a while ago. From owner-xfs@oss.sgi.com Sun Apr 20 16:37:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 16:37:20 -0700 (PDT) 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.7 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 m3KNaxw1009065 for ; Sun, 20 Apr 2008 16:37:02 -0700 X-ASG-Debug-ID: 1208734659-7285035a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from postoffice2.aconex.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BCF69A6699E for ; Sun, 20 Apr 2008 16:37:39 -0700 (PDT) Received: from postoffice2.aconex.com (prod.aconex.com [203.89.192.138]) by cuda.sgi.com with ESMTP id XgyhUGCFxTZWPg78 for ; Sun, 20 Apr 2008 16:37:39 -0700 (PDT) Received: from postoffice.aconex.com (localhost [127.0.0.1]) by postoffice2.aconex.com (Spam Firewall) with ESMTP id 12DE657CCF5; Mon, 21 Apr 2008 09:37:35 +1000 (EST) Received: from postoffice.aconex.com (postoffice.yarra.acx [192.168.3.1]) by postoffice2.aconex.com with ESMTP id hCadRsJ6Gi6YCewt; Mon, 21 Apr 2008 09:37:35 +1000 (EST) Received: from [192.168.5.76] (unknown [203.89.192.141]) by postoffice.aconex.com (Postfix) with ESMTP id 04D0C92C0E3; Mon, 21 Apr 2008 09:37:37 +1000 (EST) X-ASG-Orig-Subj: Re: review: add a splice command to xfs_io Subject: Re: review: add a splice command to xfs_io From: Nathan Scott Reply-To: nscott@aconex.com To: Eric Sandeen Cc: dgc@melbourne.sgi.com, xfs@oss.sgi.com In-Reply-To: <480AB6E5.7030003@sandeen.net> References: <20060901165450.T3186664@wobbly.melbourne.sgi.com> <480AB6E5.7030003@sandeen.net> Content-Type: text/plain Organization: Aconex Date: Mon, 21 Apr 2008 09:37:35 +1000 Message-Id: <1208734656.23166.20.camel@edge.scott.net.au> Mime-Version: 1.0 X-Mailer: Evolution 2.22.1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: prod.aconex.com[203.89.192.138] X-Barracuda-Start-Time: 1208734660 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.1, rules version 3.1.48359 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15480 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: nscott@aconex.com Precedence: bulk X-list: xfs On Sat, 2008-04-19 at 22:22 -0500, Eric Sandeen wrote: > hm, any reason this never went in? Just got forgotten, I'd guess. cheers. -- Nathan From owner-xfs@oss.sgi.com Sun Apr 20 17:33:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 17:33:54 -0700 (PDT) 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.0 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 m3L0XLh1012893 for ; Sun, 20 Apr 2008 17:33:23 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA05021; Mon, 21 Apr 2008 10:33:53 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3L0XosT139558126; Mon, 21 Apr 2008 10:33:51 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3L0XhrU140441378; Mon, 21 Apr 2008 10:33:43 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 21 Apr 2008 10:33:43 +1000 From: David Chinner To: Eric Sandeen Cc: Timothy Shimmin , Andi Kleen , David Chinner , Niv Sardi , Christoph Hellwig , xfs@oss.sgi.com Subject: Re: likely and unlikely was: Re: [PATCH] split xfs_ioc_xattr Message-ID: <20080421003343.GL108924158@sgi.com> References: <20080319204014.GA23644@lst.de> <20080414032940.GA10579@lst.de> <20080416063712.GN108924158@sgi.com> <4805A589.7080906@sgi.com> <87ve2i5kbs.fsf@basil.nowhere.org> <4808488A.7010204@sgi.com> <4808AAA5.1060201@sandeen.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4808AAA5.1060201@sandeen.net> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15481 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Fri, Apr 18, 2008 at 09:05:25AM -0500, Eric Sandeen wrote: > ISTR that the dir2 code on Irix had tons of compiler pragmas for likely > and unlikely paths, and that it actually was well-profiled and tested. > Did that ever get translated into Linux hints? The Irix code (#pragma mips_frequency_hint [FREQUENT|NEVER|INIT]) only controllered physical placement of code, it never issued branch hints. i.e. a "never" block gets moved out of line, while a "frequent" block is left inline. Realistically, the way this is used in the Irix dir2 code is completely useless - code like this: if (namelen >= MAXNAMELEN) { #pragma mips_frequency_hint NEVER return XFS_ERROR(EINVAL); } if (rval = xfs_dir_ino_validate(tp->t_mountp, inum)) { #pragma mips_frequency_hint NEVER return rval; } Never needed those hints in the first place, it's damn messy, and the places where it might actually be useful it doesn't get used. I'd prefer to avoid the hints unless we really have a performance critical path that we want to have as much straight line code as possible. That will require profiling to get right.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Sun Apr 20 19:39:33 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 19:39:50 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,WEIRD_PORT 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 m3L2dUJ5019789 for ; Sun, 20 Apr 2008 19:39:32 -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 MAA06936; Mon, 21 Apr 2008 12:40:02 +1000 Message-ID: <480BFE97.9090008@sgi.com> Date: Mon, 21 Apr 2008 12:40:23 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com, akpm@linux-foundation.org Subject: Re: [GIT PULL] XFS update for 2.6.26-rc1 References: <20080418050547.0E70F58C4C15@chook.melbourne.sgi.com> <20080420190515.GA19219@infradead.org> In-Reply-To: <20080420190515.GA19219@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15482 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs What were they? Christoph Hellwig wrote: > On Fri, Apr 18, 2008 at 03:05:46PM +1000, Lachlan McIlroy wrote: >> Please pull from the for-linus branch: >> git pull git://oss.sgi.com:8090/xfs/xfs-2.6.git for-linus >> >> This will update the following files: > > Seems like you forgot the three mainline-only patches I sent a while > ago. > > > From owner-xfs@oss.sgi.com Sun Apr 20 19:59:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 19:59:19 -0700 (PDT) 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.6 required=5.0 tests=AWL,BAYES_00,WEIRD_PORT 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 m3L2x126020958 for ; Sun, 20 Apr 2008 19:59:02 -0700 X-ASG-Debug-ID: 1208746781-54d101530000-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 3C331A68137 for ; Sun, 20 Apr 2008 19:59:42 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id EDDT21HDWbTCcxq3 for ; Sun, 20 Apr 2008 19:59:42 -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 7D20218003F13; Sun, 20 Apr 2008 21:59:40 -0500 (CDT) Message-ID: <480C031B.6010802@sandeen.net> Date: Sun, 20 Apr 2008 21:59:39 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: lachlan@sgi.com CC: Christoph Hellwig , xfs@oss.sgi.com, akpm@linux-foundation.org X-ASG-Orig-Subj: Re: [GIT PULL] XFS update for 2.6.26-rc1 Subject: Re: [GIT PULL] XFS update for 2.6.26-rc1 References: <20080418050547.0E70F58C4C15@chook.melbourne.sgi.com> <20080420190515.GA19219@infradead.org> <480BFE97.9090008@sgi.com> In-Reply-To: <480BFE97.9090008@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1208746783 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.1, rules version 3.1.48371 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15483 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Lachlan McIlroy wrote: > What were they? [PATCH, mainline-only] remove sendfile leftovers [PATCH, mainline-only] remove dmapi cruft in xfs_file.c [PATCH, mainline-only] allow enabling CONFIG_XFS_DEBUG -Eric > Christoph Hellwig wrote: >> On Fri, Apr 18, 2008 at 03:05:46PM +1000, Lachlan McIlroy wrote: >>> Please pull from the for-linus branch: >>> git pull git://oss.sgi.com:8090/xfs/xfs-2.6.git for-linus >>> >>> This will update the following files: >> Seems like you forgot the three mainline-only patches I sent a while >> ago. From owner-xfs@oss.sgi.com Sun Apr 20 21:45:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 21:45:33 -0700 (PDT) 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 m3L4j9bL031967 for ; Sun, 20 Apr 2008 21:45:11 -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 OAA08837; Mon, 21 Apr 2008 14:45:45 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id 912E658C4C15; Mon, 21 Apr 2008 14:45:45 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - Remove VN_IS* macros and related cruft. Message-Id: <20080421044545.912E658C4C15@chook.melbourne.sgi.com> Date: Mon, 21 Apr 2008 14:45:45 +1000 (EST) From: lachlan@sgi.com (Lachlan McIlroy) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15484 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Remove VN_IS* macros and related cruft. We can just check i_mode / di_mode directly. Signed-off-by: Christoph Hellwig Date: Mon Apr 21 14:44:57 AEST 2008 Workarea: redback.melbourne.sgi.com:/home/lachlan/isms/2.6.x-hch 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:30896a fs/xfs/xfs_vnodeops.c - 1.750 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.c.diff?r1=text&tr1=1.750&r2=text&tr2=1.749&f=h fs/xfs/xfs_acl.c - 1.71 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_acl.c.diff?r1=text&tr1=1.71&r2=text&tr2=1.70&f=h fs/xfs/linux-2.6/xfs_vnode.h - 1.149 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_vnode.h.diff?r1=text&tr1=1.149&r2=text&tr2=1.148&f=h - Remove VN_IS* macros and related cruft. From owner-xfs@oss.sgi.com Sun Apr 20 21:51:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 21:51:16 -0700 (PDT) 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 m3L4p2jZ032413 for ; Sun, 20 Apr 2008 21:51:07 -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 OAA08915; Mon, 21 Apr 2008 14:51:40 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id F161358C4C15; Mon, 21 Apr 2008 14:51:39 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - kill xfs_getattr Message-Id: <20080421045139.F161358C4C15@chook.melbourne.sgi.com> Date: Mon, 21 Apr 2008 14:51:39 +1000 (EST) From: lachlan@sgi.com (Lachlan McIlroy) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15485 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs kill xfs_getattr It's currently used by the ACL code to read di_mode/di_uid, but these are simple 32bit scalar values we can just read directly without locking. Signed-off-by: Christoph Hellwig Date: Mon Apr 21 14:50:32 AEST 2008 Workarea: redback.melbourne.sgi.com:/home/lachlan/isms/2.6.x-hch 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:30897a fs/xfs/xfs_vnodeops.c - 1.751 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.c.diff?r1=text&tr1=1.751&r2=text&tr2=1.750&f=h fs/xfs/xfs_acl.c - 1.72 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_acl.c.diff?r1=text&tr1=1.72&r2=text&tr2=1.71&f=h fs/xfs/xfs_vnodeops.h - 1.13 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.h.diff?r1=text&tr1=1.13&r2=text&tr2=1.12&f=h - kill xfs_getattr From owner-xfs@oss.sgi.com Sun Apr 20 21:57:54 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 21:58:10 -0700 (PDT) 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 m3L4vnou000643 for ; Sun, 20 Apr 2008 21:57:52 -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 OAA08977; Mon, 21 Apr 2008 14:58:23 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id 9E26558C4C15; Mon, 21 Apr 2008 14:58:23 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - kill di_mode checks after xfs_iget Message-Id: <20080421045823.9E26558C4C15@chook.melbourne.sgi.com> Date: Mon, 21 Apr 2008 14:58:23 +1000 (EST) From: lachlan@sgi.com (Lachlan McIlroy) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15486 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs kill di_mode checks after xfs_iget Unless XFS_IGET_CREATE is passed xfs_iget will return ENOENT if it encounters an inode with di_mode == 0. Remove the duplicated checks in the callers. (the log recovery case is not touched for now) Signed-off-by: Christoph Hellwig Date: Mon Apr 21 14:57:50 AEST 2008 Workarea: redback.melbourne.sgi.com:/home/lachlan/isms/2.6.x-hch 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:30898a fs/xfs/xfs_itable.c - 1.164 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_itable.c.diff?r1=text&tr1=1.164&r2=text&tr2=1.163&f=h fs/xfs/quota/xfs_qm_syscalls.c - 1.42 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_qm_syscalls.c.diff?r1=text&tr1=1.42&r2=text&tr2=1.41&f=h fs/xfs/quota/xfs_qm.c - 1.67 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_qm.c.diff?r1=text&tr1=1.67&r2=text&tr2=1.66&f=h fs/xfs/linux-2.6/xfs_ioctl.c - 1.164 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_ioctl.c.diff?r1=text&tr1=1.164&r2=text&tr2=1.163&f=h fs/xfs/linux-2.6/xfs_export.c - 1.23 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_export.c.diff?r1=text&tr1=1.23&r2=text&tr2=1.22&f=h fs/xfs/dmapi/xfs_dm.c - 1.69 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/dmapi/xfs_dm.c.diff?r1=text&tr1=1.69&r2=text&tr2=1.68&f=h - kill di_mode checks after xfs_iget From owner-xfs@oss.sgi.com Sun Apr 20 22:05:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 22:05:37 -0700 (PDT) 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 m3L55Rv9001260 for ; Sun, 20 Apr 2008 22:05:29 -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 PAA09214; Mon, 21 Apr 2008 15:06:05 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id 0C02258C4C15; Mon, 21 Apr 2008 15:06:04 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - xfs_rename: pass resblks to xfs_dir_removename Message-Id: <20080421050605.0C02258C4C15@chook.melbourne.sgi.com> Date: Mon, 21 Apr 2008 15:06:04 +1000 (EST) From: lachlan@sgi.com (Lachlan McIlroy) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15487 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs xfs_rename: pass resblks to xfs_dir_removename Similar to rmdir and remove - avoids a potential transaction reservation overrun. Signed-off-by: Christoph Hellwig Date: Mon Apr 21 15:05:29 AEST 2008 Workarea: redback.melbourne.sgi.com:/home/lachlan/isms/2.6.x-hch 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:30900a fs/xfs/xfs_vnodeops.c - 1.752 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.c.diff?r1=text&tr1=1.752&r2=text&tr2=1.751&f=h - xfs_rename: pass resblks to xfs_dir_removename From owner-xfs@oss.sgi.com Sun Apr 20 22:11:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 22:12:16 -0700 (PDT) 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 m3L5BsRA001843 for ; Sun, 20 Apr 2008 22:11:56 -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 PAA09280; Mon, 21 Apr 2008 15:12:31 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id E063058C4C15; Mon, 21 Apr 2008 15:12:31 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - simplify xfs_lookup Message-Id: <20080421051231.E063058C4C15@chook.melbourne.sgi.com> Date: Mon, 21 Apr 2008 15:12:31 +1000 (EST) From: lachlan@sgi.com (Lachlan McIlroy) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15488 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs simplify xfs_lookup Opencode xfs-kill-xfs_dir_lookup_int here, which gets rid of a lock roundtrip, and lots of stack space. Also kill the di_mode == 0 check that has been done in xfs_iget for a few years now. Signed-off-by: Christoph Hellwig Date: Mon Apr 21 15:11:57 AEST 2008 Workarea: redback.melbourne.sgi.com:/home/lachlan/isms/2.6.x-hch 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:30901a fs/xfs/xfs_vnodeops.c - 1.753 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.c.diff?r1=text&tr1=1.753&r2=text&tr2=1.752&f=h - simplify xfs_lookup From owner-xfs@oss.sgi.com Sun Apr 20 22:15:54 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 22:16:02 -0700 (PDT) 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 m3L5FnQJ002475 for ; Sun, 20 Apr 2008 22:15: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 PAA09326; Mon, 21 Apr 2008 15:16:27 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id 40AEB58C4C15; Mon, 21 Apr 2008 15:16:27 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - shrink mrlock_t Message-Id: <20080421051627.40AEB58C4C15@chook.melbourne.sgi.com> Date: Mon, 21 Apr 2008 15:16:27 +1000 (EST) From: lachlan@sgi.com (Lachlan McIlroy) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15489 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs shrink mrlock_t The writer field is not needed for non_DEBU builds so remove it. While we're at i also clean up the interface for is locked asserts to go through and xfs_iget.c helper with an interface like the xfs_ilock routines to isolated the XFS codebase from mrlock internals. That way we can kill mrlock_t entirely once rw_semaphores grow an islocked facility. Also remove unused flags to the ilock family of functions. Signed-off-by: Christoph Hellwig Date: Mon Apr 21 15:15:57 AEST 2008 Workarea: redback.melbourne.sgi.com:/home/lachlan/isms/2.6.x-hch 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:30902a fs/xfs/xfs_trans_inode.c - 1.54 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_trans_inode.c.diff?r1=text&tr1=1.54&r2=text&tr2=1.53&f=h fs/xfs/xfs_vnodeops.c - 1.754 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.c.diff?r1=text&tr1=1.754&r2=text&tr2=1.753&f=h fs/xfs/xfs_inode_item.c - 1.135 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_inode_item.c.diff?r1=text&tr1=1.135&r2=text&tr2=1.134&f=h fs/xfs/xfs_iget.c - 1.241 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_iget.c.diff?r1=text&tr1=1.241&r2=text&tr2=1.240&f=h fs/xfs/xfs_inode.c - 1.500 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_inode.c.diff?r1=text&tr1=1.500&r2=text&tr2=1.499&f=h fs/xfs/xfs_inode.h - 1.244 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_inode.h.diff?r1=text&tr1=1.244&r2=text&tr2=1.243&f=h fs/xfs/xfs_utils.c - 1.83 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_utils.c.diff?r1=text&tr1=1.83&r2=text&tr2=1.82&f=h fs/xfs/xfs_bmap.c - 1.391 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_bmap.c.diff?r1=text&tr1=1.391&r2=text&tr2=1.390&f=h fs/xfs/quota/xfs_trans_dquot.c - 1.20 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_trans_dquot.c.diff?r1=text&tr1=1.20&r2=text&tr2=1.19&f=h fs/xfs/quota/xfs_quota_priv.h - 1.11 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_quota_priv.h.diff?r1=text&tr1=1.11&r2=text&tr2=1.10&f=h fs/xfs/quota/xfs_dquot.c - 1.33 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_dquot.c.diff?r1=text&tr1=1.33&r2=text&tr2=1.32&f=h fs/xfs/quota/xfs_qm.c - 1.68 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_qm.c.diff?r1=text&tr1=1.68&r2=text&tr2=1.67&f=h fs/xfs/xfs_iomap.c - 1.63 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_iomap.c.diff?r1=text&tr1=1.63&r2=text&tr2=1.62&f=h fs/xfs/linux-2.6/xfs_lrw.c - 1.280 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_lrw.c.diff?r1=text&tr1=1.280&r2=text&tr2=1.279&f=h fs/xfs/linux-2.6/xfs_ksyms.c - 1.83 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_ksyms.c.diff?r1=text&tr1=1.83&r2=text&tr2=1.82&f=h fs/xfs/linux-2.6/mrlock.h - 1.23 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/mrlock.h.diff?r1=text&tr1=1.23&r2=text&tr2=1.22&f=h - shrink mrlock_t From owner-xfs@oss.sgi.com Sun Apr 20 22:21:22 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 22:21:30 -0700 (PDT) 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 m3L5LJ6l003080 for ; Sun, 20 Apr 2008 22:21:21 -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 PAA09493; Mon, 21 Apr 2008 15:21:57 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id DC68E58C4C15; Mon, 21 Apr 2008 15:21:56 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - remove manual lookup from xfs_rename and simplify locking Message-Id: <20080421052156.DC68E58C4C15@chook.melbourne.sgi.com> Date: Mon, 21 Apr 2008 15:21:56 +1000 (EST) From: lachlan@sgi.com (Lachlan McIlroy) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15490 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs remove manual lookup from xfs_rename and simplify locking ->rename already gets the target inode passed if it exits. Pass it down to xfs_rename so that we can avoid looking it up again. Also simplify locking as the first lock section in xfs_rename can go away now: the isdir is an invariant over the lifetime of the inode, and new_parent and the nlink check are namespace topology protected by i_mutex in the VFS. The projid check needs to move into the second lock section anyway to not be racy. Also kill the now unused xfs_dir_lookup_int and remove the now-unused first_locked argumet to xfs_lock_inodes. Signed-off-by: Christoph Hellwig Date: Mon Apr 21 15:21:27 AEST 2008 Workarea: redback.melbourne.sgi.com:/home/lachlan/isms/2.6.x-hch 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:30903a fs/xfs/xfs_vnodeops.c - 1.755 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.c.diff?r1=text&tr1=1.755&r2=text&tr2=1.754&f=h fs/xfs/xfs_dfrag.c - 1.66 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dfrag.c.diff?r1=text&tr1=1.66&r2=text&tr2=1.65&f=h fs/xfs/xfs_inode.h - 1.245 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_inode.h.diff?r1=text&tr1=1.245&r2=text&tr2=1.244&f=h fs/xfs/xfs_utils.c - 1.84 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_utils.c.diff?r1=text&tr1=1.84&r2=text&tr2=1.83&f=h fs/xfs/xfs_utils.h - 1.42 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_utils.h.diff?r1=text&tr1=1.42&r2=text&tr2=1.41&f=h fs/xfs/xfs_rename.c - 1.83 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_rename.c.diff?r1=text&tr1=1.83&r2=text&tr2=1.82&f=h fs/xfs/linux-2.6/xfs_iops.c - 1.284 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_iops.c.diff?r1=text&tr1=1.284&r2=text&tr2=1.283&f=h fs/xfs/xfs_vnodeops.h - 1.14 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.h.diff?r1=text&tr1=1.14&r2=text&tr2=1.13&f=h - remove manual lookup from xfs_rename and simplify locking From owner-xfs@oss.sgi.com Sun Apr 20 22:23:45 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 22:24:02 -0700 (PDT) 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 m3L5NgCm003355 for ; Sun, 20 Apr 2008 22:23:44 -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 PAA09524; Mon, 21 Apr 2008 15:24:20 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id E52E458C4C15; Mon, 21 Apr 2008 15:24:19 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - kill usesless IHOLD calls in xfs_rename Message-Id: <20080421052419.E52E458C4C15@chook.melbourne.sgi.com> Date: Mon, 21 Apr 2008 15:24:19 +1000 (EST) From: lachlan@sgi.com (Lachlan McIlroy) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15491 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs kill usesless IHOLD calls in xfs_rename Similar to to the previous patch for remove and rmdir only grab a reference to inodes when we join them to transaction to balance the decrement on transaction completion. Everything else it taken care of by the VFS. Note that the old case had leaks of inode count when src == target or src or target == one of the parent inodes, but these cases are fortunately already rejected by the VFS. Signed-off-by: Christoph Hellwig Date: Mon Apr 21 15:23:49 AEST 2008 Workarea: redback.melbourne.sgi.com:/home/lachlan/isms/2.6.x-hch 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:30904a fs/xfs/xfs_rename.c - 1.84 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_rename.c.diff?r1=text&tr1=1.84&r2=text&tr2=1.83&f=h - kill usesless IHOLD calls in xfs_rename From owner-xfs@oss.sgi.com Sun Apr 20 22:48:55 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 22:49:14 -0700 (PDT) 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 m3L5mqp0004971 for ; Sun, 20 Apr 2008 22:48:55 -0700 X-ASG-Debug-ID: 1208756971-4c54020d0000-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 8C1B0A697A8; Sun, 20 Apr 2008 22:49:31 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id t4NvJ1pl03a3Qw5P; Sun, 20 Apr 2008 22:49:31 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JnouA-0007WP-Dj; Mon, 21 Apr 2008 05:49:30 +0000 Date: Mon, 21 Apr 2008 01:49:30 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: lachlan@sgi.com, Christoph Hellwig , xfs@oss.sgi.com, akpm@linux-foundation.org X-ASG-Orig-Subj: Re: [GIT PULL] XFS update for 2.6.26-rc1 Subject: Re: [GIT PULL] XFS update for 2.6.26-rc1 Message-ID: <20080421054930.GA28903@infradead.org> References: <20080418050547.0E70F58C4C15@chook.melbourne.sgi.com> <20080420190515.GA19219@infradead.org> <480BFE97.9090008@sgi.com> <480C031B.6010802@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <480C031B.6010802@sandeen.net> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1208756974 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.1, rules version 3.1.48381 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15492 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Sun, Apr 20, 2008 at 09:59:39PM -0500, Eric Sandeen wrote: > Lachlan McIlroy wrote: > > What were they? > > [PATCH, mainline-only] remove sendfile leftovers > [PATCH, mainline-only] remove dmapi cruft in xfs_file.c > [PATCH, mainline-only] allow enabling CONFIG_XFS_DEBUG Thanks Eric, doing my work while I'm asleep :) From owner-xfs@oss.sgi.com Sun Apr 20 23:08:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 23:08:07 -0700 (PDT) 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 m3L67vOl006066 for ; Sun, 20 Apr 2008 23:08:00 -0700 X-ASG-Debug-ID: 1208758116-5e4503b50000-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 6572FBA502; Sun, 20 Apr 2008 23:08:36 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id NoFbJ8VVZmvMkldr; Sun, 20 Apr 2008 23:08:36 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JnpCe-0000u5-HB; Mon, 21 Apr 2008 06:08:36 +0000 Date: Mon, 21 Apr 2008 02:08:36 -0400 From: Christoph Hellwig To: Lachlan McIlroy Cc: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: PARTIAL TAKE 976035 - kill usesless IHOLD calls in xfs_rename Subject: Re: PARTIAL TAKE 976035 - kill usesless IHOLD calls in xfs_rename Message-ID: <20080421060836.GA31296@infradead.org> References: <20080421052419.E52E458C4C15@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080421052419.E52E458C4C15@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1208758119 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.1, rules version 3.1.48383 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15493 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs Any reason you didn't commit: [PATCH 1/2] kill parent == child checks in xfs_remove and xfs_rmdir [PATCH 2/2] kill usesless IHOLD calls in xfs_remove and xfs_rmdir in this round, it's pretty much the equivalent treatment to remove and rmdir that we did to rename in this and the previous patch. From owner-xfs@oss.sgi.com Sun Apr 20 23:55:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 23:55:37 -0700 (PDT) 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 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 m3L6tPHg009082 for ; Sun, 20 Apr 2008 23:55:28 -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 QAA11324; Mon, 21 Apr 2008 16:56:03 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 509FC58C4C15; Mon, 21 Apr 2008 16:56:03 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 980581 - xfs_repair - using to much memory on a PAE 32-bit system Message-Id: <20080421065603.509FC58C4C15@chook.melbourne.sgi.com> Date: Mon, 21 Apr 2008 16:56:03 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15496 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Improve memory usage limits, esp on 32-bit systems and an easy to use manual memory usage limit option. Date: Mon Apr 21 16:55:04 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/xfs-cmds Inspected by: nscott@aconex.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:30906a xfsprogs/man/man8/xfs_repair.8 - 1.11 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/man/man8/xfs_repair.8.diff?r1=text&tr1=1.11&r2=text&tr2=1.10&f=h - Document new -m memory limit option for xfs_repair xfsprogs/repair/xfs_repair.c - 1.32 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/xfs_repair.c.diff?r1=text&tr1=1.32&r2=text&tr2=1.31&f=h - Add -m option for maximum memory usage and improve auto-amount to be used From owner-xfs@oss.sgi.com Sun Apr 20 23:52:56 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 23:53:14 -0700 (PDT) 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 m3L6qqod008674 for ; Sun, 20 Apr 2008 23:52:54 -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 QAA11276; Mon, 21 Apr 2008 16:53:28 +1000 Message-ID: <480C39FD.7090703@sgi.com> Date: Mon, 21 Apr 2008 16:53:49 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: PARTIAL TAKE 976035 - kill usesless IHOLD calls in xfs_rename References: <20080421052419.E52E458C4C15@chook.melbourne.sgi.com> <20080421060836.GA31296@infradead.org> In-Reply-To: <20080421060836.GA31296@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15494 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig wrote: > Any reason you didn't commit: > > [PATCH 1/2] kill parent == child checks in xfs_remove and xfs_rmdir > [PATCH 2/2] kill usesless IHOLD calls in xfs_remove and xfs_rmdir > > in this round, it's pretty much the equivalent treatment to remove and > rmdir that we did to rename in this and the previous patch. > No intentional reason. For some reason I didn't apply them when I tested the last batch. They're going through QA now and I'll check them in soon. From owner-xfs@oss.sgi.com Sun Apr 20 23:54:05 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 20 Apr 2008 23:54:15 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,WEIRD_PORT 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 m3L6s2lA008844 for ; Sun, 20 Apr 2008 23:54:04 -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 QAA11297; Mon, 21 Apr 2008 16:54:36 +1000 Message-ID: <480C3A41.6020809@sgi.com> Date: Mon, 21 Apr 2008 16:54:57 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: Eric Sandeen CC: Christoph Hellwig , xfs@oss.sgi.com, akpm@linux-foundation.org Subject: Re: [GIT PULL] XFS update for 2.6.26-rc1 References: <20080418050547.0E70F58C4C15@chook.melbourne.sgi.com> <20080420190515.GA19219@infradead.org> <480BFE97.9090008@sgi.com> <480C031B.6010802@sandeen.net> In-Reply-To: <480C031B.6010802@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15495 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Thanks Eric. I'll include them in the next update. Eric Sandeen wrote: > Lachlan McIlroy wrote: >> What were they? > > [PATCH, mainline-only] remove sendfile leftovers > [PATCH, mainline-only] remove dmapi cruft in xfs_file.c > [PATCH, mainline-only] allow enabling CONFIG_XFS_DEBUG > > -Eric > >> Christoph Hellwig wrote: >>> On Fri, Apr 18, 2008 at 03:05:46PM +1000, Lachlan McIlroy wrote: >>>> Please pull from the for-linus branch: >>>> git pull git://oss.sgi.com:8090/xfs/xfs-2.6.git for-linus >>>> >>>> This will update the following files: >>> Seems like you forgot the three mainline-only patches I sent a while >>> ago. > > > From owner-xfs@oss.sgi.com Mon Apr 21 00:00:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 00:01:30 -0700 (PDT) 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.0 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 m3L70oMc012182 for ; Mon, 21 Apr 2008 00:00:56 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA11521; Mon, 21 Apr 2008 17:01:27 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3L71PsT138351234; Mon, 21 Apr 2008 17:01:26 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3L71NWM139359791; Mon, 21 Apr 2008 17:01:23 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 21 Apr 2008 17:01:23 +1000 From: David Chinner To: lkml Cc: xfs-oss , linux-mm Subject: OOM killer doesn't kill the right task.... Message-ID: <20080421070123.GM108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15497 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Running in a 512MB UML system without swap, XFSQA test 084 reliably kills the kernel completely as the OOM killer is unable to find a task to kill. log output is below. I don't know when it started failing - ISTR this working just fine on 2.6.24 kernels. Test program is here: http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/src/resvtest.c?rev=1.3 And it is invoked with two different command lines from the test suite (not sure which one triggers the failure): $ ./resvtest -i 20 -b $pagesize and $ ./resvtest -i 40 -b 512 Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group [ 1061.900000] resvtest invoked oom-killer: gfp_mask=0x1200d2, order=0, oomkilladj=-17 [ 1061.900000] Call Trace: [ 1061.900000] 6792bb58: [<60037a85>] printk_ratelimit+0x15/0x20 [ 1061.900000] 6792bb68: [<60063895>] oom_kill_process+0x125/0x160 [ 1061.900000] 6792bbb8: [<60063a83>] out_of_memory+0xa3/0x140 [ 1061.900000] 6792bc08: [<6006567e>] __alloc_pages+0x2ae/0x3d0 [ 1061.900000] 6792bc38: [<6003310c>] __might_sleep+0xdc/0x120 [ 1061.900000] 6792bc78: [<60076a82>] anon_vma_prepare+0x32/0x120 [ 1061.900000] 6792bcb8: [<60070e5b>] do_anonymous_page+0x4b/0x1b0 [ 1061.900000] 6792bd18: [<600718db>] handle_mm_fault+0x26b/0x2e0 [ 1061.900000] 6792bd28: [<6003310c>] __might_sleep+0xdc/0x120 [ 1061.900000] 6792bd88: [<6001725b>] handle_page_fault+0x18b/0x240 [ 1061.900000] 6792bdf8: [<600175e2>] segv+0x1b2/0x2d0 [ 1061.900000] 6792bee8: [<6001742b>] segv_handler+0x7b/0x80 [ 1061.900000] 6792bf18: [<6002b2be>] userspace+0x22e/0x300 [ 1061.900000] 6792bfc8: [<60014992>] fork_handler+0x62/0x70 [ 1061.900000] [ 1061.900000] Mem-info: [ 1061.900000] Normal per-cpu: [ 1061.900000] CPU 0: hi: 186, btch: 31 usd: 132 [ 1061.900000] Active:121370 inactive:41 dirty:0 writeback:0 unstable:0 [ 1061.900000] free:714 slab:1492 mapped:14 pagetables:416 bounce:0 [ 1061.900000] Normal free:2856kB min:2876kB low:3592kB high:4312kB active:485480kB inactive:164kB present:517120kB pages_scanned:788832 all_unreclaimable? yes [ 1061.900000] lowmem_reserve[]: 0 0 [ 1061.900000] Normal: 2*4kB 2*8kB 1*16kB 4*32kB 0*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 1*2048kB 0*4096kB = 2856kB [ 1061.900000] 121 total pagecache pages [ 1061.900000] Swap cache: add 0, delete 0, find 0/0 [ 1061.900000] Free swap = 0kB [ 1061.900000] Total swap = 0kB [ 1061.900000] Free swap: 0kB [ 1061.900000] 131072 pages of RAM [ 1061.900000] 0 pages of HIGHMEM [ 1061.900000] 5047 reserved pages [ 1061.900000] 202 pages shared [ 1061.900000] 0 pages swap cached [ 1061.900000] Out of memory: kill process 1039 (uml_switch) score 936 or a child [ 1061.900000] Killed process 1039 (uml_switch) [ 1061.910000] resvtest invoked oom-killer: gfp_mask=0x1200d2, order=0, oomkilladj=-17 [ 1061.910000] Call Trace: [ 1061.910000] 6792bb58: [<60037a85>] printk_ratelimit+0x15/0x20 [ 1061.910000] 6792bb68: [<60063895>] oom_kill_process+0x125/0x160 [ 1061.910000] 6792bbb8: [<60063a83>] out_of_memory+0xa3/0x140 [ 1061.910000] 6792bc08: [<6006567e>] __alloc_pages+0x2ae/0x3d0 [ 1061.910000] 6792bc38: [<6003310c>] __might_sleep+0xdc/0x120 [ 1061.910000] 6792bc78: [<60076a82>] anon_vma_prepare+0x32/0x120 [ 1061.910000] 6792bcb8: [<60070e5b>] do_anonymous_page+0x4b/0x1b0 [ 1061.910000] 6792bd18: [<600718db>] handle_mm_fault+0x26b/0x2e0 [ 1061.910000] 6792bd28: [<6003310c>] __might_sleep+0xdc/0x120 [ 1061.910000] 6792bd88: [<6001725b>] handle_page_fault+0x18b/0x240 [ 1061.910000] 6792bdf8: [<600175e2>] segv+0x1b2/0x2d0 [ 1061.910000] 6792bee8: [<6001742b>] segv_handler+0x7b/0x80 [ 1061.910000] 6792bf18: [<6002b2be>] userspace+0x22e/0x300 [ 1061.910000] 6792bfc8: [<60014992>] fork_handler+0x62/0x70 [ 1061.910000] [ 1061.910000] Mem-info: [ 1061.910000] Normal per-cpu: [ 1061.910000] CPU 0: hi: 186, btch: 31 usd: 166 [ 1061.910000] Active:121348 inactive:41 dirty:0 writeback:0 unstable:0 [ 1061.910000] free:714 slab:1492 mapped:6 pagetables:409 bounce:0 [ 1061.910000] Normal free:2856kB min:2876kB low:3592kB high:4312kB active:485392kB inactive:164kB present:517120kB pages_scanned:789072 all_unreclaimable? yes [ 1061.910000] lowmem_reserve[]: 0 0 [ 1061.910000] Normal: 2*4kB 2*8kB 1*16kB 4*32kB 0*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 1*2048kB 0*4096kB = 2856kB [ 1061.910000] 121 total pagecache pages [ 1061.910000] Swap cache: add 0, delete 0, find 0/0 [ 1061.910000] Free swap = 0kB [ 1061.910000] Total swap = 0kB [ 1061.910000] Free swap: 0kB [ 1061.910000] 131072 pages of RAM [ 1061.910000] 0 pages of HIGHMEM [ 1061.910000] 5047 reserved pages [ 1061.910000] 194 pages shared [ 1061.910000] 0 pages swap cached [ 1061.910000] Out of memory: kill process 1061 (cron) score 315 or a child [ 1061.910000] Killed process 1061 (cron) [ 1062.240000] init invoked oom-killer: gfp_mask=0x1201d2, order=0, oomkilladj=0 [ 1062.240000] Call Trace: [ 1062.240000] 7fc239d8: [<60037a85>] printk_ratelimit+0x15/0x20 [ 1062.240000] 7fc239e8: [<60063895>] oom_kill_process+0x125/0x160 [ 1062.240000] 7fc23a38: [<60063a83>] out_of_memory+0xa3/0x140 [ 1062.240000] 7fc23a88: [<6006567e>] __alloc_pages+0x2ae/0x3d0 [ 1062.240000] 7fc23af8: [<600681b1>] read_pages+0x41/0xe0 [ 1062.240000] 7fc23b38: [<60068354>] __do_page_cache_readahead+0x104/0x1d0 [ 1062.240000] 7fc23bd8: [<6006851c>] do_page_cache_readahead+0x5c/0x80 [ 1062.240000] 7fc23c08: [<60060e30>] filemap_fault+0x1a0/0x2f0 [ 1062.240000] 7fc23c68: [<60071027>] __do_fault+0x67/0x480 [ 1062.240000] 7fc23c88: [<6002a5ff>] map+0x11f/0x140 [ 1062.240000] 7fc23cf8: [<6007147c>] do_linear_fault+0x3c/0x40 [ 1062.240000] 7fc23d08: [<6031638e>] _spin_unlock_irq+0xe/0x10 [ 1062.240000] 7fc23d18: [<600717b3>] handle_mm_fault+0x143/0x2e0 [ 1062.240000] 7fc23d28: [<6003310c>] __might_sleep+0xdc/0x120 [ 1062.240000] 7fc23d88: [<6001725b>] handle_page_fault+0x18b/0x240 [ 1062.240000] 7fc23df8: [<600175e2>] segv+0x1b2/0x2d0 [ 1062.240000] 7fc23ee8: [<6001742b>] segv_handler+0x7b/0x80 [ 1062.240000] 7fc23f18: [<6002b2be>] userspace+0x22e/0x300 [ 1062.240000] 7fc23f58: [<60000a90>] kernel_init+0x0/0x80 [ 1062.240000] 7fc23fc8: [<60014914>] new_thread_handler+0x84/0xa0 [ 1062.240000] [ 1062.240000] Mem-info: [ 1062.240000] Normal per-cpu: [ 1062.240000] CPU 0: hi: 186, btch: 31 usd: 148 [ 1062.240000] Active:121456 inactive:1 dirty:0 writeback:0 unstable:0 [ 1062.240000] free:703 slab:1461 mapped:0 pagetables:396 bounce:0 [ 1062.240000] Normal free:2812kB min:2876kB low:3592kB high:4312kB active:485824kB inactive:4kB present:517120kB pages_scanned:755399 all_unreclaimable? yes [ 1062.240000] lowmem_reserve[]: 0 0 [ 1062.240000] Normal: 3*4kB 2*8kB 0*16kB 3*32kB 0*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 1*2048kB 0*4096kB = 2812kB [ 1062.240000] 75 total pagecache pages [ 1062.240000] Swap cache: add 0, delete 0, find 0/0 [ 1062.240000] Free swap = 0kB [ 1062.240000] Total swap = 0kB [ 1062.240000] Free swap: 0kB [ 1062.240000] 131072 pages of RAM [ 1062.240000] 0 pages of HIGHMEM [ 1062.240000] 5047 reserved pages [ 1062.240000] 181 pages shared [ 1062.240000] 0 pages swap cached [ 1062.240000] Out of memory: kill process 1029 (inetd) score 157 or a child [ 1062.240000] Killed process 1029 (inetd) [ 1062.490000] init invoked oom-killer: gfp_mask=0x1201d2, order=0, oomkilladj=0 [ 1062.490000] Call Trace: [ 1062.490000] 7fc239d8: [<60037a85>] printk_ratelimit+0x15/0x20 [ 1062.490000] 7fc239e8: [<60063895>] oom_kill_process+0x125/0x160 [ 1062.490000] 7fc23a38: [<60063a83>] out_of_memory+0xa3/0x140 [ 1062.490000] 7fc23a88: [<6006567e>] __alloc_pages+0x2ae/0x3d0 [ 1062.490000] 7fc23aa8: [<6001828b>] do_op_one_page+0x13b/0x150 [ 1062.490000] 7fc23ab8: [<60018390>] copy_chunk_from_user+0x0/0x40 [ 1062.490000] 7fc23b38: [<60068354>] __do_page_cache_readahead+0x104/0x1d0 [ 1062.490000] 7fc23bd8: [<6006851c>] do_page_cache_readahead+0x5c/0x80 [ 1062.490000] 7fc23c08: [<60060e30>] filemap_fault+0x1a0/0x2f0 [ 1062.490000] 7fc23c68: [<60071027>] __do_fault+0x67/0x480 [ 1062.490000] 7fc23c88: [<6002a5ff>] map+0x11f/0x140 [ 1062.490000] 7fc23cf8: [<6007147c>] do_linear_fault+0x3c/0x40 [ 1062.490000] 7fc23d08: [<6031638e>] _spin_unlock_irq+0xe/0x10 [ 1062.490000] 7fc23d18: [<600717b3>] handle_mm_fault+0x143/0x2e0 [ 1062.490000] 7fc23d28: [<6003310c>] __might_sleep+0xdc/0x120 [ 1062.490000] 7fc23d88: [<6001725b>] handle_page_fault+0x18b/0x240 [ 1062.490000] 7fc23df8: [<600175e2>] segv+0x1b2/0x2d0 [ 1062.490000] 7fc23ee8: [<6001742b>] segv_handler+0x7b/0x80 [ 1062.490000] 7fc23f18: [<6002b2be>] userspace+0x22e/0x300 [ 1062.490000] 7fc23f58: [<60000a90>] kernel_init+0x0/0x80 [ 1062.490000] 7fc23fc8: [<60014914>] new_thread_handler+0x84/0xa0 [ 1062.490000] [ 1062.490000] Mem-info: [ 1062.490000] Normal per-cpu: [ 1062.490000] CPU 0: hi: 186, btch: 31 usd: 147 [ 1062.490000] Active:121400 inactive:75 dirty:0 writeback:0 unstable:0 [ 1062.490000] free:707 slab:1461 mapped:0 pagetables:387 bounce:0 [ 1062.490000] Normal free:2828kB min:2876kB low:3592kB high:4312kB active:485600kB inactive:300kB present:517120kB pages_scanned:874765 all_unreclaimable? yes [ 1062.490000] lowmem_reserve[]: 0 0 [ 1062.490000] Normal: 3*4kB 2*8kB 1*16kB 3*32kB 0*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 1*2048kB 0*4096kB = 2828kB [ 1062.490000] 75 total pagecache pages [ 1062.490000] Swap cache: add 0, delete 0, find 0/0 [ 1062.490000] Free swap = 0kB [ 1062.490000] Total swap = 0kB [ 1062.490000] Free swap: 0kB [ 1062.490000] 131072 pages of RAM [ 1062.490000] 0 pages of HIGHMEM [ 1062.490000] 5047 reserved pages [ 1062.490000] 181 pages shared [ 1062.490000] 0 pages swap cached [ 1062.490000] Out of memory: kill process 1001 (syslogd) score 91 or a child [ 1062.490000] Killed process 1001 (syslogd) [ 1062.770000] klogd invoked oom-killer: gfp_mask=0x1201d2, order=0, oomkilladj=0 [ 1062.770000] Call Trace: [ 1062.770000] 7e9ef9d8: [<60037a85>] printk_ratelimit+0x15/0x20 [ 1062.770000] 7e9ef9e8: [<60063895>] oom_kill_process+0x125/0x160 [ 1062.770000] 7e9efa38: [<60063a83>] out_of_memory+0xa3/0x140 [ 1062.770000] 7e9efa88: [<6006567e>] __alloc_pages+0x2ae/0x3d0 [ 1062.770000] 7e9efab8: [<603143ef>] schedule+0x16f/0x260 [ 1062.770000] 7e9efb38: [<60068354>] __do_page_cache_readahead+0x104/0x1d0 [ 1062.770000] 7e9efbd8: [<6006851c>] do_page_cache_readahead+0x5c/0x80 [ 1062.770000] 7e9efc08: [<60060e30>] filemap_fault+0x1a0/0x2f0 [ 1062.770000] 7e9efc68: [<60071027>] __do_fault+0x67/0x480 [ 1062.770000] 7e9efc88: [<6002a5ff>] map+0x11f/0x140 [ 1062.770000] 7e9efcf8: [<6007147c>] do_linear_fault+0x3c/0x40 [ 1062.770000] 7e9efd08: [<6031638e>] _spin_unlock_irq+0xe/0x10 [ 1062.770000] 7e9efd18: [<600717b3>] handle_mm_fault+0x143/0x2e0 [ 1062.770000] 7e9efd28: [<6003310c>] __might_sleep+0xdc/0x120 [ 1062.770000] 7e9efd88: [<6001725b>] handle_page_fault+0x18b/0x240 [ 1062.770000] 7e9efdf8: [<600175e2>] segv+0x1b2/0x2d0 [ 1062.770000] 7e9efee8: [<6001742b>] segv_handler+0x7b/0x80 [ 1062.770000] 7e9eff18: [<6002b2be>] userspace+0x22e/0x300 [ 1062.770000] 7e9effc8: [<60014992>] fork_handler+0x62/0x70 [ 1062.770000] [ 1062.770000] Mem-info: [ 1062.770000] Normal per-cpu: [ 1062.770000] CPU 0: hi: 186, btch: 31 usd: 158 [ 1062.770000] Active:121480 inactive:12 dirty:0 writeback:0 unstable:0 [ 1062.770000] free:711 slab:1453 mapped:0 pagetables:379 bounce:0 [ 1062.770000] Normal free:2844kB min:2876kB low:3592kB high:4312kB active:485920kB inactive:48kB present:517120kB pages_scanned:850578 all_unreclaimable? yes [ 1062.770000] lowmem_reserve[]: 0 0 [ 1062.770000] Normal: 3*4kB 2*8kB 2*16kB 3*32kB 0*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 1*2048kB 0*4096kB = 2844kB [ 1062.770000] 75 total pagecache pages [ 1062.770000] Swap cache: add 0, delete 0, find 0/0 [ 1062.770000] Free swap = 0kB [ 1062.770000] Total swap = 0kB [ 1062.770000] Free swap: 0kB [ 1062.770000] 131072 pages of RAM [ 1062.770000] 0 pages of HIGHMEM [ 1062.770000] 5047 reserved pages [ 1062.770000] 181 pages shared [ 1062.770000] 0 pages swap cached [ 1062.770000] Out of memory: kill process 1008 (klogd) score 58 or a child [ 1062.770000] Killed process 1008 (klogd) [ 1063.270000] resvtest invoked oom-killer: gfp_mask=0x1200d2, order=0, oomkilladj=-17 [ 1063.270000] Call Trace: [ 1063.270000] 6792bb58: [<60037a85>] printk_ratelimit+0x15/0x20 [ 1063.270000] 6792bb68: [<60063895>] oom_kill_process+0x125/0x160 [ 1063.270000] 6792bbb8: [<60063a83>] out_of_memory+0xa3/0x140 [ 1063.270000] 6792bc08: [<6006567e>] __alloc_pages+0x2ae/0x3d0 [ 1063.270000] 6792bc38: [<6003310c>] __might_sleep+0xdc/0x120 [ 1063.270000] 6792bc78: [<60076a82>] anon_vma_prepare+0x32/0x120 [ 1063.270000] 6792bcb8: [<60070e5b>] do_anonymous_page+0x4b/0x1b0 [ 1063.270000] 6792bd18: [<600718db>] handle_mm_fault+0x26b/0x2e0 [ 1063.270000] 6792bd28: [<6003310c>] __might_sleep+0xdc/0x120 [ 1063.270000] 6792bd88: [<6001725b>] handle_page_fault+0x18b/0x240 [ 1063.270000] 6792bdf8: [<600175e2>] segv+0x1b2/0x2d0 [ 1063.270000] 6792bee8: [<6001742b>] segv_handler+0x7b/0x80 [ 1063.270000] 6792bf18: [<6002b2be>] userspace+0x22e/0x300 [ 1063.270000] 6792bfc8: [<60014992>] fork_handler+0x62/0x70 [ 1063.270000] [ 1063.270000] Mem-info: [ 1063.270000] Normal per-cpu: [ 1063.270000] CPU 0: hi: 186, btch: 31 usd: 174 [ 1063.270000] Active:121437 inactive:75 dirty:0 writeback:0 unstable:0 [ 1063.270000] free:715 slab:1453 mapped:0 pagetables:372 bounce:0 [ 1063.270000] Normal free:2860kB min:2876kB low:3592kB high:4312kB active:485748kB inactive:300kB present:517120kB pages_scanned:941856 all_unreclaimable? yes [ 1063.270000] lowmem_reserve[]: 0 0 [ 1063.270000] Normal: 3*4kB 2*8kB 3*16kB 3*32kB 0*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 1*2048kB 0*4096kB = 2860kB [ 1063.270000] 75 total pagecache pages [ 1063.270000] Swap cache: add 0, delete 0, find 0/0 [ 1063.270000] Free swap = 0kB [ 1063.270000] Total swap = 0kB [ 1063.270000] Free swap: 0kB [ 1063.270000] 131072 pages of RAM [ 1063.270000] 0 pages of HIGHMEM [ 1063.270000] 5047 reserved pages [ 1063.270000] 181 pages shared [ 1063.270000] 0 pages swap cached [ 1063.270000] Out of memory: kill process 1081 (getty) score 58 or a child [ 1063.270000] Killed process 1081 (getty) [ 1063.620000] Kernel panic - not syncing: Out of memory and no killable processes... [ 1063.620000] [ 1063.620000] [ 1063.620000] Pid: 5888, comm: resvtest Not tainted 2.6.25-xfs-btree [ 1063.620000] RIP: 0033:[<000000004028d60b>] [ 1063.620000] RSP: 0000007fbfd6b640 EFLAGS: 00010206 [ 1063.620000] RAX: 0000000000001011 RBX: 000000001dd12370 RCX: 000000001dd13380 [ 1063.620000] RDX: 0000000000000000 RSI: 0000000000000010 RDI: 0000000000000004 [ 1063.620000] RBP: 0000000000001000 R08: 0000000000000003 R09: 0000007fbfd6b510 [ 1063.620000] R10: 0000000000000008 R11: 0000000000000206 R12: 000000004055fa00 [ 1063.620000] R13: 000000004055f9a0 R14: 0000000000016c81 R15: 0000000000001010 [ 1063.620000] Call Trace: [ 1063.620000] 6792ba48: [<600179df>] panic_exit+0x2f/0x50 [ 1063.620000] 6792ba68: [<600514b5>] notifier_call_chain+0x45/0x90 [ 1063.620000] 6792baa8: [<600515bd>] __atomic_notifier_call_chain+0xd/0x10 [ 1063.620000] 6792bab8: [<600515d1>] atomic_notifier_call_chain+0x11/0x20 [ 1063.620000] 6792bac8: [<60035f26>] panic+0xe6/0x1a0 [ 1063.620000] 6792bb28: [<6005038c>] ktime_get_ts+0x4c/0x60 [ 1063.620000] 6792bb48: [<60063406>] select_bad_process+0x36/0x110 [ 1063.620000] 6792bbb8: [<60063b00>] out_of_memory+0x120/0x140 [ 1063.620000] 6792bc08: [<6006567e>] __alloc_pages+0x2ae/0x3d0 [ 1063.620000] 6792bc38: [<6003310c>] __might_sleep+0xdc/0x120 [ 1063.620000] 6792bc78: [<60076a82>] anon_vma_prepare+0x32/0x120 [ 1063.620000] 6792bcb8: [<60070e5b>] do_anonymous_page+0x4b/0x1b0 [ 1063.620000] 6792bd18: [<600718db>] handle_mm_fault+0x26b/0x2e0 [ 1063.620000] 6792bd28: [<6003310c>] __might_sleep+0xdc/0x120 [ 1063.620000] 6792bd88: [<6001725b>] handle_page_fault+0x18b/0x240 [ 1063.620000] 6792bdf8: [<600175e2>] segv+0x1b2/0x2d0 [ 1063.620000] 6792bee8: [<6001742b>] segv_handler+0x7b/0x80 [ 1063.620000] 6792bf18: [<6002b2be>] userspace+0x22e/0x300 [ 1063.620000] 6792bfc8: [<60014992>] fork_handler+0x62/0x70 [ 1063.620000] Terminated From owner-xfs@oss.sgi.com Mon Apr 21 00:49:53 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 00:50:18 -0700 (PDT) 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 m3L7nl3D019583 for ; Mon, 21 Apr 2008 00:49:53 -0700 X-ASG-Debug-ID: 1208764227-791c003c0000-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 C37B6A6B3C9 for ; Mon, 21 Apr 2008 00:50:27 -0700 (PDT) Received: from one.firstfloor.org (one.firstfloor.org [213.235.205.2]) by cuda.sgi.com with ESMTP id Q0cxSZtYLilNAsNP for ; Mon, 21 Apr 2008 00:50:27 -0700 (PDT) Received: by one.firstfloor.org (Postfix, from userid 503) id 6B75A1B10001; Mon, 21 Apr 2008 09:55:58 +0200 (CEST) Date: Mon, 21 Apr 2008 09:55:58 +0200 From: Andi Kleen To: David Chinner Cc: Eric Sandeen , Timothy Shimmin , Andi Kleen , Niv Sardi , Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: likely and unlikely was: Re: [PATCH] split xfs_ioc_xattr Subject: Re: likely and unlikely was: Re: [PATCH] split xfs_ioc_xattr Message-ID: <20080421075558.GC14446@one.firstfloor.org> References: <20080319204014.GA23644@lst.de> <20080414032940.GA10579@lst.de> <20080416063712.GN108924158@sgi.com> <4805A589.7080906@sgi.com> <87ve2i5kbs.fsf@basil.nowhere.org> <4808488A.7010204@sgi.com> <4808AAA5.1060201@sandeen.net> <20080421003343.GL108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080421003343.GL108924158@sgi.com> User-Agent: Mutt/1.4.2.1i X-Barracuda-Connect: one.firstfloor.org[213.235.205.2] X-Barracuda-Start-Time: 1208764228 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.1, rules version 3.1.48391 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15498 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: andi@firstfloor.org Precedence: bulk X-list: xfs On Mon, Apr 21, 2008 at 10:33:43AM +1000, David Chinner wrote: > On Fri, Apr 18, 2008 at 09:05:25AM -0500, Eric Sandeen wrote: > > ISTR that the dir2 code on Irix had tons of compiler pragmas for likely > > and unlikely paths, and that it actually was well-profiled and tested. > > Did that ever get translated into Linux hints? > > The Irix code (#pragma mips_frequency_hint [FREQUENT|NEVER|INIT]) > only controllered physical placement of code, it never issued > branch hints. likely/unlikely control placement too and I think it is actually more important for kernel code than branch hints (which x86 doesn't have explictely unlike ia64, they only way to do a branch hint is to reorder the code) due to icache effects. i.e. a "never" block gets moved out of line, > while a "frequent" block is left inline. Realistically, the way > this is used in the Irix dir2 code is completely useless - code like > this: Indeed because gcc has a heuristic that early returns are considered unlikely: /* Branch causing function to terminate is probably not taken. */ DEF_PREDICTOR (PRED_TREE_EARLY_RETURN, "early return (on trees)", HITRATE (61), 0) It's only 61%, but that should be enough. I'm somewhat surprised that MipsPro didn't have such a default heuristic though ... -Andi From owner-xfs@oss.sgi.com Mon Apr 21 00:53:23 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 00:53:33 -0700 (PDT) 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 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 m3L7rKYs019932 for ; Mon, 21 Apr 2008 00:53:22 -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 RAA12383; Mon, 21 Apr 2008 17:53:57 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 415A558C4C15; Mon, 21 Apr 2008 17:53:57 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 977765 - update xfs_admin to add set/clear of lazy-count feature Message-Id: <20080421075357.415A558C4C15@chook.melbourne.sgi.com> Date: Mon, 21 Apr 2008 17:53:57 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15499 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Add lazy-counter enable/disable capability on existing filesystems Date: Mon Apr 21 17:53:16 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/xfs-cmds Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:30908a xfsprogs/db/xfs_admin.sh - 1.12 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/db/xfs_admin.sh.diff?r1=text&tr1=1.12&r2=text&tr2=1.11&f=h - Execute bits changed from xxx to --- Add lazy-count conversion feature xfsprogs/VERSION - 1.180 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/VERSION.diff?r1=text&tr1=1.180&r2=text&tr2=1.179&f=h xfsprogs/doc/CHANGES - 1.252 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/doc/CHANGES.diff?r1=text&tr1=1.252&r2=text&tr2=1.251&f=h - Bump version to 2.9.8 xfsprogs/man/man8/xfs_admin.8 - 1.6 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/man/man8/xfs_admin.8.diff?r1=text&tr1=1.6&r2=text&tr2=1.5&f=h xfsprogs/man/man8/xfs_repair.8 - 1.12 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/man/man8/xfs_repair.8.diff?r1=text&tr1=1.12&r2=text&tr2=1.11&f=h xfsprogs/repair/globals.h - 1.23 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/globals.h.diff?r1=text&tr1=1.23&r2=text&tr2=1.22&f=h xfsprogs/repair/phase1.c - 1.13 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/phase1.c.diff?r1=text&tr1=1.13&r2=text&tr2=1.12&f=h xfsprogs/repair/xfs_repair.c - 1.33 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/xfs_repair.c.diff?r1=text&tr1=1.33&r2=text&tr2=1.32&f=h - Add lazy-counter conversion feature From owner-xfs@oss.sgi.com Mon Apr 21 01:03:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 01:04:21 -0700 (PDT) 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 m3L83iQQ021527 for ; Mon, 21 Apr 2008 01:03:47 -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 SAA12665; Mon, 21 Apr 2008 18:04:21 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id 3948458C4C15; Mon, 21 Apr 2008 18:04:21 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - kill parent == child checks in xfs_remove and xfs_rmdir Message-Id: <20080421080421.3948458C4C15@chook.melbourne.sgi.com> Date: Mon, 21 Apr 2008 18:04:21 +1000 (EST) From: lachlan@sgi.com (Lachlan McIlroy) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15500 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs kill parent == child checks in xfs_remove and xfs_rmdir VFS guaranteed these can't happen. Signed-off-by: Christoph Hellwig Date: Mon Apr 21 18:03:53 AEST 2008 Workarea: redback.melbourne.sgi.com:/home/lachlan/isms/2.6.x-hch 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:30911a fs/xfs/xfs_vnodeops.c - 1.756 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.c.diff?r1=text&tr1=1.756&r2=text&tr2=1.755&f=h - kill parent == child checks in xfs_remove and xfs_rmdir From owner-xfs@oss.sgi.com Mon Apr 21 01:07:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 01:07:28 -0700 (PDT) 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 m3L874b0021965 for ; Mon, 21 Apr 2008 01:07:08 -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 SAA12812; Mon, 21 Apr 2008 18:07:42 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id EBE7758C4C15; Mon, 21 Apr 2008 18:07:41 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - kill usesless IHOLD calls in xfs_remove and xfs_rmdir Message-Id: <20080421080741.EBE7758C4C15@chook.melbourne.sgi.com> Date: Mon, 21 Apr 2008 18:07:41 +1000 (EST) From: lachlan@sgi.com (Lachlan McIlroy) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15501 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs kill usesless IHOLD calls in xfs_remove and xfs_rmdir The VFS always has an inode reference when we call these functions. So we only need to grab a signle reference to each inode that's joined to a transaction - all the other bumping and dropping is as useless as the comments describing the IRIX semantics. Signed-off-by: Christoph Hellwig Date: Mon Apr 21 18:07:13 AEST 2008 Workarea: redback.melbourne.sgi.com:/home/lachlan/isms/2.6.x-hch 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:30912a fs/xfs/xfs_vnodeops.c - 1.757 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.c.diff?r1=text&tr1=1.757&r2=text&tr2=1.756&f=h - kill usesless IHOLD calls in xfs_remove and xfs_rmdir From owner-xfs@oss.sgi.com Mon Apr 21 01:21:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 01:21:47 -0700 (PDT) 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 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 m3L8LEkA023422 for ; Mon, 21 Apr 2008 01:21:17 -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 SAA13133; Mon, 21 Apr 2008 18:21:52 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 758E158C4C15; Mon, 21 Apr 2008 18:21:52 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - Cleanup xfs_attr a bit. Message-Id: <20080421082152.758E158C4C15@chook.melbourne.sgi.com> Date: Mon, 21 Apr 2008 18:21:52 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15502 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Cleanup xfs_attr a bit with xfs_name and remove cred parameter Date: Mon Apr 21 18:20:53 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/kern_ci Inspected by: hch The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30913a fs/xfs/xfs_acl.c - 1.73 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_acl.c.diff?r1=text&tr1=1.73&r2=text&tr2=1.72&f=h - Remove cred parameter from xfs_attr_get fs/xfs/xfs_attr.c - 1.148 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_attr.c.diff?r1=text&tr1=1.148&r2=text&tr2=1.147&f=h - Start using xfs_name and remove cred parameter fs/xfs/xfs_attr.h - 1.39 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_attr.h.diff?r1=text&tr1=1.39&r2=text&tr2=1.38&f=h - Remove unused function declarations fs/xfs/linux-2.6/xfs_ioctl.c - 1.165 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_ioctl.c.diff?r1=text&tr1=1.165&r2=text&tr2=1.164&f=h - Remove cred parameter from xfs_attr_get fs/xfs/dmapi/xfs_dm.c - 1.70 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/dmapi/xfs_dm.c.diff?r1=text&tr1=1.70&r2=text&tr2=1.69&f=h - Remove cred parameter from xfs_attr_get fs/xfs/xfs_vnodeops.h - 1.15 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.h.diff?r1=text&tr1=1.15&r2=text&tr2=1.14&f=h - Remove cred parameter from xfs_attr_get From owner-xfs@oss.sgi.com Mon Apr 21 01:23:45 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 01:24:09 -0700 (PDT) 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=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 m3L8Nddb023727 for ; Mon, 21 Apr 2008 01:23:44 -0700 X-ASG-Debug-ID: 1208766258-601400470000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fgwmail6.fujitsu.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E1F241B884DE; Mon, 21 Apr 2008 01:24:18 -0700 (PDT) Received: from fgwmail6.fujitsu.co.jp (fgwmail6.fujitsu.co.jp [192.51.44.36]) by cuda.sgi.com with ESMTP id W4HZCFfBvJizMlvi; Mon, 21 Apr 2008 01:24:18 -0700 (PDT) Received: from m1.gw.fujitsu.co.jp ([10.0.50.71]) by fgwmail6.fujitsu.co.jp (Fujitsu Gateway) with ESMTP id m3L8ODMN003704 (envelope-from kosaki.motohiro@jp.fujitsu.com); Mon, 21 Apr 2008 17:24:13 +0900 Received: from smail (m1 [127.0.0.1]) by outgoing.m1.gw.fujitsu.co.jp (Postfix) with ESMTP id 7479D24005C; Mon, 21 Apr 2008 17:24:13 +0900 (JST) Received: from s4.gw.fujitsu.co.jp (s4.gw.fujitsu.co.jp [10.0.50.94]) by m1.gw.fujitsu.co.jp (Postfix) with ESMTP id 4C40B2DC01E; Mon, 21 Apr 2008 17:24:13 +0900 (JST) Received: from s4.gw.fujitsu.co.jp (s4 [127.0.0.1]) by s4.gw.fujitsu.co.jp (Postfix) with ESMTP id 32604161C006; Mon, 21 Apr 2008 17:24:13 +0900 (JST) Received: from fjm501.ms.jp.fujitsu.com (fjm501.ms.jp.fujitsu.com [10.56.99.71]) by s4.gw.fujitsu.co.jp (Postfix) with ESMTP id C9B3E161C00A; Mon, 21 Apr 2008 17:24:12 +0900 (JST) Received: from fjmscan502.ms.jp.fujitsu.com (fjmscan502.ms.jp.fujitsu.com [10.56.99.142])by fjm501.ms.jp.fujitsu.com with ESMTP id m3L8NRvk027324; Mon, 21 Apr 2008 17:23:27 +0900 Received: from [127.0.0.1] ([10.124.100.179]) by fjmscan502.ms.jp.fujitsu.com (8.13.1/8.12.11) with ESMTP id m3L8NQsv027748; Mon, 21 Apr 2008 17:23:27 +0900 Date: Mon, 21 Apr 2008 17:24:04 +0900 From: KOSAKI Motohiro To: David Chinner X-ASG-Orig-Subj: Re: OOM killer doesn't kill the right task.... Subject: Re: OOM killer doesn't kill the right task.... Cc: kosaki.motohiro@jp.fujitsu.com, lkml , xfs-oss , linux-mm In-Reply-To: <20080421070123.GM108924158@sgi.com> References: <20080421070123.GM108924158@sgi.com> Message-Id: <20080421172255.C45A.KOSAKI.MOTOHIRO@jp.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Mailer: Becky! ver. 2.42 [ja] X-Barracuda-Connect: fgwmail6.fujitsu.co.jp[192.51.44.36] X-Barracuda-Start-Time: 1208766260 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=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48394 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15503 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: kosaki.motohiro@jp.fujitsu.com Precedence: bulk X-list: xfs Hi David > Running in a 512MB UML system without swap, XFSQA test 084 reliably > kills the kernel completely as the OOM killer is unable to find a > task to kill. log output is below. > > I don't know when it started failing - ISTR this working just fine > on 2.6.24 kernels. Can you reproduce it on non UML box? From owner-xfs@oss.sgi.com Mon Apr 21 01:36:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 01:36:45 -0700 (PDT) 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 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 m3L8a4GD025348 for ; Mon, 21 Apr 2008 01:36:06 -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 SAA13501; Mon, 21 Apr 2008 18:36:44 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 1C22E58C4C15; Mon, 21 Apr 2008 18:36:44 +1000 (EST) Message-Id: <20080421083103.433280025@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Mon, 21 Apr 2008 18:31:03 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 0/4] XFS: case-insensitive lookup and Unicode support X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15504 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Latest set of patches based on the last set of feedback received. Some cleanup patches have been checked in and this patch set has been based on those patches. The NLS support patch is not included this time, it still needs a bit of work to integrate with these patches. Barry. -- From owner-xfs@oss.sgi.com Mon Apr 21 01:36:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 01:36:47 -0700 (PDT) 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.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42, J_CHICKENPOX_43,J_CHICKENPOX_45,J_CHICKENPOX_47,J_CHICKENPOX_63, J_CHICKENPOX_65 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 m3L8a4Pd025347 for ; Mon, 21 Apr 2008 01:36:06 -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 SAA13503; Mon, 21 Apr 2008 18:36:44 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id B6CF958C4C16; Mon, 21 Apr 2008 18:36:44 +1000 (EST) Message-Id: <20080421083644.158168432@chook.melbourne.sgi.com> References: <20080421083103.433280025@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Mon, 21 Apr 2008 18:31:04 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 1/4] XFS: Name operation vector for hash and compare Content-Disposition: inline; filename=nameops.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15505 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Adds two pieces of functionality for the basis of case-insensitive support in XFS: 1. A comparison result enumerated type: xfs_dacmp_t. It represents an exact match, case-insensitive match or no match at all. This patch only implements different and exact results. 2. xfs_nameops vector for specifying how to perform the hash generation of filenames and comparision methods. In this patch the hash vector points to the existing xfs_da_hashname function and the comparison method does a length compare, and if the same, does a memcmp and return the xfs_dacmp_t result. All filename functions that use the hash (create, lookup remove, rename, etc) now use the xfs_nameops.hashname function and all directory lookup functions also use the xfs_nameops.compname function. The lookup functions also handle case-insensitive results even though the default comparison function cannot return that. And important aspect of the lookup functions is that an exact match always has precedence over a case-insensitive. So while a case-insensitive match is found, we have to keep looking just in case there is an exact match. In the meantime, the info for the first case-insensitive match is retained if no exact match is found. Signed-off-by: Barry Naujok --- fs/xfs/xfs_da_btree.c | 19 ++++++++++++++ fs/xfs/xfs_da_btree.h | 22 ++++++++++++++++ fs/xfs/xfs_dir2.c | 12 +++++---- fs/xfs/xfs_dir2_block.c | 34 ++++++++++++++++++------- fs/xfs/xfs_dir2_data.c | 5 +++ fs/xfs/xfs_dir2_leaf.c | 61 +++++++++++++++++++++++++++++++++------------ fs/xfs/xfs_dir2_node.c | 26 ++++++++++++------- fs/xfs/xfs_dir2_sf.c | 64 ++++++++++++++++++++++++++++-------------------- fs/xfs/xfs_mount.h | 2 + 9 files changed, 177 insertions(+), 68 deletions(-) Index: kern_ci/fs/xfs/xfs_da_btree.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.c +++ kern_ci/fs/xfs/xfs_da_btree.c @@ -1530,6 +1530,25 @@ xfs_da_hashname(const uchar_t *name, int } } +xfs_dacmp_t +xfs_da_compname(const char *name1, int len1, const char *name2, int len2) +{ + return (len1 == len2 && memcmp(name1, name2, len1) == 0) ? + XFS_CMP_EXACT : XFS_CMP_DIFFERENT; +} + +static xfs_dahash_t +xfs_default_hashname( + struct xfs_name *name) +{ + return xfs_da_hashname(name->name, name->len); +} + +const struct xfs_nameops xfs_default_nameops = { + .hashname = xfs_default_hashname, + .compname = xfs_da_compname +}; + /* * Add a block to the btree ahead of the file. * Return the new block number to the caller. Index: kern_ci/fs/xfs/xfs_da_btree.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.h +++ kern_ci/fs/xfs/xfs_da_btree.h @@ -99,6 +99,15 @@ typedef struct xfs_da_node_entry xfs_da_ *========================================================================*/ /* + * Search comparison results + */ +typedef enum { + XFS_CMP_DIFFERENT, /* names are completely different */ + XFS_CMP_EXACT, /* names are exactly the same */ + XFS_CMP_CASE /* names are same but differ in case */ +} xfs_dacmp_t; + +/* * Structure to ease passing around component names. */ typedef struct xfs_da_args { @@ -127,6 +136,7 @@ typedef struct xfs_da_args { unsigned char rename; /* T/F: this is an atomic rename op */ unsigned char addname; /* T/F: this is an add operation */ unsigned char oknoent; /* T/F: ok to return ENOENT, else die */ + xfs_dacmp_t cmpresult; /* name compare result for lookups */ } xfs_da_args_t; /* @@ -201,6 +211,14 @@ typedef struct xfs_da_state { (uint)(XFS_DA_LOGOFF(BASE, ADDR)), \ (uint)(XFS_DA_LOGOFF(BASE, ADDR)+(SIZE)-1) +/* + * Name ops for directory and/or attr name operations + */ +struct xfs_nameops { + xfs_dahash_t (*hashname)(struct xfs_name *); + xfs_dacmp_t (*compname)(const char *, int, const char *, int); +}; + #ifdef __KERNEL__ /*======================================================================== @@ -249,6 +267,10 @@ int xfs_da_shrink_inode(xfs_da_args_t *a xfs_dabuf_t *dead_buf); uint xfs_da_hashname(const uchar_t *name_string, int name_length); +xfs_dacmp_t xfs_da_compname(const char *name1, int len1, + const char *name2, int len2); + + xfs_da_state_t *xfs_da_state_alloc(void); void xfs_da_state_free(xfs_da_state_t *state); Index: kern_ci/fs/xfs/xfs_dir2.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -67,6 +67,7 @@ xfs_dir_mount( (mp->m_dirblksize - (uint)sizeof(xfs_da_node_hdr_t)) / (uint)sizeof(xfs_da_node_entry_t); mp->m_dir_magicpct = (mp->m_dirblksize * 37) / 100; + mp->m_dirnameops = &xfs_default_nameops; } /* @@ -166,7 +167,7 @@ xfs_dir_createname( args.name = name->name; args.namelen = name->len; - args.hashval = xfs_da_hashname(name->name, name->len); + args.hashval = dp->i_mount->m_dirnameops->hashname(name); args.inumber = inum; args.dp = dp; args.firstblock = first; @@ -212,11 +213,12 @@ xfs_dir_lookup( args.name = name->name; args.namelen = name->len; - args.hashval = xfs_da_hashname(name->name, name->len); + args.hashval = dp->i_mount->m_dirnameops->hashname(name); args.dp = dp; args.whichfork = XFS_DATA_FORK; args.trans = tp; args.oknoent = 1; + args.cmpresult = XFS_CMP_DIFFERENT; if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) rval = xfs_dir2_sf_lookup(&args); @@ -259,7 +261,7 @@ xfs_dir_removename( args.name = name->name; args.namelen = name->len; - args.hashval = xfs_da_hashname(name->name, name->len); + args.hashval = dp->i_mount->m_dirnameops->hashname(name); args.inumber = ino; args.dp = dp; args.firstblock = first; @@ -342,7 +344,7 @@ xfs_dir_replace( args.name = name->name; args.namelen = name->len; - args.hashval = xfs_da_hashname(name->name, name->len); + args.hashval = dp->i_mount->m_dirnameops->hashname(name); args.inumber = inum; args.dp = dp; args.firstblock = first; @@ -390,7 +392,7 @@ xfs_dir_canenter( args.name = name->name; args.namelen = name->len; - args.hashval = xfs_da_hashname(name->name, name->len); + args.hashval = dp->i_mount->m_dirnameops->hashname(name); args.dp = dp; args.whichfork = XFS_DATA_FORK; args.trans = tp; Index: kern_ci/fs/xfs/xfs_dir2_block.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_block.c +++ kern_ci/fs/xfs/xfs_dir2_block.c @@ -643,6 +643,7 @@ xfs_dir2_block_lookup_int( int mid; /* binary search current idx */ xfs_mount_t *mp; /* filesystem mount point */ xfs_trans_t *tp; /* transaction pointer */ + xfs_dacmp_t cmp; /* comparison result */ dp = args->dp; tp = args->trans; @@ -697,20 +698,32 @@ xfs_dir2_block_lookup_int( dep = (xfs_dir2_data_entry_t *) ((char *)block + xfs_dir2_dataptr_to_off(mp, addr)); /* - * Compare, if it's right give back buffer & entry number. + * Compare name and if it's an exact match, return the index + * and buffer. If it's the first case-insensitive match, store + * the index and buffer and continue looking for an exact match. */ - if (dep->namelen == args->namelen && - dep->name[0] == args->name[0] && - memcmp(dep->name, args->name, args->namelen) == 0) { + cmp = mp->m_dirnameops->compname(dep->name, dep->namelen, + args->name, args->namelen); + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { + args->cmpresult = cmp; *bpp = bp; *entno = mid; - return 0; + if (cmp == XFS_CMP_EXACT) + return 0; } - } while (++mid < be32_to_cpu(btp->count) && be32_to_cpu(blp[mid].hashval) == hash); + } while (++mid < be32_to_cpu(btp->count) && + be32_to_cpu(blp[mid].hashval) == hash); + + ASSERT(args->oknoent); + /* + * Here, we can only be doing a lookup (not a rename or replace). + * If a case-insensitive match was found earlier, return success. + */ + if (args->cmpresult == XFS_CMP_CASE) + return 0; /* * No match, release the buffer and return ENOENT. */ - ASSERT(args->oknoent); xfs_da_brelse(tp, bp); return XFS_ERROR(ENOENT); } @@ -1033,6 +1046,7 @@ xfs_dir2_sf_to_block( xfs_dir2_sf_t *sfp; /* shortform structure */ __be16 *tagp; /* end of data entry */ xfs_trans_t *tp; /* transaction pointer */ + struct xfs_name name; xfs_dir2_trace_args("sf_to_block", args); dp = args->dp; @@ -1187,8 +1201,10 @@ xfs_dir2_sf_to_block( tagp = xfs_dir2_data_entry_tag_p(dep); *tagp = cpu_to_be16((char *)dep - (char *)block); xfs_dir2_data_log_entry(tp, bp, dep); - blp[2 + i].hashval = cpu_to_be32(xfs_da_hashname( - (char *)sfep->name, sfep->namelen)); + name.name = sfep->name; + name.len = sfep->namelen; + blp[2 + i].hashval = cpu_to_be32(mp->m_dirnameops-> + hashname(&name)); blp[2 + i].address = cpu_to_be32(xfs_dir2_byte_to_dataptr(mp, (char *)dep - (char *)block)); offset = (int)((char *)(tagp + 1) - (char *)block); Index: kern_ci/fs/xfs/xfs_dir2_data.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_data.c +++ kern_ci/fs/xfs/xfs_dir2_data.c @@ -65,6 +65,7 @@ xfs_dir2_data_check( xfs_mount_t *mp; /* filesystem mount point */ char *p; /* current data position */ int stale; /* count of stale leaves */ + struct xfs_name name; mp = dp->i_mount; d = bp->data; @@ -140,7 +141,9 @@ xfs_dir2_data_check( addr = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk, (xfs_dir2_data_aoff_t) ((char *)dep - (char *)d)); - hash = xfs_da_hashname((char *)dep->name, dep->namelen); + name.name = dep->name; + name.len = dep->namelen; + hash = mp->m_dirnameops->hashname(&name); for (i = 0; i < be32_to_cpu(btp->count); i++) { if (be32_to_cpu(lep[i].address) == addr && be32_to_cpu(lep[i].hashval) == hash) Index: kern_ci/fs/xfs/xfs_dir2_leaf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_leaf.c +++ kern_ci/fs/xfs/xfs_dir2_leaf.c @@ -1331,6 +1331,8 @@ xfs_dir2_leaf_lookup_int( xfs_mount_t *mp; /* filesystem mount point */ xfs_dir2_db_t newdb; /* new data block number */ xfs_trans_t *tp; /* transaction pointer */ + xfs_dabuf_t *cbp; /* case match data buffer */ + xfs_dacmp_t cmp; /* name compare result */ dp = args->dp; tp = args->trans; @@ -1354,9 +1356,11 @@ xfs_dir2_leaf_lookup_int( * Loop over all the entries with the right hash value * looking to match the name. */ + cbp = NULL; for (lep = &leaf->ents[index], dbp = NULL, curdb = -1; - index < be16_to_cpu(leaf->hdr.count) && be32_to_cpu(lep->hashval) == args->hashval; - lep++, index++) { + index < be16_to_cpu(leaf->hdr.count) && + be32_to_cpu(lep->hashval) == args->hashval; + lep++, index++) { /* * Skip over stale leaf entries. */ @@ -1371,12 +1375,12 @@ xfs_dir2_leaf_lookup_int( * need to pitch the old one and read the new one. */ if (newdb != curdb) { - if (dbp) + if (dbp != cbp) xfs_da_brelse(tp, dbp); - if ((error = - xfs_da_read_buf(tp, dp, - xfs_dir2_db_to_da(mp, newdb), -1, &dbp, - XFS_DATA_FORK))) { + error = xfs_da_read_buf(tp, dp, + xfs_dir2_db_to_da(mp, newdb), + -1, &dbp, XFS_DATA_FORK); + if (error) { xfs_da_brelse(tp, lbp); return error; } @@ -1386,24 +1390,47 @@ xfs_dir2_leaf_lookup_int( /* * Point to the data entry. */ - dep = (xfs_dir2_data_entry_t *) - ((char *)dbp->data + - xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); + dep = (xfs_dir2_data_entry_t *)((char *)dbp->data + + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); /* - * If it matches then return it. + * Compare name and if it's an exact match, return the index + * and buffer. If it's the first case-insensitive match, store + * the index and buffer and continue looking for an exact match. */ - if (dep->namelen == args->namelen && - dep->name[0] == args->name[0] && - memcmp(dep->name, args->name, args->namelen) == 0) { - *dbpp = dbp; + cmp = mp->m_dirnameops->compname(dep->name, dep->namelen, + args->name, args->namelen); + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { + args->cmpresult = cmp; *indexp = index; - return 0; + /* + * case exact match: release the stored CI buffer if it + * exists and return the current buffer. + */ + if (cmp == XFS_CMP_EXACT) { + if (cbp && cbp != dbp) + xfs_da_brelse(tp, cbp); + *dbpp = dbp; + return 0; + } + cbp = dbp; } } + ASSERT(args->oknoent); + /* + * Here, we can only be doing a lookup (not a rename or replace). + * If a case-insensitive match was found earlier, release the current + * buffer and return the stored CI matching buffer. + */ + if (args->cmpresult == XFS_CMP_CASE) { + if (cbp != dbp) + xfs_da_brelse(tp, dbp); + *dbpp = cbp; + return 0; + } /* * No match found, return ENOENT. */ - ASSERT(args->oknoent); + ASSERT(cbp == NULL); if (dbp) xfs_da_brelse(tp, dbp); xfs_da_brelse(tp, lbp); Index: kern_ci/fs/xfs/xfs_dir2_node.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_node.c +++ kern_ci/fs/xfs/xfs_dir2_node.c @@ -556,6 +556,7 @@ xfs_dir2_leafn_lookup_for_entry( xfs_mount_t *mp; /* filesystem mount point */ xfs_dir2_db_t newdb; /* new data block number */ xfs_trans_t *tp; /* transaction pointer */ + xfs_dacmp_t cmp; /* comparison result */ dp = args->dp; tp = args->trans; @@ -620,17 +621,22 @@ xfs_dir2_leafn_lookup_for_entry( dep = (xfs_dir2_data_entry_t *)((char *)curbp->data + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); /* - * Compare the entry, return it if it matches. - */ - if (dep->namelen == args->namelen && memcmp(dep->name, - args->name, args->namelen) == 0) { + * Compare the entry and if it's an exact match, return + * EEXIST immediately. If it's the first case-insensitive + * match, store the inode number and continue looking. + */ + cmp = mp->m_dirnameops->compname(dep->name, dep->namelen, + args->name, args->namelen); + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { + args->cmpresult = cmp; args->inumber = be64_to_cpu(dep->inumber); di = (int)((char *)dep - (char *)curbp->data); error = EEXIST; - goto out; + if (cmp == XFS_CMP_EXACT) + goto out; } } - /* Didn't find a match. */ + /* Didn't find an exact match. */ error = ENOENT; di = -1; ASSERT(index == be16_to_cpu(leaf->hdr.count) || args->oknoent); @@ -1813,6 +1819,8 @@ xfs_dir2_node_lookup( error = xfs_da_node_lookup_int(state, &rval); if (error) rval = error; + else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) + rval = EEXIST; /* a case-insensitive match was found */ /* * Release the btree blocks and leaf block. */ @@ -1856,9 +1864,8 @@ xfs_dir2_node_removename( * Look up the entry we're deleting, set up the cursor. */ error = xfs_da_node_lookup_int(state, &rval); - if (error) { + if (error) rval = error; - } /* * Didn't find it, upper layer screwed up. */ @@ -1875,9 +1882,8 @@ xfs_dir2_node_removename( */ error = xfs_dir2_leafn_remove(args, blk->bp, blk->index, &state->extrablk, &rval); - if (error) { + if (error) return error; - } /* * Fix the hash values up the btree. */ Index: kern_ci/fs/xfs/xfs_dir2_sf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_sf.c +++ kern_ci/fs/xfs/xfs_dir2_sf.c @@ -814,6 +814,7 @@ xfs_dir2_sf_lookup( int i; /* entry index */ xfs_dir2_sf_entry_t *sfep; /* shortform directory entry */ xfs_dir2_sf_t *sfp; /* shortform structure */ + xfs_dacmp_t cmp; /* comparison result */ xfs_dir2_trace_args("sf_lookup", args); xfs_dir2_sf_check(args); @@ -836,6 +837,7 @@ xfs_dir2_sf_lookup( */ if (args->namelen == 1 && args->name[0] == '.') { args->inumber = dp->i_ino; + args->cmpresult = XFS_CMP_EXACT; return XFS_ERROR(EEXIST); } /* @@ -844,27 +846,40 @@ xfs_dir2_sf_lookup( if (args->namelen == 2 && args->name[0] == '.' && args->name[1] == '.') { args->inumber = xfs_dir2_sf_get_inumber(sfp, &sfp->hdr.parent); + args->cmpresult = XFS_CMP_EXACT; return XFS_ERROR(EEXIST); } /* * Loop over all the entries trying to match ours. */ - for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); - i < sfp->hdr.count; - i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { - if (sfep->namelen == args->namelen && - sfep->name[0] == args->name[0] && - memcmp(args->name, sfep->name, args->namelen) == 0) { - args->inumber = - xfs_dir2_sf_get_inumber(sfp, - xfs_dir2_sf_inumberp(sfep)); - return XFS_ERROR(EEXIST); + for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); i < sfp->hdr.count; + i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { + /* + * Compare name and if it's an exact match, return the inode + * number. If it's the first case-insensitive match, store the + * inode number and continue looking for an exact match. + */ + cmp = dp->i_mount->m_dirnameops->compname( + sfep->name, sfep->namelen, + args->name, args->namelen); + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { + args->cmpresult = cmp; + args->inumber = xfs_dir2_sf_get_inumber(sfp, + xfs_dir2_sf_inumberp(sfep)); + if (cmp == XFS_CMP_EXACT) + return XFS_ERROR(EEXIST); } } + ASSERT(args->oknoent); + /* + * Here, we can only be doing a lookup (not a rename or replace). + * If a case-insensitive match was found earlier, return "found". + */ + if (args->cmpresult == XFS_CMP_CASE) + return XFS_ERROR(EEXIST); /* * Didn't find it. */ - ASSERT(args->oknoent); return XFS_ERROR(ENOENT); } @@ -904,24 +919,21 @@ xfs_dir2_sf_removename( * Loop over the old directory entries. * Find the one we're deleting. */ - for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); - i < sfp->hdr.count; - i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { - if (sfep->namelen == args->namelen && - sfep->name[0] == args->name[0] && - memcmp(sfep->name, args->name, args->namelen) == 0) { + for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); i < sfp->hdr.count; + i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { + if (xfs_da_compname(sfep->name, sfep->namelen, + args->name, args->namelen) == XFS_CMP_EXACT) { ASSERT(xfs_dir2_sf_get_inumber(sfp, - xfs_dir2_sf_inumberp(sfep)) == - args->inumber); + xfs_dir2_sf_inumberp(sfep)) == + args->inumber); break; } } /* * Didn't find it. */ - if (i == sfp->hdr.count) { + if (i == sfp->hdr.count) return XFS_ERROR(ENOENT); - } /* * Calculate sizes. */ @@ -1042,11 +1054,11 @@ xfs_dir2_sf_replace( */ else { for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); - i < sfp->hdr.count; - i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { - if (sfep->namelen == args->namelen && - sfep->name[0] == args->name[0] && - memcmp(args->name, sfep->name, args->namelen) == 0) { + i < sfp->hdr.count; + i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { + if (xfs_da_compname(sfep->name, sfep->namelen, + args->name, args->namelen) == + XFS_CMP_EXACT) { #if XFS_BIG_INUMS || defined(DEBUG) ino = xfs_dir2_sf_get_inumber(sfp, xfs_dir2_sf_inumberp(sfep)); Index: kern_ci/fs/xfs/xfs_mount.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_mount.h +++ kern_ci/fs/xfs/xfs_mount.h @@ -61,6 +61,7 @@ struct xfs_bmap_free; struct xfs_extdelta; struct xfs_swapext; struct xfs_mru_cache; +struct xfs_nameops; /* * Prototypes and functions for the Data Migration subsystem. @@ -312,6 +313,7 @@ typedef struct xfs_mount { __uint8_t m_inode_quiesce;/* call quiesce on new inodes. field governed by m_ilock */ __uint8_t m_sectbb_log; /* sectlog - BBSHIFT */ + const struct xfs_nameops *m_dirnameops; /* vector of dir name ops */ int m_dirblksize; /* directory block sz--bytes */ int m_dirblkfsbs; /* directory block sz--fsbs */ xfs_dablk_t m_dirdatablk; /* blockno of dir data v2 */ -- From owner-xfs@oss.sgi.com Mon Apr 21 01:36:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 01:36:57 -0700 (PDT) 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.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_14, J_CHICKENPOX_21,J_CHICKENPOX_42,J_CHICKENPOX_43,J_CHICKENPOX_45, J_CHICKENPOX_47,J_CHICKENPOX_51,J_CHICKENPOX_53,J_CHICKENPOX_61, J_CHICKENPOX_62,J_CHICKENPOX_63,J_CHICKENPOX_65,J_CHICKENPOX_66, J_CHICKENPOX_82 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 m3L8a5pi025353 for ; Mon, 21 Apr 2008 01:36:08 -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 SAA13511; Mon, 21 Apr 2008 18:36:46 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 1DE0358C4C15; Mon, 21 Apr 2008 18:36:46 +1000 (EST) Message-Id: <20080421083645.799556386@chook.melbourne.sgi.com> References: <20080421083103.433280025@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Mon, 21 Apr 2008 18:31:07 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 4/4] XFS: Unicode case-insensitive lookup implementation Content-Disposition: inline; filename=unicode_ci.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15508 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs This is the core of the case-insensitive support - supporting and enforcing UTF-8 (Unicode) filenames. All filename and user-level extended attribute names are checked for UTF-8 compliance and the hashes generated are always case-insensitive by utilising the Unicode 5.0 standard case-folding table from: http://www.unicode.org/Public/UNIDATA/CaseFolding.txt As the hash is always case-insensitive, this allows the user to mkfs.xfs the filesystem once and enable or disable (default) case-insensitive support by a mount option "-o ci". The mount option specifies which xfs_nameops.compname function to use. Also, the Unicode support is a CONFIG option so users who do not required this functionality can CONFIG it to N. As the case-folding table is stored on disk, this allows backwards and forwards compatibility and languages like Turkic to support true case-insensitivity with I and i. To create a Unicode filesystem with case-insensitive mount support, run: # mkfs.xfs -n utf8[=default|turkic] A following patch will implement Linux NLS support for XFS Unicode. Signed-off-by: Barry Naujok --- fs/xfs/Kconfig | 20 + fs/xfs/Makefile | 4 fs/xfs/linux-2.6/xfs_iops.c | 48 ++- fs/xfs/linux-2.6/xfs_linux.h | 1 fs/xfs/linux-2.6/xfs_super.c | 6 fs/xfs/linux-2.6/xfs_super.h | 7 fs/xfs/xfs_attr.c | 15 - fs/xfs/xfs_clnt.h | 2 fs/xfs/xfs_da_btree.c | 24 + fs/xfs/xfs_da_btree.h | 14 - fs/xfs/xfs_dir2.c | 32 +- fs/xfs/xfs_dir2_block.c | 4 fs/xfs/xfs_dir2_leaf.c | 2 fs/xfs/xfs_dir2_node.c | 2 fs/xfs/xfs_dir2_sf.c | 2 fs/xfs/xfs_fs.h | 27 + fs/xfs/xfs_fsops.c | 4 fs/xfs/xfs_itable.c | 2 fs/xfs/xfs_mount.c | 37 ++ fs/xfs/xfs_mount.h | 5 fs/xfs/xfs_sb.h | 23 + fs/xfs/xfs_unicode.c | 584 +++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_unicode.h | 78 +++++ fs/xfs/xfs_vfsops.c | 15 + 24 files changed, 886 insertions(+), 72 deletions(-) Index: kern_ci/fs/xfs/Kconfig =================================================================== --- kern_ci.orig/fs/xfs/Kconfig +++ kern_ci/fs/xfs/Kconfig @@ -60,6 +60,24 @@ config XFS_POSIX_ACL If you don't know what Access Control Lists are, say N. +config XFS_UNICODE + bool "XFS Unicode support" + depends on XFS_FS + help + Unicode support enforces UTF-8 filenames and user extended + attribute names. This option is required for filesystems + mkfs'ed with UTF-8 support. A Unicode filesystem guarantees + that filenames will be the same regardless of the user's + locale. For UTF-8 locales, no conversion is required. + + Unicode filesystems also allow the filesystem to be mounted with + case-insensitive lookup support with the "-o ci" mount option. + + Note: Unicode UTF-8 enforcement, like case-insensitive lookup, + is not POSIX compliant. + + If you don't require UTF-8 enforcement, say N. + config XFS_RT bool "XFS Realtime subvolume support" depends on XFS_FS @@ -95,7 +113,7 @@ config XFS_TRACE bool "XFS Tracing support (EXPERIMENTAL)" depends on XFS_FS && EXPERIMENTAL help - Say Y here to get an XFS build with activity tracing enabled. + Say Y here to get an XFS build with activity tracing enabled. Enabling this option will attach historical information to XFS inodes, buffers, certain locks, the log, the IO path, and a few other key areas within XFS. These traces can be examined Index: kern_ci/fs/xfs/Makefile =================================================================== --- kern_ci.orig/fs/xfs/Makefile +++ kern_ci/fs/xfs/Makefile @@ -30,11 +30,11 @@ obj-$(CONFIG_XFS_DMAPI) += dmapi/ xfs-$(CONFIG_XFS_RT) += xfs_rtalloc.o xfs-$(CONFIG_XFS_POSIX_ACL) += xfs_acl.o +xfs-$(CONFIG_XFS_UNICODE) += xfs_unicode.o xfs-$(CONFIG_PROC_FS) += $(XFS_LINUX)/xfs_stats.o xfs-$(CONFIG_SYSCTL) += $(XFS_LINUX)/xfs_sysctl.o xfs-$(CONFIG_COMPAT) += $(XFS_LINUX)/xfs_ioctl32.o - xfs-y += xfs_alloc.o \ xfs_alloc_btree.o \ xfs_attr.o \ @@ -97,7 +97,7 @@ xfs-y += $(addprefix $(XFS_LINUX)/, \ xfs_lrw.o \ xfs_super.o \ xfs_vnode.o \ - xfs_ksyms.o) + xfs_ksyms.o) # Objects in support/ xfs-y += $(addprefix support/, \ Index: kern_ci/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_iops.c +++ kern_ci/fs/xfs/linux-2.6/xfs_iops.c @@ -49,6 +49,7 @@ #include "xfs_buf_item.h" #include "xfs_utils.h" #include "xfs_vnodeops.h" +#include "xfs_unicode.h" #include #include @@ -241,13 +242,18 @@ xfs_init_security( return error; } -static void +static int xfs_dentry_to_name( + struct inode *dir, struct xfs_name *namep, struct dentry *dentry) { namep->name = dentry->d_name.name; namep->len = dentry->d_name.len; + + if (xfs_sb_version_hasunicode(&XFS_M(dir->i_sb)->m_sb)) + return xfs_unicode_validate(namep); + return 0; } STATIC void @@ -264,7 +270,7 @@ xfs_cleanup_inode( * xfs_init_security we must back out. * ENOSPC can hit here, among other things. */ - xfs_dentry_to_name(&teardown, dentry); + xfs_dentry_to_name(dir, &teardown, dentry); if (S_ISDIR(mode)) xfs_rmdir(XFS_I(dir), &teardown, XFS_I(inode)); @@ -304,7 +310,9 @@ xfs_vn_mknod( } } - xfs_dentry_to_name(&name, dentry); + error = xfs_dentry_to_name(dir, &name, dentry); + if (unlikely(error)) + goto out_free_acl; if (IS_POSIXACL(dir) && !default_acl) mode &= ~current->fs->umask; @@ -390,7 +398,10 @@ xfs_vn_lookup( if (dentry->d_name.len >= MAXNAMELEN) return ERR_PTR(-ENAMETOOLONG); - xfs_dentry_to_name(&name, dentry); + error = xfs_dentry_to_name(dir, &name, dentry); + if (unlikely(error)) + return ERR_PTR(-error); + error = xfs_lookup(XFS_I(dir), &name, &cip, NULL); if (unlikely(error)) { if (unlikely(error != ENOENT)) @@ -516,7 +527,10 @@ xfs_vn_ci_lookup( if (dentry->d_name.len >= MAXNAMELEN) return ERR_PTR(-ENAMETOOLONG); - xfs_dentry_to_name(&name, dentry); + error = xfs_dentry_to_name(dir, &name, dentry); + if (unlikely(error)) + return ERR_PTR(-error); + error = xfs_lookup(XFS_I(dir), &name, &ip, &ci_match); if (unlikely(error)) { if (unlikely(error != ENOENT)) @@ -546,7 +560,9 @@ xfs_vn_link( int error; inode = old_dentry->d_inode; - xfs_dentry_to_name(&name, dentry); + error = xfs_dentry_to_name(dir, &name, dentry); + if (unlikely(error)) + return -error; igrab(inode); error = xfs_link(XFS_I(dir), XFS_I(inode), &name); @@ -571,7 +587,9 @@ xfs_vn_unlink( int error; inode = dentry->d_inode; - xfs_dentry_to_name(&name, dentry); + error = xfs_dentry_to_name(dir, &name, dentry); + if (unlikely(error)) + return -error; error = xfs_remove(XFS_I(dir), &name, XFS_I(inode)); if (likely(!error)) { @@ -595,7 +613,9 @@ xfs_vn_symlink( mode = S_IFLNK | (irix_symlink_mode ? 0777 & ~current->fs->umask : S_IRWXUGO); - xfs_dentry_to_name(&name, dentry); + error = xfs_dentry_to_name(dir, &name, dentry); + if (unlikely(error)) + goto out; error = xfs_symlink(XFS_I(dir), &name, symname, mode, &cip, NULL); if (unlikely(error)) @@ -627,7 +647,9 @@ xfs_vn_rmdir( struct xfs_name name; int error; - xfs_dentry_to_name(&name, dentry); + error = xfs_dentry_to_name(dir, &name, dentry); + if (unlikely(error)) + return -error; error = xfs_rmdir(XFS_I(dir), &name, XFS_I(inode)); if (likely(!error)) { @@ -649,8 +671,12 @@ xfs_vn_rename( struct xfs_name nname; int error; - xfs_dentry_to_name(&oname, odentry); - xfs_dentry_to_name(&nname, ndentry); + error = xfs_dentry_to_name(odir, &oname, odentry); + if (unlikely(error)) + return -error; + error = xfs_dentry_to_name(ndir, &nname, ndentry); + if (unlikely(error)) + return -error; error = xfs_rename(XFS_I(odir), &oname, XFS_I(odentry->d_inode), XFS_I(ndir), &nname, new_inode ? Index: kern_ci/fs/xfs/linux-2.6/xfs_linux.h =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_linux.h +++ kern_ci/fs/xfs/linux-2.6/xfs_linux.h @@ -76,6 +76,7 @@ #include #include #include +#include #include #include Index: kern_ci/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_super.c +++ kern_ci/fs/xfs/linux-2.6/xfs_super.c @@ -124,6 +124,7 @@ xfs_args_allocate( #define MNTOPT_ATTR2 "attr2" /* do use attr2 attribute format */ #define MNTOPT_NOATTR2 "noattr2" /* do not use attr2 attribute format */ #define MNTOPT_FILESTREAM "filestreams" /* use filestreams allocator */ +#define MNTOPT_CILOOKUP "ci" /* case-insensitive dir lookup */ #define MNTOPT_QUOTA "quota" /* disk quotas (user) */ #define MNTOPT_NOQUOTA "noquota" /* no quotas */ #define MNTOPT_USRQUOTA "usrquota" /* user quota enabled */ @@ -318,6 +319,8 @@ xfs_parseargs( args->flags &= ~XFSMNT_ATTR2; } else if (!strcmp(this_char, MNTOPT_FILESTREAM)) { args->flags2 |= XFSMNT2_FILESTREAMS; + } else if (!strcmp(this_char, MNTOPT_CILOOKUP)) { + args->flags2 |= XFSMNT2_CILOOKUP; } else if (!strcmp(this_char, MNTOPT_NOQUOTA)) { args->flags &= ~(XFSMNT_UQUOTAENF|XFSMNT_UQUOTA); args->flags &= ~(XFSMNT_GQUOTAENF|XFSMNT_GQUOTA); @@ -458,6 +461,7 @@ xfs_showargs( { XFS_MOUNT_OSYNCISOSYNC, "," MNTOPT_OSYNCISOSYNC }, { XFS_MOUNT_ATTR2, "," MNTOPT_ATTR2 }, { XFS_MOUNT_FILESTREAMS, "," MNTOPT_FILESTREAM }, + { XFS_MOUNT_CILOOKUP, "," MNTOPT_CILOOKUP }, { XFS_MOUNT_DMAPI, "," MNTOPT_DMAPI }, { XFS_MOUNT_GRPID, "," MNTOPT_GRPID }, { 0, NULL } @@ -566,7 +570,7 @@ xfs_set_inodeops( inode->i_mapping->a_ops = &xfs_address_space_operations; break; case S_IFDIR: - if (xfs_sb_version_hasoldci(&XFS_M(inode->i_sb)->m_sb)) + if (XFS_M(inode->i_sb)->m_flags & XFS_MOUNT_CILOOKUP) inode->i_op = &xfs_dir_ci_inode_operations; else inode->i_op = &xfs_dir_inode_operations; Index: kern_ci/fs/xfs/linux-2.6/xfs_super.h =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_super.h +++ kern_ci/fs/xfs/linux-2.6/xfs_super.h @@ -30,6 +30,12 @@ #define XFS_SECURITY_STRING "security attributes, " +#ifdef CONFIG_XFS_UNICODE +# define XFS_UNICODE_STRING "Unicode, " +#else +# define XFS_UNICODE_STRING +#endif + #ifdef CONFIG_XFS_RT # define XFS_REALTIME_STRING "realtime, " #else @@ -60,6 +66,7 @@ #define XFS_BUILD_OPTIONS XFS_ACL_STRING \ XFS_SECURITY_STRING \ + XFS_UNICODE_STRING \ XFS_REALTIME_STRING \ XFS_BIGFS_STRING \ XFS_TRACE_STRING \ Index: kern_ci/fs/xfs/xfs_attr.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_attr.c +++ kern_ci/fs/xfs/xfs_attr.c @@ -50,6 +50,7 @@ #include "xfs_acl.h" #include "xfs_rw.h" #include "xfs_vnodeops.h" +#include "xfs_unicode.h" /* * xfs_attr.c @@ -104,7 +105,9 @@ ktrace_t *xfs_attr_trace_buf; STATIC int xfs_attr_name_to_xname( struct xfs_name *xname, - const char *aname) + const char *aname, + xfs_inode_t *ip, + int flags) { if (!aname) return EINVAL; @@ -113,6 +116,10 @@ xfs_attr_name_to_xname( if (xname->len >= MAXNAMELEN) return EFAULT; /* match IRIX behaviour */ + /* only enforce unicode on user namespace attr names */ + if (xfs_sb_version_hasunicode(&ip->i_mount->m_sb) && + (flags & (ATTR_ROOT | ATTR_SECURE)) == 0) + return xfs_unicode_validate(xname); return 0; } @@ -186,7 +193,7 @@ xfs_attr_get( if (XFS_FORCED_SHUTDOWN(ip->i_mount)) return(EIO); - error = xfs_attr_name_to_xname(&xname, name); + error = xfs_attr_name_to_xname(&xname, name, ip, flags); if (error) return error; @@ -449,7 +456,7 @@ xfs_attr_set( if (XFS_FORCED_SHUTDOWN(dp->i_mount)) return (EIO); - error = xfs_attr_name_to_xname(&xname, name); + error = xfs_attr_name_to_xname(&xname, name, dp, flags); if (error) return error; @@ -596,7 +603,7 @@ xfs_attr_remove( if (XFS_FORCED_SHUTDOWN(dp->i_mount)) return (EIO); - error = xfs_attr_name_to_xname(&xname, name); + error = xfs_attr_name_to_xname(&xname, name, dp, flags); if (error) return error; Index: kern_ci/fs/xfs/xfs_clnt.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_clnt.h +++ kern_ci/fs/xfs/xfs_clnt.h @@ -100,5 +100,7 @@ struct xfs_mount_args { * I/O size in stat(2) */ #define XFSMNT2_FILESTREAMS 0x00000002 /* enable the filestreams * allocator */ +#define XFSMNT2_CILOOKUP 0x00000004 /* enable case-insensitive + * filename lookup */ #endif /* __XFS_CLNT_H__ */ Index: kern_ci/fs/xfs/xfs_da_btree.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.c +++ kern_ci/fs/xfs/xfs_da_btree.c @@ -1530,23 +1530,29 @@ xfs_da_hashname(const uchar_t *name, int } } -xfs_dacmp_t -xfs_da_compname(const char *name1, int len1, const char *name2, int len2) -{ - return (len1 == len2 && memcmp(name1, name2, len1) == 0) ? - XFS_CMP_EXACT : XFS_CMP_DIFFERENT; -} - -static xfs_dahash_t +STATIC xfs_dahash_t xfs_default_hashname( + struct xfs_inode *inode, struct xfs_name *name) { return xfs_da_hashname(name->name, name->len); } +STATIC xfs_dacmp_t +xfs_default_compname( + struct xfs_inode *inode, + const char *name1, + int len1, + const char *name2, + int len2) +{ + return xfs_da_compname(name1, len1, name2, len2); +} + + const struct xfs_nameops xfs_default_nameops = { .hashname = xfs_default_hashname, - .compname = xfs_da_compname + .compname = xfs_default_compname }; /* Index: kern_ci/fs/xfs/xfs_da_btree.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.h +++ kern_ci/fs/xfs/xfs_da_btree.h @@ -215,8 +215,9 @@ typedef struct xfs_da_state { * Name ops for directory and/or attr name operations */ struct xfs_nameops { - xfs_dahash_t (*hashname)(struct xfs_name *); - xfs_dacmp_t (*compname)(const char *, int, const char *, int); + xfs_dahash_t (*hashname)(struct xfs_inode *, struct xfs_name *); + xfs_dacmp_t (*compname)(struct xfs_inode *, const char *, int, + const char *, int); }; @@ -267,8 +268,13 @@ int xfs_da_shrink_inode(xfs_da_args_t *a xfs_dabuf_t *dead_buf); uint xfs_da_hashname(const uchar_t *name_string, int name_length); -xfs_dacmp_t xfs_da_compname(const char *name1, int len1, - const char *name2, int len2); + +static inline xfs_dacmp_t +xfs_da_compname(const char *name1, int len1, const char *name2, int len2) +{ + return (len1 == len2 && memcmp(name1, name2, len1) == 0) ? + XFS_CMP_EXACT : XFS_CMP_DIFFERENT; +} xfs_da_state_t *xfs_da_state_alloc(void); Index: kern_ci/fs/xfs/xfs_dir2.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -43,12 +43,15 @@ #include "xfs_dir2_trace.h" #include "xfs_error.h" #include "xfs_vnodeops.h" +#include "xfs_unicode.h" struct xfs_name xfs_name_dotdot = {"..", 2}; kmem_zone_t *xfs_name_zone; extern const struct xfs_nameops xfs_default_nameops; +extern const struct xfs_nameops xfs_unicode_nameops; +extern const struct xfs_nameops xfs_unicode_ci_nameops; /* * V1/OLDCI case-insensitive support for directories that was used in IRIX. @@ -57,6 +60,7 @@ extern const struct xfs_nameops xfs_defa */ STATIC xfs_dahash_t xfs_ascii_ci_hashname( + struct xfs_inode *inode, struct xfs_name *name) { xfs_dahash_t hash; @@ -70,6 +74,7 @@ xfs_ascii_ci_hashname( STATIC xfs_dacmp_t xfs_ascii_ci_compname( + struct xfs_inode *inode, const char *name1, int len1, const char *name2, @@ -93,7 +98,7 @@ xfs_ascii_ci_compname( return result; } -static struct xfs_nameops xfs_ascii_ci_nameops = { +static const struct xfs_nameops xfs_ascii_ci_nameops = { .hashname = xfs_ascii_ci_hashname, .compname = xfs_ascii_ci_compname, }; @@ -117,10 +122,17 @@ xfs_dir_mount( (mp->m_dirblksize - (uint)sizeof(xfs_da_node_hdr_t)) / (uint)sizeof(xfs_da_node_entry_t); mp->m_dir_magicpct = (mp->m_dirblksize * 37) / 100; - if (xfs_sb_version_hasoldci(&mp->m_sb)) - mp->m_dirnameops = &xfs_ascii_ci_nameops; - else - mp->m_dirnameops = &xfs_default_nameops; + if (xfs_sb_version_hasunicode(&mp->m_sb)) { + if (mp->m_flags & XFS_MOUNT_CILOOKUP) + mp->m_dirnameops = &xfs_unicode_ci_nameops; + else + mp->m_dirnameops = &xfs_unicode_nameops; + } else { + if (mp->m_flags & XFS_MOUNT_CILOOKUP) + mp->m_dirnameops = &xfs_ascii_ci_nameops; + else + mp->m_dirnameops = &xfs_default_nameops; + } } /* @@ -220,7 +232,7 @@ xfs_dir_createname( args.name = name->name; args.namelen = name->len; - args.hashval = dp->i_mount->m_dirnameops->hashname(name); + args.hashval = dp->i_mount->m_dirnameops->hashname(dp, name); args.inumber = inum; args.dp = dp; args.firstblock = first; @@ -269,7 +281,7 @@ xfs_dir_lookup( args.name = name->name; args.namelen = name->len; - args.hashval = dp->i_mount->m_dirnameops->hashname(name); + args.hashval = dp->i_mount->m_dirnameops->hashname(dp, name); args.dp = dp; args.whichfork = XFS_DATA_FORK; args.trans = tp; @@ -332,7 +344,7 @@ xfs_dir_removename( args.name = name->name; args.namelen = name->len; - args.hashval = dp->i_mount->m_dirnameops->hashname(name); + args.hashval = dp->i_mount->m_dirnameops->hashname(dp, name); args.inumber = ino; args.dp = dp; args.firstblock = first; @@ -415,7 +427,7 @@ xfs_dir_replace( args.name = name->name; args.namelen = name->len; - args.hashval = dp->i_mount->m_dirnameops->hashname(name); + args.hashval = dp->i_mount->m_dirnameops->hashname(dp, name); args.inumber = inum; args.dp = dp; args.firstblock = first; @@ -463,7 +475,7 @@ xfs_dir_canenter( args.name = name->name; args.namelen = name->len; - args.hashval = dp->i_mount->m_dirnameops->hashname(name); + args.hashval = dp->i_mount->m_dirnameops->hashname(dp, name); args.dp = dp; args.whichfork = XFS_DATA_FORK; args.trans = tp; Index: kern_ci/fs/xfs/xfs_dir2_block.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_block.c +++ kern_ci/fs/xfs/xfs_dir2_block.c @@ -709,7 +709,7 @@ xfs_dir2_block_lookup_int( * and buffer. If it's the first case-insensitive match, store * the index and buffer and continue looking for an exact match. */ - cmp = mp->m_dirnameops->compname(dep->name, dep->namelen, + cmp = mp->m_dirnameops->compname(dp, dep->name, dep->namelen, args->name, args->namelen); if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { args->cmpresult = cmp; @@ -1211,7 +1211,7 @@ xfs_dir2_sf_to_block( name.name = sfep->name; name.len = sfep->namelen; blp[2 + i].hashval = cpu_to_be32(mp->m_dirnameops-> - hashname(&name)); + hashname(dp, &name)); blp[2 + i].address = cpu_to_be32(xfs_dir2_byte_to_dataptr(mp, (char *)dep - (char *)block)); offset = (int)((char *)(tagp + 1) - (char *)block); Index: kern_ci/fs/xfs/xfs_dir2_leaf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_leaf.c +++ kern_ci/fs/xfs/xfs_dir2_leaf.c @@ -1404,7 +1404,7 @@ xfs_dir2_leaf_lookup_int( * and buffer. If it's the first case-insensitive match, store * the index and buffer and continue looking for an exact match. */ - cmp = mp->m_dirnameops->compname(dep->name, dep->namelen, + cmp = mp->m_dirnameops->compname(dp, dep->name, dep->namelen, args->name, args->namelen); if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { args->cmpresult = cmp; Index: kern_ci/fs/xfs/xfs_dir2_node.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_node.c +++ kern_ci/fs/xfs/xfs_dir2_node.c @@ -626,7 +626,7 @@ xfs_dir2_leafn_lookup_for_entry( * EEXIST immediately. If it's the first case-insensitive * match, store the inode number and continue looking. */ - cmp = mp->m_dirnameops->compname(dep->name, dep->namelen, + cmp = mp->m_dirnameops->compname(dp, dep->name, dep->namelen, args->name, args->namelen); if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { args->cmpresult = cmp; Index: kern_ci/fs/xfs/xfs_dir2_sf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_sf.c +++ kern_ci/fs/xfs/xfs_dir2_sf.c @@ -861,7 +861,7 @@ xfs_dir2_sf_lookup( * number. If it's the first case-insensitive match, store the * inode number and continue looking for an exact match. */ - cmp = dp->i_mount->m_dirnameops->compname( + cmp = dp->i_mount->m_dirnameops->compname(dp, sfep->name, sfep->namelen, args->name, args->namelen); if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { Index: kern_ci/fs/xfs/xfs_fs.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_fs.h +++ kern_ci/fs/xfs/xfs_fs.h @@ -228,19 +228,20 @@ typedef struct xfs_fsop_resblks { #define XFS_FSOP_GEOM_VERSION 0 -#define XFS_FSOP_GEOM_FLAGS_ATTR 0x0001 /* attributes in use */ -#define XFS_FSOP_GEOM_FLAGS_NLINK 0x0002 /* 32-bit nlink values */ -#define XFS_FSOP_GEOM_FLAGS_QUOTA 0x0004 /* quotas enabled */ -#define XFS_FSOP_GEOM_FLAGS_IALIGN 0x0008 /* inode alignment */ -#define XFS_FSOP_GEOM_FLAGS_DALIGN 0x0010 /* large data alignment */ -#define XFS_FSOP_GEOM_FLAGS_SHARED 0x0020 /* read-only shared */ -#define XFS_FSOP_GEOM_FLAGS_EXTFLG 0x0040 /* special extent flag */ -#define XFS_FSOP_GEOM_FLAGS_DIRV2 0x0080 /* directory version 2 */ -#define XFS_FSOP_GEOM_FLAGS_LOGV2 0x0100 /* log format version 2 */ -#define XFS_FSOP_GEOM_FLAGS_SECTOR 0x0200 /* sector sizes >1BB */ -#define XFS_FSOP_GEOM_FLAGS_ATTR2 0x0400 /* inline attributes rework */ -#define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x1000 /* ASCII only CI names */ -#define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x4000 /* lazy superblock counters */ +#define XFS_FSOP_GEOM_FLAGS_ATTR 0x00000001 /* attributes in use */ +#define XFS_FSOP_GEOM_FLAGS_NLINK 0x00000002 /* 32-bit nlink values */ +#define XFS_FSOP_GEOM_FLAGS_QUOTA 0x00000004 /* quotas enabled */ +#define XFS_FSOP_GEOM_FLAGS_IALIGN 0x00000008 /* inode alignment */ +#define XFS_FSOP_GEOM_FLAGS_DALIGN 0x00000010 /* large data alignment */ +#define XFS_FSOP_GEOM_FLAGS_SHARED 0x00000020 /* read-only shared */ +#define XFS_FSOP_GEOM_FLAGS_EXTFLG 0x00000040 /* special extent flag */ +#define XFS_FSOP_GEOM_FLAGS_DIRV2 0x00000080 /* directory version 2 */ +#define XFS_FSOP_GEOM_FLAGS_LOGV2 0x00000100 /* log format version 2 */ +#define XFS_FSOP_GEOM_FLAGS_SECTOR 0x00000200 /* sector sizes >1BB */ +#define XFS_FSOP_GEOM_FLAGS_ATTR2 0x00000400 /* inline attr rework */ +#define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x00001000 /* ASCII only CI names */ +#define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x00004000 /* lazy superblock cntrs */ +#define XFS_FSOP_GEOM_FLAGS_UNICODE 0x00010000 /* unicode filenames */ /* Index: kern_ci/fs/xfs/xfs_fsops.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_fsops.c +++ kern_ci/fs/xfs/xfs_fsops.c @@ -100,7 +100,9 @@ xfs_fs_geometry( (xfs_sb_version_haslazysbcount(&mp->m_sb) ? XFS_FSOP_GEOM_FLAGS_LAZYSB : 0) | (xfs_sb_version_hasattr2(&mp->m_sb) ? - XFS_FSOP_GEOM_FLAGS_ATTR2 : 0); + XFS_FSOP_GEOM_FLAGS_ATTR2 : 0) | + (xfs_sb_version_hasunicode(&mp->m_sb) ? + XFS_FSOP_GEOM_FLAGS_UNICODE : 0); geo->logsectsize = xfs_sb_version_hassector(&mp->m_sb) ? mp->m_sb.sb_logsectsize : BBSIZE; geo->rtsectsize = mp->m_sb.sb_blocksize; Index: kern_ci/fs/xfs/xfs_itable.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_itable.c +++ kern_ci/fs/xfs/xfs_itable.c @@ -45,6 +45,8 @@ xfs_internal_inum( xfs_ino_t ino) { return (ino == mp->m_sb.sb_rbmino || ino == mp->m_sb.sb_rsumino || + (xfs_sb_version_hasunicode(&mp->m_sb) && + ino == mp->m_sb.sb_cftino) || (xfs_sb_version_hasquota(&mp->m_sb) && (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino))); } Index: kern_ci/fs/xfs/xfs_mount.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_mount.c +++ kern_ci/fs/xfs/xfs_mount.c @@ -44,6 +44,7 @@ #include "xfs_quota.h" #include "xfs_fsops.h" #include "xfs_utils.h" +#include "xfs_unicode.h" STATIC int xfs_mount_log_sb(xfs_mount_t *, __int64_t); STATIC int xfs_uuid_mount(xfs_mount_t *); @@ -121,6 +122,7 @@ static const struct { { offsetof(xfs_sb_t, sb_logsunit), 0 }, { offsetof(xfs_sb_t, sb_features2), 0 }, { offsetof(xfs_sb_t, sb_bad_features2), 0 }, + { offsetof(xfs_sb_t, sb_cftino), 0 }, { sizeof(xfs_sb_t), 0 } }; @@ -167,6 +169,7 @@ xfs_mount_free( sizeof(xfs_perag_t) * mp->m_sb.sb_agcount); } + xfs_unicode_free_cft(mp->m_cft); spinlock_destroy(&mp->m_ail_lock); spinlock_destroy(&mp->m_sb_lock); mutex_destroy(&mp->m_ilock); @@ -320,7 +323,18 @@ xfs_mount_validate_sb( PAGE_SIZE); return XFS_ERROR(ENOSYS); } - +#ifndef CONFIG_XFS_UNICODE + /* + * If Unicode config is set to N, don't mount Unicode filesystems. + */ + if (xfs_sb_version_hasmorebits(sbp) && + (sbp->sb_features2 & XFS_SB_VERSION2_UNICODEBIT)) { + xfs_fs_mount_cmn_err(flags, + "file system is marked as Unicode but support is " + "not enabled in the driver."); + return XFS_ERROR(ENOSYS); + } +#endif return 0; } @@ -452,6 +466,7 @@ xfs_sb_from_disk( to->sb_logsunit = be32_to_cpu(from->sb_logsunit); to->sb_features2 = be32_to_cpu(from->sb_features2); to->sb_bad_features2 = be32_to_cpu(from->sb_bad_features2); + to->sb_cftino = be64_to_cpu(from->sb_cftino); } /* @@ -1187,6 +1202,15 @@ xfs_mountfs( } /* + * Load in unicode case folding table from disk + */ + error = xfs_unicode_read_cft(mp); + if (error) { + cmn_err(CE_WARN, "XFS: failed to read case folding table"); + goto error4; + } + + /* * If fs is not mounted readonly, then update the superblock changes. */ if (update_flags && !(mp->m_flags & XFS_MOUNT_RDONLY)) { @@ -1244,14 +1268,15 @@ xfs_mountfs( return 0; - error4: +error4: /* * Free up the root inode. */ IRELE(rip); - error3: + xfs_unicode_free_cft(mp->m_cft); +error3: xfs_log_unmount_dealloc(mp); - error2: +error2: for (agno = 0; agno < sbp->sb_agcount; agno++) if (mp->m_perag[agno].pagb_list) kmem_free(mp->m_perag[agno].pagb_list, @@ -1259,7 +1284,7 @@ xfs_mountfs( kmem_free(mp->m_perag, sbp->sb_agcount * sizeof(xfs_perag_t)); mp->m_perag = NULL; /* FALLTHROUGH */ - error1: +error1: if (uuid_mounted) xfs_uuid_unmount(mp); xfs_freesb(mp); @@ -1985,7 +2010,7 @@ xfs_mount_log_sb( * 3. accurate counter sync requires m_sb_lock + per cpu locks * 4. modifying per-cpu counters requires holding per-cpu lock * 5. modifying global counters requires holding m_sb_lock - * 6. enabling or disabling a counter requires holding the m_sb_lock + * 6. enabling or disabling a counter requires holding the m_sb_lock * and _none_ of the per-cpu locks. * * Disabled counters are only ever re-enabled by a balance operation Index: kern_ci/fs/xfs/xfs_mount.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_mount.h +++ kern_ci/fs/xfs/xfs_mount.h @@ -62,6 +62,7 @@ struct xfs_extdelta; struct xfs_swapext; struct xfs_mru_cache; struct xfs_nameops; +struct xfs_cft; /* * Prototypes and functions for the Data Migration subsystem. @@ -314,6 +315,7 @@ typedef struct xfs_mount { field governed by m_ilock */ __uint8_t m_sectbb_log; /* sectlog - BBSHIFT */ const struct xfs_nameops *m_dirnameops; /* vector of dir name ops */ + struct xfs_cft *m_cft; /* unicode case folding table */ int m_dirblksize; /* directory block sz--bytes */ int m_dirblkfsbs; /* directory block sz--fsbs */ xfs_dablk_t m_dirdatablk; /* blockno of dir data v2 */ @@ -379,7 +381,8 @@ typedef struct xfs_mount { counters */ #define XFS_MOUNT_FILESTREAMS (1ULL << 24) /* enable the filestreams allocator */ - +#define XFS_MOUNT_CILOOKUP (1ULL << 25) /* enable case-insensitive + file lookup */ /* * Default minimum read and write sizes. Index: kern_ci/fs/xfs/xfs_sb.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_sb.h +++ kern_ci/fs/xfs/xfs_sb.h @@ -79,10 +79,12 @@ struct xfs_mount; #define XFS_SB_VERSION2_LAZYSBCOUNTBIT 0x00000002 /* Superblk counters */ #define XFS_SB_VERSION2_RESERVED4BIT 0x00000004 #define XFS_SB_VERSION2_ATTR2BIT 0x00000008 /* Inline attr rework */ +#define XFS_SB_VERSION2_UNICODEBIT 0x00000020 /* Unicode names */ #define XFS_SB_VERSION2_OKREALFBITS \ (XFS_SB_VERSION2_LAZYSBCOUNTBIT | \ - XFS_SB_VERSION2_ATTR2BIT) + XFS_SB_VERSION2_ATTR2BIT | \ + XFS_SB_VERSION2_UNICODEBIT) #define XFS_SB_VERSION2_OKSASHFBITS \ (0) #define XFS_SB_VERSION2_OKREALBITS \ @@ -156,6 +158,7 @@ typedef struct xfs_sb { * it for anything else. */ __uint32_t sb_bad_features2; + xfs_ino_t sb_cftino; /* unicode case folding table inode */ /* must be padded to 64 bit alignment */ } xfs_sb_t; @@ -225,7 +228,8 @@ typedef struct xfs_dsb { * for features2 bits. Easiest just to mark it bad and not use * it for anything else. */ - __be32 sb_bad_features2; + __be32 sb_bad_features2; + __be64 sb_cftino; /* unicode case folding table inode */ /* must be padded to 64 bit alignment */ } xfs_dsb_t; @@ -246,7 +250,7 @@ typedef enum { XFS_SBS_GQUOTINO, XFS_SBS_QFLAGS, XFS_SBS_FLAGS, XFS_SBS_SHARED_VN, XFS_SBS_INOALIGNMT, XFS_SBS_UNIT, XFS_SBS_WIDTH, XFS_SBS_DIRBLKLOG, XFS_SBS_LOGSECTLOG, XFS_SBS_LOGSECTSIZE, XFS_SBS_LOGSUNIT, - XFS_SBS_FEATURES2, XFS_SBS_BAD_FEATURES2, + XFS_SBS_FEATURES2, XFS_SBS_BAD_FEATURES2, XFS_SBS_CFTINO, XFS_SBS_FIELDCOUNT } xfs_sb_field_t; @@ -272,6 +276,7 @@ typedef enum { #define XFS_SB_FDBLOCKS XFS_SB_MVAL(FDBLOCKS) #define XFS_SB_FEATURES2 XFS_SB_MVAL(FEATURES2) #define XFS_SB_BAD_FEATURES2 XFS_SB_MVAL(BAD_FEATURES2) +#define XFS_SB_CFTINO XFS_SB_MVAL(CFTINO) #define XFS_SB_NUM_BITS ((int)XFS_SBS_FIELDCOUNT) #define XFS_SB_ALL_BITS ((1LL << XFS_SB_NUM_BITS) - 1) #define XFS_SB_MOD_BITS \ @@ -279,7 +284,7 @@ typedef enum { XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | XFS_SB_GQUOTINO | \ XFS_SB_QFLAGS | XFS_SB_SHARED_VN | XFS_SB_UNIT | XFS_SB_WIDTH | \ XFS_SB_ICOUNT | XFS_SB_IFREE | XFS_SB_FDBLOCKS | XFS_SB_FEATURES2 | \ - XFS_SB_BAD_FEATURES2) + XFS_SB_BAD_FEATURES2 | XFS_SB_CFTINO) /* @@ -481,6 +486,16 @@ static inline void xfs_sb_version_addatt ((sbp)->sb_features2 | XFS_SB_VERSION2_ATTR2BIT))); } +#ifdef CONFIG_XFS_UNICODE +static inline int xfs_sb_version_hasunicode(xfs_sb_t *sbp) +{ + return (xfs_sb_version_hasmorebits(sbp) && \ + ((sbp)->sb_features2 & XFS_SB_VERSION2_UNICODEBIT)); +} +#else +static inline int xfs_sb_version_hasunicode(xfs_sb_t *sbp) { return 0; } +#endif + /* * end of superblock version macros */ Index: kern_ci/fs/xfs/xfs_unicode.c =================================================================== --- /dev/null +++ kern_ci/fs/xfs/xfs_unicode.c @@ -0,0 +1,584 @@ +/* + * Copyright (c) 2007-2008 Silicon Graphics, Inc. + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "xfs.h" +#include "xfs_fs.h" +#include "xfs_bit.h" +#include "xfs_log.h" +#include "xfs_inum.h" +#include "xfs_clnt.h" +#include "xfs_trans.h" +#include "xfs_sb.h" +#include "xfs_ag.h" +#include "xfs_da_btree.h" +#include "xfs_dir2.h" +#include "xfs_alloc.h" +#include "xfs_dmapi.h" +#include "xfs_mount.h" +#include "xfs_bmap_btree.h" +#include "xfs_alloc_btree.h" +#include "xfs_ialloc_btree.h" +#include "xfs_dir2_sf.h" +#include "xfs_attr_sf.h" +#include "xfs_dinode.h" +#include "xfs_inode.h" +#include "xfs_btree.h" +#include "xfs_ialloc.h" +#include "xfs_itable.h" +#include "xfs_rtalloc.h" +#include "xfs_error.h" +#include "xfs_bmap.h" +#include "xfs_rw.h" +#include "xfs_unicode.h" + +/* + * XFS Unicode performs case folding for hash generation for the on-disk + * directory information using the Unicode 5.0 standard locale independent + * case-folding table http://www.unicode.org/Public/UNIDATA/CaseFolding.txt + * + * More info also at http://unicode.org/reports/tr21/tr21-5.html + * + * XFS Unicode only supports the Basic Multilingual Plane (BMP) of the + * Unicode standard. The other planes currently are only used for + * ancient/obsolete languages and various symbols which aren't really + * appropriate for filenames (and it keeps the implementation simpler, + * especially as wchar_t can be only 2 bytes). + * + * As we don't need to map every character in the entire BMP, we map chunks + * in 256 character blobs that contain characters to be case-folded. At the + * moment, only 14 of these chunks have characters that are case-folded. + * + * So, the first 256 characters in table encodes the most significant byte + * to the folded character in the table. If it is zero, then there is no + * folding for that character. + * -> folded char = table[table[char / 256] + char % 256] + * + * As this table uses a 1:n mapping for folding characters, and n is + * currently no more than 3, MAX_FOLD_CHARS is set to 4 to support minor + * changes to the table that may occur in future versions of unicode. + * + * As XFS Unicode only supports the BMP, UTF-16 surrogates U+D800 to U+DFFF + * are currently invalid, but reserved for possible support beyond the BMP. + * The private use area U+E000 to U+F8FF is also invalid for filenames. + * + * As U+E000 to U+F8FF will never be used for filenames, we can use the + * space from U+E000 to U+EFFF to refer to the 1:n mapping on-disk. + * So, this range on-disk is used to specify the addition multi-character + * case-folding conversions. Each value of "n" in the 1:n format can + * store up to 1024 sequences, and currently up to 4 tables. As mentioned + * above, only two additional tables currently exist - 1:2 and 1:3. The + * lower 10 bits is the index to the multi-character folding in each of + * these tables (byte index = (char & 0x3ff) * n * 2). + * + * So, in summary, the following Unicode ranges have special purposes: + * U+D800 - U+DFFF : UTF-16 surrogates - unsupported + * U+E000 - U+E3FF : index to a two character sequence + * U+E400 - U+E7FF : index to a three character sequence + * U+E800 - U+EBFF : index to a four character sequence (currently none) + * U+EC00 - U+EFFF : index to a five character sequence (unsupported ATM) + * U+F000 - U+F8FF : reserved for future use + * + * Like the other data structures in XFS, the 2-byte (UTF-16) casefolding + * characters are in big-endian format. + */ + +#define CHARS_PER_CHUNK 256 /* table chunk size */ + +#define MAX_FOLD_CHARS 4 /* maximum single sequence supported (1:n) */ + +/* multi-character sequence encoding values */ +#define MC_MASK 0xf000 /* bits in character to test for MC sequence */ +#define MC_MAGIC 0xe000 /* if masked value is this, then MC sequence */ +#define MC_PER_TABLE 1024 /* max # of MC chars per sequence table */ + +static __uint16_t * +xfs_cft_ptr( + const struct xfs_cft *cft, + int index) +{ + return (__uint16_t *)((char *)cft + cft->table_offset[index]); +} + +/* + * xfs_casefold takes the 2-byte unicode character and converts it into a + * locale independent case folded character sequence. Returns the number of + * characters in the folded sequence. + */ +static int +xfs_casefold( + const struct xfs_cft *cft, + __uint16_t c, + __uint16_t *fc) +{ + __uint16_t *table = xfs_cft_ptr(cft, 0); + __uint16_t tmp = table[c / CHARS_PER_CHUNK]; + int n; + + if (!tmp) { /* if no table index, no mapping */ + *fc = c; + return 1; + } + tmp = table[tmp + c % CHARS_PER_CHUNK]; + if ((tmp & MC_MASK) != MC_MAGIC) { + /* 1:1 character mapping if not U+Exxx */ + *fc = tmp; + return 1; + } + /* 1:n character mapping if tmp is U+Exxx */ + n = ((tmp & ~MC_MASK) / MC_PER_TABLE) + 2; + ASSERT(n < cft->num_tables); + table = xfs_cft_ptr(cft, n - 1) + ((tmp % MC_PER_TABLE) * n); + + memcpy(fc, table, sizeof(__uint16_t) * n); + + return n; +} + +/* + * xfs_utf8_casefold converts a single UTF-8 sequence into a wide character + * and calls xfs_casefold to convert that character into a case-folded + * sequence for comparing and hash generation. + */ +static int +xfs_utf8_casefold( + const struct xfs_cft *cft, + const char **name, + int *namelen, + __uint16_t *fc) +{ + wchar_t uc; + + if (*namelen == 0) + return 0; + + if (**name & 0x80) { + /* All extended UTF-8 sequences have the high-bit set */ + int n = utf8_mbtowc(&uc, *name, *namelen); + if (n < 0) { + (*namelen)--; + *fc = *(*name)++; + return 1; + } + *name += n; + *namelen -= n; + } else { + /* otherwise, standard ASCII */ + uc = *(*name)++; + (*namelen)--; + } + return xfs_casefold(cft, uc, fc); +} + +/* + * always generate a case-folded hash to allow mount-time selection of + * case-insensitive lookup (rather than mkfs time). + */ +STATIC xfs_dahash_t +xfs_unicode_hashname( + xfs_inode_t *inode, + struct xfs_name *name) +{ + const char *n = name->name; + int len = name->len; + xfs_dahash_t hash = 0; + __uint16_t fc[MAX_FOLD_CHARS]; + int nfc; + int i; + + while (len > 0) { + nfc = xfs_utf8_casefold(inode->i_mount->m_cft, &n, &len, fc); + for (i = 0; i < nfc; i++) + hash = fc[i] ^ rol32(hash, 7); + } + return hash; +} + +/* + * Perform a case-folding case-insensitive string comparison, + * returns either XFS_CMP_CASE or XFS_CMP_DIFFERENT. + */ +STATIC xfs_dacmp_t +xfs_unicode_casecmp( + const struct xfs_cft *cft, + const char *name1, + int len1, + const char *name2, + int len2) +{ + __uint16_t fc1[MAX_FOLD_CHARS], fc2[MAX_FOLD_CHARS]; + __uint16_t *fc1p, *fc2p; + int nfc1, nfc2; + + nfc1 = xfs_utf8_casefold(cft, &name1, &len1, fc1); + fc1p = fc1; + nfc2 = xfs_utf8_casefold(cft, &name2, &len2, fc2); + fc2p = fc2; + + while (nfc1 > 0 && nfc2 > 0) { + if (*fc1p != *fc2p) + return XFS_CMP_DIFFERENT; + if (!--nfc1) { + nfc1 = xfs_utf8_casefold(cft, &name1, &len1, fc1); + fc1p = fc1; + } else + fc1p++; + if (!--nfc2) { + nfc2 = xfs_utf8_casefold(cft, &name2, &len2, fc2); + fc2p = fc2; + } else + fc2p++; + } + if (nfc1 != nfc2) + return XFS_CMP_DIFFERENT; + return XFS_CMP_CASE; + +} + +/* + * Compare two UTF-8 names to see if they are exactly the same or + * case-insensitive match. + */ +STATIC xfs_dacmp_t +xfs_unicode_compname( + xfs_inode_t *inode, + const char *name1, + int len1, + const char *name2, + int len2) +{ + wchar_t uc1, uc2; + int n; + + /* + * If the lengths are different, go straight to the case-insensitive + * comparison + */ + if (len1 != len2) + return xfs_unicode_casecmp(inode->i_mount->m_cft, + name1, len1, name2, len2); + + /* + * Start by comparing one-to-one UTF-8 chars. If we have a mismatch, + * downgrade to case-insensitive comparison on the rest of the names. + * At this stage, we only need to maintain one length variable. + */ + while (len1) { + /* + * first do a direct compare, if different, try the + * case-insensitive comparison on the remainder. + */ + if (*name1 != *name2) + return xfs_unicode_casecmp(inode->i_mount->m_cft, + name1, len1, name2, len1); + /* + * if we are working on a UTF-8 sequence, take in all + * appropriate chars and then compare. + */ + if (*name1 >= 0x80) { + n = utf8_mbtowc(&uc1, name1, len1); + if (n < 0) + return XFS_CMP_DIFFERENT; /* invalid */ + utf8_mbtowc(&uc2, name2, len1); + /* + * no need to check "n" here as the first char + * determines the length of a UTF-8 sequence. + */ + if (uc1 != uc2) + return xfs_unicode_casecmp( + inode->i_mount->m_cft, + name1, len1, name2, len1); + } else { + n = 1; + } + name1 += n; + name2 += n; + len1 -= n; + } + /* + * to get here, all chars must have matched + */ + return XFS_CMP_EXACT; +} + +STATIC xfs_dacmp_t +xfs_default_compname( + xfs_inode_t *inode, + const char *name1, + int namelen1, + const char *name2, + int namelen2) +{ + return xfs_da_compname(name1, namelen1, name2, namelen2); +} + +const struct xfs_nameops xfs_unicode_nameops = { + .hashname = xfs_unicode_hashname, + .compname = xfs_default_compname, +}; + +const struct xfs_nameops xfs_unicode_ci_nameops = { + .hashname = xfs_unicode_hashname, + .compname = xfs_unicode_compname, +}; + +int +xfs_unicode_validate( + const struct xfs_name *name) +{ + wchar_t uc; + int i, nlen; + + for (i = 0; i < name->len; i += nlen) { + if (name->name[i] >= 0xf0) { + cmn_err(CE_WARN, "xfs_unicode_validate: " + "UTF-8 char beyond U+FFFF\n"); + return EINVAL; + } + /* utf8_mbtowc must fail on overlong sequences too */ + nlen = utf8_mbtowc(&uc, name->name + i, name->len - i); + if (nlen < 0) { + cmn_err(CE_WARN, "xfs_unicode_validate: " + "invalid UTF-8 sequence\n"); + return EILSEQ; + } + /* check for invalid/surrogate/private unicode chars */ + if (uc >= 0xfffe || (uc >= 0xd800 && uc <= 0xf8ff)) { + cmn_err(CE_WARN, "xfs_unicode_validate: " + "unsupported UTF-8 char\n"); + return EINVAL; + } + } + return 0; +} + +/* + * Unicode Case Fold Table management + */ + +struct cft_item { + struct xfs_cft *table; + int size; + int refcount; +}; + +static mutex_t cft_lock; +static int cft_size; +static struct cft_item *cft_list; + +STATIC struct xfs_cft * +add_cft( + struct xfs_dcft *dcft, + int size) +{ + int found = 0; + int i, j; + struct xfs_cft *cft = NULL; + __be16 *duc; + __uint16_t *uc; + struct cft_item *tmp_list; + + mutex_lock(&cft_lock); + + for (i = 0; i < cft_size; i++) { + if (cft_list[i].size != size) + continue; + cft = cft_list[i].table; + if (cft->num_tables != be32_to_cpu(dcft->num_tables) || + cft->flags != be32_to_cpu(dcft->flags)) + continue; + found = 1; + for (j = 0; j < cft->num_tables; j++) { + if (cft->table_offset[j] != + be32_to_cpu(dcft->table_offset[j])) { + found = 0; + break; + } + } + if (found) { + cft_list[i].refcount++; + goto out; + } + } + + tmp_list = kmem_realloc(cft_list, + (cft_size + 1) * sizeof(struct cft_item), + cft_size * sizeof(struct cft_item), KM_MAYFAIL); + if (!tmp_list) + goto out; + cft_list = tmp_list; + + cft = vmalloc(size); + if (!cft) + goto out; + cft->magic = be32_to_cpu(dcft->magic); + cft->flags = be32_to_cpu(dcft->flags); + cft->num_tables = be32_to_cpu(dcft->num_tables); + ASSERT(cft->num_tables <= MAX_FOLD_CHARS); + for (i = 0; i < cft->num_tables; i++) + cft->table_offset[i] = be32_to_cpu(dcft->table_offset[i]); + j = (size - cft->table_offset[0]) / sizeof(__uint16_t); + uc = xfs_cft_ptr(cft, 0); + duc = (__be16 *)((char *)dcft + be32_to_cpu(dcft->table_offset[0])); + for (i = 0; i < j; i++) + uc[i] = be16_to_cpu(duc[i]); + + cft_list[cft_size].table = cft; + cft_list[cft_size].size = size; + cft_list[cft_size].refcount = 1; + cft_size++; +out: + mutex_unlock(&cft_lock); + return cft; +} + +STATIC void +remove_cft( + const struct xfs_cft *cft) +{ + int i; + + mutex_lock(&cft_lock); + + for (i = 0; i < cft_size; i++) { + if (cft_list[i].table != cft) + continue; + ASSERT(cft_list[i].refcount > 0); + cft_list[i].refcount--; + if (cft_list[i].refcount != 0) + break; + /* no more users of the table, free it */ + vfree(cft_list[i].table); + cft_size--; + if (i < cft_size) + memmove(cft_list + i, cft_list + i + 1, + sizeof(struct cft_item) * (cft_size - i)); + break; + } + + mutex_unlock(&cft_lock); +} + + +int +xfs_unicode_read_cft( + xfs_mount_t *mp) +{ + int error; + xfs_inode_t *cftip; + int size; + int next; + int nmap; + xfs_bmbt_irec_t *mapp = NULL; + int n; + int byte_cnt; + xfs_buf_t *bp; + struct xfs_dcft *dcft = NULL; + char *tmp; + + if (!xfs_sb_version_hasunicode(&mp->m_sb)) + return 0; /* not needed for this filesystem */ + + if (mp->m_sb.sb_cftino == NULLFSINO || mp->m_sb.sb_cftino == 0) + return EINVAL; + + error = xfs_iget(mp, NULL, mp->m_sb.sb_cftino, 0, 0, &cftip, 0); + if (error) + return error; + ASSERT(cftip != NULL); + + size = cftip->i_d.di_size; + next = cftip->i_d.di_nextents; + + error = ENOMEM; + dcft = vmalloc(size); + if (!dcft) + goto out; + + nmap = next; + mapp = kmem_alloc(next * sizeof(xfs_bmbt_irec_t), KM_MAYFAIL); + if (!mapp) + goto out; + + error = xfs_bmapi(NULL, cftip, 0, next, 0, NULL, 0, mapp, &nmap, + NULL, NULL); + if (error) + goto out; + + tmp = (char *)dcft; + for (n = 0; n < nmap; n++) { + byte_cnt = XFS_FSB_TO_B(mp, mapp[n].br_blockcount); + + error = xfs_read_buf(mp, mp->m_ddev_targp, + XFS_FSB_TO_DADDR(mp, mapp[n].br_startblock), + BTOBB(byte_cnt), 0, &bp); + if (error) + goto out; + + if (size < byte_cnt) + byte_cnt = size; + size -= byte_cnt; + memcpy(tmp, XFS_BUF_PTR(bp), byte_cnt); + tmp += byte_cnt; + xfs_buf_relse(bp); + } + + /* verify case table read off disk */ + if (!uuid_equal(&dcft->uuid, &mp->m_sb.sb_uuid)) { + error = EINVAL; + goto out; + } + + /* clear UUID for in-memory copy/compare */ + memset(&dcft->uuid, 0, sizeof(dcft->uuid)); + + mp->m_cft = add_cft(dcft, cftip->i_d.di_size); + if (mp->m_cft == NULL) + error = ENOMEM; + +out: + xfs_iput(cftip, 0); + kmem_free(mapp, next * sizeof(xfs_bmbt_irec_t)); + vfree(dcft); + + return error; +} + +void +xfs_unicode_free_cft( + const struct xfs_cft *cft) +{ + if (cft) + remove_cft(cft); +} + +void +xfs_unicode_init(void) +{ + mutex_init(&cft_lock); +} + +void +xfs_unicode_uninit(void) +{ + ASSERT(cft_size == 0); + + kmem_free(cft_list, cft_size * sizeof(struct cft_item)); + cft_list = NULL; + + mutex_destroy(&cft_lock); +} Index: kern_ci/fs/xfs/xfs_unicode.h =================================================================== --- /dev/null +++ kern_ci/fs/xfs/xfs_unicode.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2007-2008 Silicon Graphics, Inc. + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +#ifndef __XFS_UNICODE_H__ +#define __XFS_UNICODE_H__ + +#define XFS_CFT_MAGIC 0x58434654 /* 'XCFT' */ +#define XFS_CFT_FLAG_TURKIC 0x00000001 +#define XFS_CFT_FLAG_MAX 0x00000001 + +/* + * Case Fold Table - on disk version. Must match the incore version below. + */ +struct xfs_dcft { + __be32 magic; /* validity check */ + __be32 flags; + uuid_t uuid; /* UUID of the filesystem */ + __be32 crc; /* for future support */ + __be32 num_tables; /* single, double, etc */ + __be32 table_offset[1];/* offsets to tables from + start of this structure */ +}; + +/* + * Case Fold Table - in core version. Must match the ondisk version above. + */ +struct xfs_cft { + __uint32_t magic; + __uint32_t flags; + uuid_t uuid; /* UUID of the filesystem */ + __uint32_t crc; + __uint32_t num_tables; /* single, double, etc */ + __uint32_t table_offset[1];/* offsets to tables from + start of this structure */ + /* 16-bit array tables immediately follow */ +}; + +#ifdef CONFIG_XFS_UNICODE + +void xfs_unicode_init(void); +void xfs_unicode_uninit(void); + +int xfs_unicode_validate(const struct xfs_name *name); + +int xfs_unicode_read_cft(struct xfs_mount *mp); +void xfs_unicode_free_cft(const struct xfs_cft *cft); + +#else + +static inline void xfs_unicode_init(void) {} +static inline void xfs_unicode_uninit(void) {} +static inline int xfs_unicode_validate(const struct xfs_name *name) +{ + return 0; +} +static inline int xfs_unicode_read_cft(struct xfs_mount *mp) +{ + return EOPNOTSUPP; +} +static inline void xfs_unicode_free_cft(const struct xfs_cft *cft) {} + +#endif /* CONFIG_XFS_UNICODE */ + +#endif /* __XFS_UNICODE_H__ */ Index: kern_ci/fs/xfs/xfs_vfsops.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_vfsops.c +++ kern_ci/fs/xfs/xfs_vfsops.c @@ -56,6 +56,7 @@ #include "xfs_vnodeops.h" #include "xfs_vfsops.h" #include "xfs_utils.h" +#include "xfs_unicode.h" int __init @@ -84,6 +85,7 @@ xfs_init(void) xfs_acl_zone_init(xfs_acl_zone, "xfs_acl"); xfs_mru_cache_init(); xfs_filestream_init(); + xfs_unicode_init(); /* * The size of the zone allocated buf log item is the maximum @@ -159,6 +161,7 @@ xfs_cleanup(void) xfs_filestream_uninit(); xfs_mru_cache_uninit(); xfs_acl_zone_destroy(xfs_acl_zone); + xfs_unicode_uninit(); #ifdef XFS_DIR2_TRACE ktrace_free(xfs_dir2_trace_buf); @@ -401,6 +404,18 @@ xfs_finish_flags( mp->m_qflags |= XFS_OQUOTA_ENFD; } + if (xfs_sb_version_hasoldci(&mp->m_sb)) + mp->m_flags |= XFS_MOUNT_CILOOKUP; + if (xfs_sb_version_hasunicode(&mp->m_sb)) { + if (ap->flags2 & XFSMNT2_CILOOKUP) + mp->m_flags |= XFS_MOUNT_CILOOKUP; + } else { + if (ap->flags2 & XFSMNT2_CILOOKUP) { + cmn_err(CE_WARN, + "XFS: can't do case-insensitive mount on non-Unicode filesystem"); + return XFS_ERROR(EINVAL); + } + } return 0; } -- From owner-xfs@oss.sgi.com Mon Apr 21 01:36:12 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 01:36:53 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, J_CHICKENPOX_72 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 m3L8a5TG025351 for ; Mon, 21 Apr 2008 01:36:08 -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 SAA13509; Mon, 21 Apr 2008 18:36:45 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id AE62E58C4C16; Mon, 21 Apr 2008 18:36:45 +1000 (EST) Message-Id: <20080421083645.247895324@chook.melbourne.sgi.com> References: <20080421083103.433280025@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Mon, 21 Apr 2008 18:31:06 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 3/4] XFS: ASCII case-insensitive support Content-Disposition: inline; filename=ascii_ci.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15507 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Implement ASCII case-insensitive support. It's primary purpose is for supporting existing filesystems that already use this case-insensitive mode migrated from IRIX. But, if you only need ASCII-only case-insensitive support (ie. English only) and will never use another language, then this mode is perfectly adequate. ASCII-CI is implemented by generating hashes based on lower-case letters and doing lower-case compares. It implements a new xfs_nameops vector for doing the hashes and comparisons for all filename operations. To create a filesystem with this CI mode, use: # mkfs.xfs -n version=ci Signed-off-by: Barry Naujok --- fs/xfs/linux-2.6/xfs_linux.h | 1 fs/xfs/linux-2.6/xfs_super.c | 7 ++++- fs/xfs/xfs_dir2.c | 53 ++++++++++++++++++++++++++++++++++++++++++- fs/xfs/xfs_fs.h | 1 fs/xfs/xfs_fsops.c | 4 ++- fs/xfs/xfs_sb.h | 10 +++++++- 6 files changed, 72 insertions(+), 4 deletions(-) Index: kern_ci/fs/xfs/linux-2.6/xfs_linux.h =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_linux.h +++ kern_ci/fs/xfs/linux-2.6/xfs_linux.h @@ -75,6 +75,7 @@ #include #include #include +#include #include #include Index: kern_ci/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_super.c +++ kern_ci/fs/xfs/linux-2.6/xfs_super.c @@ -67,6 +67,8 @@ static kmem_zone_t *xfs_vnode_zone; static kmem_zone_t *xfs_ioend_zone; mempool_t *xfs_ioend_pool; +extern struct dentry_operations xfs_ci_dentry_operations; + STATIC struct xfs_mount_args * xfs_args_allocate( struct super_block *sb, @@ -564,7 +566,10 @@ xfs_set_inodeops( inode->i_mapping->a_ops = &xfs_address_space_operations; break; case S_IFDIR: - inode->i_op = &xfs_dir_inode_operations; + if (xfs_sb_version_hasoldci(&XFS_M(inode->i_sb)->m_sb)) + inode->i_op = &xfs_dir_ci_inode_operations; + else + inode->i_op = &xfs_dir_inode_operations; inode->i_fop = &xfs_dir_file_operations; break; case S_IFLNK: Index: kern_ci/fs/xfs/xfs_dir2.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -50,6 +50,54 @@ kmem_zone_t *xfs_name_zone; extern const struct xfs_nameops xfs_default_nameops; +/* + * V1/OLDCI case-insensitive support for directories that was used in IRIX. + * + * This is ASCII only case support, ie. A-Z. + */ +STATIC xfs_dahash_t +xfs_ascii_ci_hashname( + struct xfs_name *name) +{ + xfs_dahash_t hash; + int i; + + for (i = 0, hash = 0; i < name->len; i++) + hash = tolower(name->name[i]) ^ rol32(hash, 7); + + return hash; +} + +STATIC xfs_dacmp_t +xfs_ascii_ci_compname( + const char *name1, + int len1, + const char *name2, + int len2) +{ + xfs_dacmp_t result; + int i; + + if (len1 != len2) + return XFS_CMP_DIFFERENT; + + result = XFS_CMP_EXACT; + for (i = 0; i < len1; i++) { + if (name1[i] == name2[i]) + continue; + if (tolower(name1[i]) != tolower(name2[i])) + return XFS_CMP_DIFFERENT; + result = XFS_CMP_CASE; + } + + return result; +} + +static struct xfs_nameops xfs_ascii_ci_nameops = { + .hashname = xfs_ascii_ci_hashname, + .compname = xfs_ascii_ci_compname, +}; + void xfs_dir_mount( xfs_mount_t *mp) @@ -69,7 +117,10 @@ xfs_dir_mount( (mp->m_dirblksize - (uint)sizeof(xfs_da_node_hdr_t)) / (uint)sizeof(xfs_da_node_entry_t); mp->m_dir_magicpct = (mp->m_dirblksize * 37) / 100; - mp->m_dirnameops = &xfs_default_nameops; + if (xfs_sb_version_hasoldci(&mp->m_sb)) + mp->m_dirnameops = &xfs_ascii_ci_nameops; + else + mp->m_dirnameops = &xfs_default_nameops; } /* Index: kern_ci/fs/xfs/xfs_fs.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_fs.h +++ kern_ci/fs/xfs/xfs_fs.h @@ -239,6 +239,7 @@ typedef struct xfs_fsop_resblks { #define XFS_FSOP_GEOM_FLAGS_LOGV2 0x0100 /* log format version 2 */ #define XFS_FSOP_GEOM_FLAGS_SECTOR 0x0200 /* sector sizes >1BB */ #define XFS_FSOP_GEOM_FLAGS_ATTR2 0x0400 /* inline attributes rework */ +#define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x1000 /* ASCII only CI names */ #define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x4000 /* lazy superblock counters */ Index: kern_ci/fs/xfs/xfs_fsops.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_fsops.c +++ kern_ci/fs/xfs/xfs_fsops.c @@ -95,6 +95,8 @@ xfs_fs_geometry( XFS_FSOP_GEOM_FLAGS_DIRV2 : 0) | (xfs_sb_version_hassector(&mp->m_sb) ? XFS_FSOP_GEOM_FLAGS_SECTOR : 0) | + (xfs_sb_version_hasoldci(&mp->m_sb) ? + XFS_FSOP_GEOM_FLAGS_DIRV2CI : 0) | (xfs_sb_version_haslazysbcount(&mp->m_sb) ? XFS_FSOP_GEOM_FLAGS_LAZYSB : 0) | (xfs_sb_version_hasattr2(&mp->m_sb) ? @@ -629,7 +631,7 @@ xfs_fs_goingdown( xfs_force_shutdown(mp, SHUTDOWN_FORCE_UMOUNT); thaw_bdev(sb->s_bdev, sb); } - + break; } case XFS_FSOP_GOING_FLAGS_LOGFLUSH: Index: kern_ci/fs/xfs/xfs_sb.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_sb.h +++ kern_ci/fs/xfs/xfs_sb.h @@ -46,10 +46,12 @@ struct xfs_mount; #define XFS_SB_VERSION_SECTORBIT 0x0800 #define XFS_SB_VERSION_EXTFLGBIT 0x1000 #define XFS_SB_VERSION_DIRV2BIT 0x2000 +#define XFS_SB_VERSION_BORGBIT 0x4000 /* ASCII only case-insens. */ #define XFS_SB_VERSION_MOREBITSBIT 0x8000 #define XFS_SB_VERSION_OKSASHFBITS \ (XFS_SB_VERSION_EXTFLGBIT | \ - XFS_SB_VERSION_DIRV2BIT) + XFS_SB_VERSION_DIRV2BIT | \ + XFS_SB_VERSION_BORGBIT) #define XFS_SB_VERSION_OKREALFBITS \ (XFS_SB_VERSION_ATTRBIT | \ XFS_SB_VERSION_NLINKBIT | \ @@ -437,6 +439,12 @@ static inline int xfs_sb_version_hassect ((sbp)->sb_versionnum & XFS_SB_VERSION_SECTORBIT); } +static inline int xfs_sb_version_hasoldci(xfs_sb_t *sbp) +{ + return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ + ((sbp)->sb_versionnum & XFS_SB_VERSION_BORGBIT); +} + static inline int xfs_sb_version_hasmorebits(xfs_sb_t *sbp) { return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ -- From owner-xfs@oss.sgi.com Mon Apr 21 01:36:10 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 01:36:51 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_65 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 m3L8a5Ck025352 for ; Mon, 21 Apr 2008 01:36:08 -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 SAA13505; Mon, 21 Apr 2008 18:36:45 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 1D7E358C4C17; Mon, 21 Apr 2008 18:36:45 +1000 (EST) Message-Id: <20080421083644.809426871@chook.melbourne.sgi.com> References: <20080421083103.433280025@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Mon, 21 Apr 2008 18:31:05 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 2/4] XFS: Return case-insensitive match for dentry cache Content-Disposition: inline; filename=return_name.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15506 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs This implements the code to store the actual filename found during a lookup in the dentry cache and to avoid multiple entries in the dcache pointing to the same inode. To avoid polluting the dcache, we implement a new directory inode operations for lookup. xfs_vn_ci_lookup() interacts directly with the dcache and the code was derived from ntfs_lookup() in fs/ntfs/namei.c. The "actual name" is only allocated and returned for a case- insensitive match and not an actual match. Signed-off-by: Barry Naujok --- fs/xfs/linux-2.6/xfs_export.c | 2 fs/xfs/linux-2.6/xfs_iops.c | 156 +++++++++++++++++++++++++++++++++++++++++- fs/xfs/linux-2.6/xfs_iops.h | 1 fs/xfs/xfs_dir2.c | 24 +++++- fs/xfs/xfs_dir2.h | 32 ++++++++ fs/xfs/xfs_dir2_block.c | 11 ++ fs/xfs/xfs_dir2_leaf.c | 7 + fs/xfs/xfs_dir2_node.c | 21 ++++- fs/xfs/xfs_dir2_sf.c | 7 + fs/xfs/xfs_vfsops.c | 2 fs/xfs/xfs_vnodeops.c | 17 +++- fs/xfs/xfs_vnodeops.h | 2 12 files changed, 264 insertions(+), 18 deletions(-) Index: kern_ci/fs/xfs/linux-2.6/xfs_export.c =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_export.c +++ kern_ci/fs/xfs/linux-2.6/xfs_export.c @@ -215,7 +215,7 @@ xfs_fs_get_parent( struct xfs_inode *cip; struct dentry *parent; - error = xfs_lookup(XFS_I(child->d_inode), &xfs_name_dotdot, &cip); + error = xfs_lookup(XFS_I(child->d_inode), &xfs_name_dotdot, &cip, NULL); if (unlikely(error)) return ERR_PTR(-error); Index: kern_ci/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_iops.c +++ kern_ci/fs/xfs/linux-2.6/xfs_iops.c @@ -2,6 +2,8 @@ * Copyright (c) 2000-2005 Silicon Graphics, Inc. * All Rights Reserved. * + * Portions Copyright (c) 2001-2006 Anton Altaparmakov + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation. @@ -389,7 +391,7 @@ xfs_vn_lookup( return ERR_PTR(-ENAMETOOLONG); xfs_dentry_to_name(&name, dentry); - error = xfs_lookup(XFS_I(dir), &name, &cip); + error = xfs_lookup(XFS_I(dir), &name, &cip, NULL); if (unlikely(error)) { if (unlikely(error != ENOENT)) return ERR_PTR(-error); @@ -400,6 +402,139 @@ xfs_vn_lookup( return d_splice_alias(cip->i_vnode, dentry); } +STATIC struct dentry * +xfs_ci_dentry_update( + struct dentry *dent, + struct inode *dent_inode, + struct xfs_name *name) +{ + int err; + struct dentry *real_dent; + struct dentry *new_dent; + struct qstr nls_name; + + nls_name.name = name->name; + nls_name.len = name->len; + + /* + * following code from ntfs_lookup() in fs/ntfs/namei.c + */ + + nls_name.hash = full_name_hash(nls_name.name, nls_name.len); + + /* Does a dentry matching the nls_name exist already? */ + real_dent = d_lookup(dent->d_parent, &nls_name); + /* If not, create it now. */ + if (!real_dent) { + real_dent = d_alloc(dent->d_parent, &nls_name); + if (!real_dent) { + err = -ENOMEM; + goto err_out; + } + new_dent = d_splice_alias(dent_inode, real_dent); + if (new_dent) + dput(real_dent); + else + new_dent = real_dent; + return new_dent; + } + /* Matching dentry exists, check if it is negative. */ + if (real_dent->d_inode) { + if (unlikely(real_dent->d_inode != dent_inode)) { + /* This can happen because bad inodes are unhashed. */ + BUG_ON(!is_bad_inode(dent_inode)); + BUG_ON(!is_bad_inode(real_dent->d_inode)); + } + /* + * Already have the inode and the dentry attached, decrement + * the reference count to balance the xfs_lookup() we did + * earlier on. We found the dentry using d_lookup() so it + * cannot be disconnected and thus we do not need to worry + * about any NFS/disconnectedness issues here. + */ + iput(dent_inode); + return real_dent; + } + /* + * Negative dentry: instantiate it unless the inode is a directory and + * has a 'disconnected' dentry (i.e. IS_ROOT and DCACHE_DISCONNECTED), + * in which case d_move() that in place of the found dentry. + */ + if (!S_ISDIR(dent_inode->i_mode)) { + /* Not a directory; everything is easy. */ + d_instantiate(real_dent, dent_inode); + return real_dent; + } + spin_lock(&dcache_lock); + if (list_empty(&dent_inode->i_dentry)) { + /* + * Directory without a 'disconnected' dentry; we need to do + * d_instantiate() by hand because it takes dcache_lock which + * we already hold. + */ + list_add(&real_dent->d_alias, &dent_inode->i_dentry); + real_dent->d_inode = dent_inode; + spin_unlock(&dcache_lock); + security_d_instantiate(real_dent, dent_inode); + return real_dent; + } + /* + * Directory with a 'disconnected' dentry; get a reference to the + * 'disconnected' dentry. + */ + new_dent = list_entry(dent_inode->i_dentry.next, struct dentry, + d_alias); + dget_locked(new_dent); + spin_unlock(&dcache_lock); + /* Do security vodoo. */ + security_d_instantiate(real_dent, dent_inode); + /* Move new_dent in place of real_dent. */ + d_move(new_dent, real_dent); + /* Balance the xfs_lookup() we did above. */ + iput(dent_inode); + /* Throw away real_dent. */ + dput(real_dent); + /* Use new_dent as the actual dentry. */ + return new_dent; + +err_out: + iput(dent_inode); + return ERR_PTR(err); +} + +STATIC struct dentry * +xfs_vn_ci_lookup( + struct inode *dir, + struct dentry *dentry, + struct nameidata *nd) +{ + struct xfs_inode *ip; + struct xfs_name name; + int ci_match = 0; + int error; + + if (dentry->d_name.len >= MAXNAMELEN) + return ERR_PTR(-ENAMETOOLONG); + + xfs_dentry_to_name(&name, dentry); + error = xfs_lookup(XFS_I(dir), &name, &ip, &ci_match); + if (unlikely(error)) { + if (unlikely(error != ENOENT)) + return ERR_PTR(-error); + d_add(dentry, NULL); + return NULL; + } + + /* if exact match, just splice and exit */ + if (!ci_match) + return d_splice_alias(ip->i_vnode, dentry); + + /* else case-insensitive match... */ + dentry = xfs_ci_dentry_update(dentry, ip->i_vnode, &name); + xfs_name_free(name.name); + return dentry; +} + STATIC int xfs_vn_link( struct dentry *old_dentry, @@ -911,6 +1046,25 @@ const struct inode_operations xfs_dir_in .removexattr = xfs_vn_removexattr, }; +const struct inode_operations xfs_dir_ci_inode_operations = { + .create = xfs_vn_create, + .lookup = xfs_vn_ci_lookup, + .link = xfs_vn_link, + .unlink = xfs_vn_unlink, + .symlink = xfs_vn_symlink, + .mkdir = xfs_vn_mkdir, + .rmdir = xfs_vn_rmdir, + .mknod = xfs_vn_mknod, + .rename = xfs_vn_rename, + .permission = xfs_vn_permission, + .getattr = xfs_vn_getattr, + .setattr = xfs_vn_setattr, + .setxattr = xfs_vn_setxattr, + .getxattr = xfs_vn_getxattr, + .listxattr = xfs_vn_listxattr, + .removexattr = xfs_vn_removexattr, +}; + const struct inode_operations xfs_symlink_inode_operations = { .readlink = generic_readlink, .follow_link = xfs_vn_follow_link, Index: kern_ci/fs/xfs/linux-2.6/xfs_iops.h =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_iops.h +++ kern_ci/fs/xfs/linux-2.6/xfs_iops.h @@ -20,6 +20,7 @@ extern const struct inode_operations xfs_inode_operations; extern const struct inode_operations xfs_dir_inode_operations; +extern const struct inode_operations xfs_dir_ci_inode_operations; extern const struct inode_operations xfs_symlink_inode_operations; extern const struct file_operations xfs_file_operations; Index: kern_ci/fs/xfs/xfs_dir2.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -46,6 +46,8 @@ struct xfs_name xfs_name_dotdot = {"..", 2}; +kmem_zone_t *xfs_name_zone; + extern const struct xfs_nameops xfs_default_nameops; void @@ -195,13 +197,16 @@ xfs_dir_createname( /* * Lookup a name in a directory, give back the inode number. + * If ci_match is not NULL, sets whether a CI match occurred of not, and + * if so, return the actual name in name. */ int xfs_dir_lookup( xfs_trans_t *tp, xfs_inode_t *dp, struct xfs_name *name, - xfs_ino_t *inum) /* out: inode number */ + xfs_ino_t *inum, /* out: inode number */ + int *ci_match) /* out: CI match occurred */ { xfs_da_args_t args; int rval; @@ -234,8 +239,23 @@ xfs_dir_lookup( rval = xfs_dir2_node_lookup(&args); if (rval == EEXIST) rval = 0; - if (rval == 0) + if (!rval) { *inum = args.inumber; + if (ci_match) { + *ci_match = args.cmpresult == XFS_CMP_CASE; + if (*ci_match) { + if (!args.value) + return ENOMEM; + name->name = args.value; + name->len = args.valuelen; + } else { + ASSERT(args.value == NULL); + } + } else { + if (args.value) + xfs_name_free(args.value); + } + } return rval; } Index: kern_ci/fs/xfs/xfs_dir2.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.h +++ kern_ci/fs/xfs/xfs_dir2.h @@ -74,7 +74,8 @@ extern int xfs_dir_createname(struct xfs xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_lookup(struct xfs_trans *tp, struct xfs_inode *dp, - struct xfs_name *name, xfs_ino_t *inum); + struct xfs_name *name, xfs_ino_t *inum, + int *ci_match); extern int xfs_dir_removename(struct xfs_trans *tp, struct xfs_inode *dp, struct xfs_name *name, xfs_ino_t ino, xfs_fsblock_t *first, @@ -99,4 +100,33 @@ extern int xfs_dir2_isleaf(struct xfs_tr extern int xfs_dir2_shrink_inode(struct xfs_da_args *args, xfs_dir2_db_t db, struct xfs_dabuf *bp); +/* + * Name handling routines for directories and attrs + */ + +extern struct kmem_zone *xfs_name_zone; + +static inline char * +xfs_name_alloc(void) +{ + return kmem_zone_zalloc(xfs_name_zone, KM_MAYFAIL); +} + +static inline void +xfs_name_free(const char *name) +{ + kmem_zone_free(xfs_name_zone, (void *)name); +} + +static inline char * +xfs_name_dup(const char *src_name, int src_len, int *dest_len) +{ + char *dest_name = xfs_name_alloc(); + if (dest_name) { + memcpy(dest_name, src_name, src_len); + *dest_len = src_len; + } + return dest_name; +} + #endif /* __XFS_DIR2_H__ */ Index: kern_ci/fs/xfs/xfs_dir2_block.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_block.c +++ kern_ci/fs/xfs/xfs_dir2_block.c @@ -610,12 +610,19 @@ xfs_dir2_block_lookup( /* * Get the offset from the leaf entry, to point to the data. */ - dep = (xfs_dir2_data_entry_t *) - ((char *)block + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(blp[ent].address))); + dep = (xfs_dir2_data_entry_t *)((char *)block + + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(blp[ent].address))); /* * Fill in inode number, release the block. */ args->inumber = be64_to_cpu(dep->inumber); + /* + * If a case-insensitive match, allocate a buffer and copy the actual + * name into the buffer. Return it via args->value. + */ + if (args->cmpresult == XFS_CMP_CASE) + args->value = xfs_name_dup(dep->name, dep->namelen, + &args->valuelen); xfs_da_brelse(args->trans, bp); return XFS_ERROR(EEXIST); } Index: kern_ci/fs/xfs/xfs_dir2_leaf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_leaf.c +++ kern_ci/fs/xfs/xfs_dir2_leaf.c @@ -1301,6 +1301,13 @@ xfs_dir2_leaf_lookup( * Return the found inode number. */ args->inumber = be64_to_cpu(dep->inumber); + /* + * If a case-insensitive match, allocate a buffer and copy the actual + * name into the buffer. Return it via args->value. + */ + if (args->cmpresult == XFS_CMP_CASE) + args->value = xfs_name_dup(dep->name, dep->namelen, + &args->valuelen); xfs_da_brelse(tp, dbp); xfs_da_brelse(tp, lbp); return XFS_ERROR(EEXIST); Index: kern_ci/fs/xfs/xfs_dir2_node.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_node.c +++ kern_ci/fs/xfs/xfs_dir2_node.c @@ -549,7 +549,7 @@ xfs_dir2_leafn_lookup_for_entry( xfs_dir2_data_entry_t *dep; /* data block entry */ xfs_inode_t *dp; /* incore directory inode */ int error; /* error return value */ - int di; /* data entry index */ + int di = -1; /* data entry index */ int index; /* leaf entry index */ xfs_dir2_leaf_t *leaf; /* leaf structure */ xfs_dir2_leaf_entry_t *lep; /* leaf entry */ @@ -577,6 +577,7 @@ xfs_dir2_leafn_lookup_for_entry( if (state->extravalid) { curbp = state->extrablk.bp; curdb = state->extrablk.blkno; + di = state->extrablk.index; } /* * Loop over leaf entries with the right hash value. @@ -638,7 +639,6 @@ xfs_dir2_leafn_lookup_for_entry( } /* Didn't find an exact match. */ error = ENOENT; - di = -1; ASSERT(index == be16_to_cpu(leaf->hdr.count) || args->oknoent); out: if (curbp) { @@ -652,7 +652,7 @@ out: state->extravalid = 0; } /* - * Return the index, that will be the insertion point. + * Return the index, that will be the deletion point for remove/replace. */ *indexp = index; return XFS_ERROR(error); @@ -1819,8 +1819,19 @@ xfs_dir2_node_lookup( error = xfs_da_node_lookup_int(state, &rval); if (error) rval = error; - else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) - rval = EEXIST; /* a case-insensitive match was found */ + else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) { + /* + * A case-insensitive match was found: return the actual + * name in args->value and return EEXIST + */ + xfs_dir2_data_entry_t *dep; + + dep = (xfs_dir2_data_entry_t *)((char *)state->extrablk.bp-> + data + state->extrablk.index); + args->value = xfs_name_dup(dep->name, dep->namelen, + &args->valuelen); + rval = EEXIST; + } /* * Release the btree blocks and leaf block. */ Index: kern_ci/fs/xfs/xfs_dir2_sf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_sf.c +++ kern_ci/fs/xfs/xfs_dir2_sf.c @@ -815,6 +815,7 @@ xfs_dir2_sf_lookup( xfs_dir2_sf_entry_t *sfep; /* shortform directory entry */ xfs_dir2_sf_t *sfp; /* shortform structure */ xfs_dacmp_t cmp; /* comparison result */ + xfs_dir2_sf_entry_t *ci_sfep; /* case-insens. entry */ xfs_dir2_trace_args("sf_lookup", args); xfs_dir2_sf_check(args); @@ -852,6 +853,7 @@ xfs_dir2_sf_lookup( /* * Loop over all the entries trying to match ours. */ + ci_sfep = NULL; for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); i < sfp->hdr.count; i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { /* @@ -875,8 +877,11 @@ xfs_dir2_sf_lookup( * Here, we can only be doing a lookup (not a rename or replace). * If a case-insensitive match was found earlier, return "found". */ - if (args->cmpresult == XFS_CMP_CASE) + if (args->cmpresult == XFS_CMP_CASE) { + args->value = xfs_name_dup(ci_sfep->name, ci_sfep->namelen, + &args->valuelen); return XFS_ERROR(EEXIST); + } /* * Didn't find it. */ Index: kern_ci/fs/xfs/xfs_vfsops.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_vfsops.c +++ kern_ci/fs/xfs/xfs_vfsops.c @@ -80,6 +80,7 @@ xfs_init(void) xfs_dabuf_zone = kmem_zone_init(sizeof(xfs_dabuf_t), "xfs_dabuf"); xfs_ifork_zone = kmem_zone_init(sizeof(xfs_ifork_t), "xfs_ifork"); xfs_trans_zone = kmem_zone_init(sizeof(xfs_trans_t), "xfs_trans"); + xfs_name_zone = kmem_zone_init(MAXNAMELEN, "xfs_name"); xfs_acl_zone_init(xfs_acl_zone, "xfs_acl"); xfs_mru_cache_init(); xfs_filestream_init(); @@ -179,6 +180,7 @@ xfs_cleanup(void) kmem_zone_destroy(xfs_btree_cur_zone); kmem_zone_destroy(xfs_inode_zone); kmem_zone_destroy(xfs_trans_zone); + kmem_zone_destroy(xfs_name_zone); kmem_zone_destroy(xfs_da_state_zone); kmem_zone_destroy(xfs_dabuf_zone); kmem_zone_destroy(xfs_buf_item_zone); Index: kern_ci/fs/xfs/xfs_vnodeops.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_vnodeops.c +++ kern_ci/fs/xfs/xfs_vnodeops.c @@ -1629,12 +1629,18 @@ xfs_inactive( return VN_INACTIVE_CACHE; } - +/* + * Lookups up an inode from "name". If ci_match is not NULL, then if a + * CI match is found, name->name can be replaced and ci_match is set to 1. + * The caller of xfs_lookup must call xfs_name_free(name->name) if + * ci_match in non-NULL and the value is non-zero. + */ int xfs_lookup( xfs_inode_t *dp, struct xfs_name *name, - xfs_inode_t **ipp) + xfs_inode_t **ipp, + int *ci_match) { xfs_ino_t inum; int error; @@ -1646,15 +1652,18 @@ xfs_lookup( return XFS_ERROR(EIO); lock_mode = xfs_ilock_map_shared(dp); - error = xfs_dir_lookup(NULL, dp, name, &inum); + error = xfs_dir_lookup(NULL, dp, name, &inum, ci_match); xfs_iunlock_map_shared(dp, lock_mode); if (error) goto out; error = xfs_iget(dp->i_mount, NULL, inum, 0, 0, ipp, 0); - if (error) + if (error) { + if (ci_match && *ci_match) + xfs_name_free(name->name); goto out; + } xfs_itrace_ref(*ipp); return 0; Index: kern_ci/fs/xfs/xfs_vnodeops.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_vnodeops.h +++ kern_ci/fs/xfs/xfs_vnodeops.h @@ -23,7 +23,7 @@ int xfs_fsync(struct xfs_inode *ip, int int xfs_release(struct xfs_inode *ip); int xfs_inactive(struct xfs_inode *ip); int xfs_lookup(struct xfs_inode *dp, struct xfs_name *name, - struct xfs_inode **ipp); + struct xfs_inode **ipp, int *ci_match); int xfs_create(struct xfs_inode *dp, struct xfs_name *name, mode_t mode, xfs_dev_t rdev, struct xfs_inode **ipp, struct cred *credp); int xfs_remove(struct xfs_inode *dp, struct xfs_name *name, -- From owner-xfs@oss.sgi.com Mon Apr 21 01:41:56 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 01:42:04 -0700 (PDT) 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 m3L8fr79026897 for ; Mon, 21 Apr 2008 01:41:56 -0700 X-ASG-Debug-ID: 1208767354-32f200310000-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 0492DA6B958; Mon, 21 Apr 2008 01:42:34 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id AABlqnYfr33wt1lF; Mon, 21 Apr 2008 01:42:34 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jnrbd-0003hB-OF; Mon, 21 Apr 2008 08:42:33 +0000 Date: Mon, 21 Apr 2008 04:42:33 -0400 From: Christoph Hellwig To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 1/4] XFS: Name operation vector for hash and compare Subject: Re: [PATCH 1/4] XFS: Name operation vector for hash and compare Message-ID: <20080421084233.GA10323@infradead.org> References: <20080421083103.433280025@chook.melbourne.sgi.com> <20080421083644.158168432@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080421083644.158168432@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1208767355 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.1, rules version 3.1.48395 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15509 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs > /* > + * Search comparison results > + */ > +typedef enum { > + XFS_CMP_DIFFERENT, /* names are completely different */ > + XFS_CMP_EXACT, /* names are exactly the same */ > + XFS_CMP_CASE /* names are same but differ in case */ > +} xfs_dacmp_t; Please don't add a typedef for this one, just use the enum type directly. Except for this this patch looks good to me. From owner-xfs@oss.sgi.com Mon Apr 21 01:59:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 01:59:27 -0700 (PDT) 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 m3L8x6qP028267 for ; Mon, 21 Apr 2008 01:59:08 -0700 X-ASG-Debug-ID: 1208768387-603801d90000-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 EA58D159F794; Mon, 21 Apr 2008 01:59:47 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id yucQuCRyy6u1pPGv; Mon, 21 Apr 2008 01:59:47 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JnrsJ-0004xr-15; Mon, 21 Apr 2008 08:59:47 +0000 Date: Mon, 21 Apr 2008 04:59:47 -0400 From: Christoph Hellwig To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 2/4] XFS: Return case-insensitive match for dentry cache Subject: Re: [PATCH 2/4] XFS: Return case-insensitive match for dentry cache Message-ID: <20080421085947.GA10399@infradead.org> References: <20080421083103.433280025@chook.melbourne.sgi.com> <20080421083644.809426871@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080421083644.809426871@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1208768387 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.1, rules version 3.1.48396 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15510 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs > +STATIC struct dentry * > +xfs_ci_dentry_update( > + struct dentry *dent, > + struct inode *dent_inode, > + struct xfs_name *name) > +{ > + int err; > + struct dentry *real_dent; > + struct dentry *new_dent; > + struct qstr nls_name; This helper should go into fs/dcache.c with a slightly move descritive name (d_add_ci?). Also the naming is rather odd, please replace every occurance of dent with dentry, and the variable dent_inode should be just inode. Also when moving this to dcache.c please provide a nice big kerneldoc comment describing it like Anton did for the ntfs lookup instance. of the > + /* > + * following code from ntfs_lookup() in fs/ntfs/namei.c > + */ Not a very helpful comment :) > + new_dent = d_splice_alias(dent_inode, real_dent); > + if (new_dent) > + dput(real_dent); > + else > + new_dent = real_dent; > + return new_dent; I think this would be more readable as if (new_dentry) { dput(real_dentry); return new_dentry; } return real_dentry; > + /* Matching dentry exists, check if it is negative. */ > + if (real_dent->d_inode) { > + if (unlikely(real_dent->d_inode != dent_inode)) { > + /* This can happen because bad inodes are unhashed. */ > + BUG_ON(!is_bad_inode(dent_inode)); > + BUG_ON(!is_bad_inode(real_dent->d_inode)); > + } Shouldn't this be a can't above? > + * Already have the inode and the dentry attached, decrement > + * the reference count to balance the xfs_lookup() we did > + * earlier on. We found the dentry using d_lookup() so it > + * cannot be disconnected and thus we do not need to worry > + * about any NFS/disconnectedness issues here. s/xfs_lookup/iget/ > +kmem_zone_t *xfs_name_zone; What about just using kmalloc here? We know the length of the name anyway, so there is no point of allocating the maximum possible size. > error = xfs_iget(dp->i_mount, NULL, inum, 0, 0, ipp, 0); > - if (error) > + if (error) { > + if (ci_match && *ci_match) > + xfs_name_free(name->name); > goto out; > + } All the allocation and freeing for ci_match looks odd and error prone to me. I think the low-level directory code should never allocate args->value unless it's explicitly asked for a CI match. That way there's only one place in xfs_ci_lookup to free it either. From owner-xfs@oss.sgi.com Mon Apr 21 02:02:40 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 02:02:47 -0700 (PDT) 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 m3L92dps028859 for ; Mon, 21 Apr 2008 02:02:40 -0700 X-ASG-Debug-ID: 1208768600-66fe01870000-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 DA0BB159F7F2; Mon, 21 Apr 2008 02:03:20 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id BHw8CDDVo8TpfxB9; Mon, 21 Apr 2008 02:03:20 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jnrvk-00051E-HW; Mon, 21 Apr 2008 09:03:20 +0000 Date: Mon, 21 Apr 2008 05:03:20 -0400 From: Christoph Hellwig To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 3/4] XFS: ASCII case-insensitive support Subject: Re: [PATCH 3/4] XFS: ASCII case-insensitive support Message-ID: <20080421090320.GA19639@infradead.org> References: <20080421083103.433280025@chook.melbourne.sgi.com> <20080421083645.247895324@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080421083645.247895324@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1208768600 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.1, rules version 3.1.48396 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15511 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs > +extern struct dentry_operations xfs_ci_dentry_operations; this one is not used nor does the variable exist. Just kill it :) > +static inline int xfs_sb_version_hasoldci(xfs_sb_t *sbp) > +{ > + return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ > + ((sbp)->sb_versionnum & XFS_SB_VERSION_BORGBIT); > +} Lots of superflous braces here. Should be: static inline int xfs_sb_version_hasoldci(xfs_sb_t *sbp) { return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && (sbp->sb_versionnum & XFS_SB_VERSION_BORGBIT); } (and yes, the other xfs_sb_version_ helpers need fixups like that aswell) From owner-xfs@oss.sgi.com Mon Apr 21 02:14:41 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 02:14:59 -0700 (PDT) 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 m3L9EdjG030000 for ; Mon, 21 Apr 2008 02:14:40 -0700 X-ASG-Debug-ID: 1208769320-14df00830000-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 DD51F157C174; Mon, 21 Apr 2008 02:15:20 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id EsDnAVTD9pptgKfe; Mon, 21 Apr 2008 02:15:20 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jns7M-0000xJ-HY; Mon, 21 Apr 2008 09:15:20 +0000 Date: Mon, 21 Apr 2008 05:15:20 -0400 From: Christoph Hellwig To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 4/4] XFS: Unicode case-insensitive lookup implementation Subject: Re: [PATCH 4/4] XFS: Unicode case-insensitive lookup implementation Message-ID: <20080421091520.GA31070@infradead.org> References: <20080421083103.433280025@chook.melbourne.sgi.com> <20080421083645.799556386@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080421083645.799556386@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1208769320 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.1, rules version 3.1.48396 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15512 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs The patch looks quite clean, but there still is the fundamental issue of rejecting perfectly fine UNIX filenames in xfs_unicode_validate, as discussed in the last round a Unix filename is any valid NULL-terminated bytestream with only ".", "..", and "/" special-cased and this patch breaks this assumptions. In addition to that I think xfs_unicode.[ch] should be split into a small xfs-specific part for reading the on-disk case-folding table and implementing the actual nameops, and the generic code for case folding and compares and case-folded strings should be moved into lib/ as it's quite generic. From owner-xfs@oss.sgi.com Mon Apr 21 02:25:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 02:25:28 -0700 (PDT) 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=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 m3L9OxiK030785 for ; Mon, 21 Apr 2008 02:25:02 -0700 X-ASG-Debug-ID: 1208769935-45a703080000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from rv-out-0506.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 38D72BB2AD for ; Mon, 21 Apr 2008 02:25:35 -0700 (PDT) Received: from rv-out-0506.google.com (rv-out-0506.google.com [209.85.198.233]) by cuda.sgi.com with ESMTP id KhQWvx96pHaBgFSr for ; Mon, 21 Apr 2008 02:25:35 -0700 (PDT) Received: by rv-out-0506.google.com with SMTP id g37so811634rvb.32 for ; Mon, 21 Apr 2008 02:25:35 -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:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; bh=crO6RGzjYdR3L6Mbsi8qVbK7R9XeHF46y0YLZbG419I=; b=aklEo+IKQ9jCjPKvktTy0S+sijvULcXqMWpdtJPlLGG5TdGDawZxG9at7EqtP+AqJ/1VEhScCt7EDdwV+2+itA59m1AsStxKLN44cM1mhUMuYOUc3gTK8vhryZbdAAHZjn5ODxFv3g4AeSHbnRC/klM+j8uMkStczLQkzjjXTHI= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=jfFHasCeYDvjcwDGfGspOWvETzvOhjLKWi1H16hKwftOLefWFZc60zEWJITG2KTPZhQtrDEayrjkOR+x6s5aOjEvCe8mMQPMzV0/Jx/4mAhz9jH3T8CDDZc0w/9n4yLadSjVuljF7NVitGyC+yJhV8S9mLooBRbLYCWLfFua5i0= Received: by 10.140.192.9 with SMTP id p9mr3114516rvf.114.1208769935223; Mon, 21 Apr 2008 02:25:35 -0700 (PDT) Received: by 10.140.134.18 with HTTP; Mon, 21 Apr 2008 02:25:35 -0700 (PDT) Message-ID: Date: Mon, 21 Apr 2008 11:25:35 +0200 From: "Zdenek Kabelac" To: "KOSAKI Motohiro" X-ASG-Orig-Subj: Re: OOM killer doesn't kill the right task.... Subject: Re: OOM killer doesn't kill the right task.... Cc: "David Chinner" , lkml , xfs-oss , linux-mm In-Reply-To: <20080421172255.C45A.KOSAKI.MOTOHIRO@jp.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <20080421070123.GM108924158@sgi.com> <20080421172255.C45A.KOSAKI.MOTOHIRO@jp.fujitsu.com> X-Barracuda-Connect: rv-out-0506.google.com[209.85.198.233] X-Barracuda-Start-Time: 1208769940 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.1, rules version 3.1.48398 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15513 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: zdenek.kabelac@gmail.com Precedence: bulk X-list: xfs 2008/4/21, KOSAKI Motohiro : > Hi David > > > Running in a 512MB UML system without swap, XFSQA test 084 reliably > > kills the kernel completely as the OOM killer is unable to find a > > task to kill. log output is below. > > > > I don't know when it started failing - ISTR this working just fine > > on 2.6.24 kernels. > > Can you reproduce it on non UML box? > Hi I'll add my comments to this discussion. I'm seeing recently also very strange OOM behavior when I limit memory in my qemu-kvm. There are few weird things: a) - if I call echo 3>/proc/sys/vm/drop_caches prior dselect in my case - the operation normaly proceeds and everything is fine b) - if the dselect is started and memory is low - either I get this crash or dselect simple gets killed - even thought obviously the memory is there and could be used for the task - because when the caches are dropped it is doable. Regards Zdenek Enjoy my backtrace: (Using latest 2.6.25 Linus-gits) Mem-info: DMA per-cpu: CPU 0: hi: 0, btch: 1 usd: 0 CPU 1: hi: 0, btch: 1 usd: 0 DMA32 per-cpu: CPU 0: hi: 90, btch: 15 usd: 90 CPU 1: hi: 90, btch: 15 usd: 87 Active:33126 inactive:0 dirty:0 writeback:0 unstable:0 free:732 slab:17423 mapped:0 pagetables:109 bounce:0 DMA free:1052kB min:120kB low:148kB high:180kB active:14880kB inactive:0kB present:15576kB pages_scanned:29604 all_unreclaimable? yes lowmem_reserve[]: 0 238 238 238 DMA32 free:1876kB min:1912kB low:2388kB high:2868kB active:117496kB inactive:88kB present:243940kB pages_scanned:177406 all_unreclaimable? no lowmem_reserve[]: 0 0 0 0 DMA: 1*4kB 1*8kB 1*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB 0*2048kB 0*4096kB = 1052kB DMA32: 32*4kB 3*8kB 3*16kB 0*32kB 0*64kB 1*128kB 0*256kB 1*512kB 1*1024kB 0*2048kB 0*4096kB = 1864kB 117 total pagecache pages Swap cache: add 0, delete 0, find 0/0 Free swap = 0kB Total swap = 0kB Free swap: 0kB 66544 pages of RAM 5711 reserved pages 82 pages shared 0 pages swap cached Out of memory: kill process 2530 (getty) score 26 or a child Killed process 2530 (getty) udevd invoked oom-killer: gfp_mask=0x1201d2, order=0, oomkilladj=-17 Pid: 507, comm: udevd Not tainted 2.6.25 #55 Call Trace: [] oom_kill_process+0x91/0x210 [] ? badness+0x168/0x200 [] out_of_memory+0x1b5/0x200 [] __alloc_pages+0x3bf/0x3f0 [] __do_page_cache_readahead+0x11e/0x260 [] do_page_cache_readahead+0x61/0x90 [] filemap_fault+0x372/0x510 [] __do_fault+0x68/0x490 [] ? put_lock_stats+0xe/0x30 [] handle_mm_fault+0x1c6/0x7c0 [] do_page_fault+0x3fc/0xad0 [] ? call_rcu+0x74/0xb0 [] ? call_rcu+0x82/0xb0 [] ? trace_hardirqs_on+0x131/0x190 [] ? mntput_no_expire+0x20/0x90 [] ? __fput+0x179/0x1b0 [] ? trace_hardirqs_on_thunk+0x35/0x3a [] ? trace_hardirqs_on+0x131/0x190 [] error_exit+0x0/0xa9 Mem-info: DMA per-cpu: CPU 0: hi: 0, btch: 1 usd: 0 CPU 1: hi: 0, btch: 1 usd: 0 DMA32 per-cpu: CPU 0: hi: 90, btch: 15 usd: 86 CPU 1: hi: 90, btch: 15 usd: 87 Active:33097 inactive:0 dirty:0 writeback:0 unstable:0 free:725 slab:17432 mapped:1 pagetables:109 bounce:0 DMA free:1052kB min:120kB low:148kB high:180kB active:14848kB inactive:0kB present:15576kB pages_scanned:29796 all_unreclaimable? yes lowmem_reserve[]: 0 238 238 238 DMA32 free:1848kB min:1912kB low:2388kB high:2868kB active:117540kB inactive:0kB present:243940kB pages_scanned:54533 all_unreclaimable? no lowmem_reserve[]: 0 0 0 0 DMA: 1*4kB 1*8kB 1*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB 0*2048kB 0*4096kB = 1052kB DMA32: 30*4kB 4*8kB 3*16kB 0*32kB 0*64kB 1*128kB 0*256kB 1*512kB 1*1024kB 0*2048kB 0*4096kB = 1864kB 116 total pagecache pages Swap cache: add 0, delete 0, find 0/0 Free swap = 0kB Total swap = 0kB Free swap: 0kB 66544 pages of RAM 5711 reserved pages 81 pages shared 0 pages swap cached Out of memory: kill process 2531 (getty) score 26 or a child Killed process 2531 (getty) udevd invoked oom-killer: gfp_mask=0x1201d2, order=0, oomkilladj=-17 Pid: 2848, comm: udevd Not tainted 2.6.25 #55 Call Trace: [] oom_kill_process+0x91/0x210 [] ? badness+0x168/0x200 [] out_of_memory+0x1b5/0x200 [] __alloc_pages+0x3bf/0x3f0 [] __do_page_cache_readahead+0x11e/0x260 [] do_page_cache_readahead+0x61/0x90 [] filemap_fault+0x372/0x510 [] __do_fault+0x68/0x490 [] ? put_lock_stats+0xe/0x30 [] handle_mm_fault+0x1c6/0x7c0 [] do_page_fault+0x3fc/0xad0 [] ? kmem_cache_free+0xaf/0x110 [] ? d_free+0x6c/0x80 [] ? d_kill+0x3b/0x60 [] ? mntput_no_expire+0x20/0x90 [] ? __fput+0x179/0x1b0 [] ? trace_hardirqs_on_thunk+0x35/0x3a [] ? trace_hardirqs_on+0x131/0x190 [] error_exit+0x0/0xa9 Mem-info: DMA per-cpu: CPU 0: hi: 0, btch: 1 usd: 0 CPU 1: hi: 0, btch: 1 usd: 0 DMA32 per-cpu: CPU 0: hi: 90, btch: 15 usd: 83 CPU 1: hi: 90, btch: 15 usd: 79 Active:33104 inactive:45 dirty:0 writeback:0 unstable:0 free:728 slab:17406 mapped:0 pagetables:103 bounce:0 DMA free:1052kB min:120kB low:148kB high:180kB active:14864kB inactive:0kB present:15576kB pages_scanned:30052 all_unreclaimable? yes lowmem_reserve[]: 0 238 238 238 DMA32 free:1860kB min:1912kB low:2388kB high:2868kB active:117680kB inactive:52kB present:243940kB pages_scanned:218359 all_unreclaimable? yes lowmem_reserve[]: 0 0 0 0 DMA: 1*4kB 1*8kB 1*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB 0*2048kB 0*4096kB = 1052kB DMA32: 39*4kB 1*8kB 3*16kB 0*32kB 0*64kB 1*128kB 0*256kB 1*512kB 1*1024kB 0*2048kB 0*4096kB = 1876kB 119 total pagecache pages Swap cache: add 0, delete 0, find 0/0 Free swap = 0kB Total swap = 0kB Free swap: 0kB 66544 pages of RAM 5711 reserved pages 80 pages shared 0 pages swap cached Out of memory: kill process 2532 (getty) score 26 or a child Killed process 2532 (getty) init invoked oom-killer: gfp_mask=0x1201d2, order=0, oomkilladj=0 Pid: 1, comm: init Not tainted 2.6.25 #55 Call Trace: [] oom_kill_process+0x91/0x210 [] ? badness+0x168/0x200 [] out_of_memory+0x1b5/0x200 [] __alloc_pages+0x3bf/0x3f0 [] __do_page_cache_readahead+0x11e/0x260 [] do_page_cache_readahead+0x61/0x90 [] filemap_fault+0x372/0x510 [] __do_fault+0x68/0x490 [] ? put_lock_stats+0xe/0x30 [] handle_mm_fault+0x1c6/0x7c0 [] do_page_fault+0x3fc/0xad0 [] ? _spin_unlock+0x30/0x60 [] ? mntput_no_expire+0x20/0x90 [] ? path_put+0x2c/0x40 [] ? sys_faccessat+0x1ba/0x1c0 [] ? trace_hardirqs_on_thunk+0x35/0x3a [] ? trace_hardirqs_on+0x131/0x190 [] error_exit+0x0/0xa9 Mem-info: DMA per-cpu: CPU 0: hi: 0, btch: 1 usd: 0 CPU 1: hi: 0, btch: 1 usd: 0 DMA32 per-cpu: CPU 0: hi: 90, btch: 15 usd: 86 CPU 1: hi: 90, btch: 15 usd: 77 Active:33185 inactive:12 dirty:0 writeback:0 unstable:0 free:741 slab:17370 mapped:0 pagetables:106 bounce:0 DMA free:1052kB min:120kB low:148kB high:180kB active:14848kB inactive:0kB present:15576kB pages_scanned:27115 all_unreclaimable? yes lowmem_reserve[]: 0 238 238 238 DMA32 free:1912kB min:1912kB low:2388kB high:2868kB active:117940kB inactive:0kB present:243940kB pages_scanned:222562 all_unreclaimable? yes lowmem_reserve[]: 0 0 0 0 DMA: 1*4kB 1*8kB 1*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB 0*2048kB 0*4096kB = 1052kB DMA32: 48*4kB 1*8kB 3*16kB 0*32kB 0*64kB 1*128kB 0*256kB 1*512kB 1*1024kB 0*2048kB 0*4096kB = 1912kB 110 total pagecache pages Swap cache: add 0, delete 0, find 0/0 Free swap = 0kB Total swap = 0kB Free swap: 0kB 66544 pages of RAM 5711 reserved pages 129 pages shared 0 pages swap cached Out of memory: kill process 2533 (getty) score 26 or a child Killed process 2533 (getty) udevd invoked oom-killer: gfp_mask=0x1201d2, order=0, oomkilladj=-17 Pid: 2848, comm: udevd Not tainted 2.6.25 #55 Call Trace: [] oom_kill_process+0x91/0x210 [] ? badness+0x168/0x200 [] out_of_memory+0x1b5/0x200 [] __alloc_pages+0x3bf/0x3f0 [] __do_page_cache_readahead+0x11e/0x260 [] do_page_cache_readahead+0x61/0x90 [] filemap_fault+0x372/0x510 [] __do_fault+0x68/0x490 [] ? put_lock_stats+0xe/0x30 [] handle_mm_fault+0x1c6/0x7c0 [] do_page_fault+0x3fc/0xad0 [] ? put_lock_stats+0xe/0x30 [] ? _spin_unlock_irqrestore+0x65/0x90 [] ? trace_hardirqs_on+0x131/0x190 [] ? _spin_unlock_irqrestore+0x45/0x90 [] ? hrtick_set+0x7a/0x130 [] ? thread_return+0x9e/0x571 [] ? mntput_no_expire+0x20/0x90 [] ? trace_hardirqs_on_thunk+0x35/0x3a [] ? trace_hardirqs_on+0x131/0x190 [] error_exit+0x0/0xa9 Mem-info: DMA per-cpu: CPU 0: hi: 0, btch: 1 usd: 0 CPU 1: hi: 0, btch: 1 usd: 0 DMA32 per-cpu: CPU 0: hi: 90, btch: 15 usd: 82 CPU 1: hi: 90, btch: 15 usd: 86 Active:33076 inactive:110 dirty:0 writeback:0 unstable:0 free:743 slab:17354 mapped:4 pagetables:103 bounce:0 DMA free:1052kB min:120kB low:148kB high:180kB active:14864kB inactive:0kB present:15576kB pages_scanned:27435 all_unreclaimable? yes lowmem_reserve[]: 0 238 238 238 DMA32 free:1884kB min:1912kB low:2388kB high:2868kB active:117568kB inactive:292kB present:243940kB pages_scanned:101687 all_unreclaimable? no lowmem_reserve[]: 0 0 0 0 DMA: 1*4kB 1*8kB 1*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB 0*2048kB 0*4096kB = 1052kB DMA32: 41*4kB 1*8kB 3*16kB 0*32kB 0*64kB 1*128kB 0*256kB 1*512kB 1*1024kB 0*2048kB 0*4096kB = 1884kB 113 total pagecache pages Swap cache: add 0, delete 0, find 0/0 Free swap = 0kB Total swap = 0kB Free swap: 0kB 66544 pages of RAM 5711 reserved pages 140 pages shared 0 pages swap cached Out of memory: kill process 2534 (getty) score 26 or a child Killed process 2534 (getty) Kernel panic - not syncing: Out of memory and no killable processes... From owner-xfs@oss.sgi.com Mon Apr 21 02:46:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 02:46:22 -0700 (PDT) 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,J_CHICKENPOX_74 autolearn=no 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 m3L9k0iF032101 for ; Mon, 21 Apr 2008 02:46:03 -0700 X-ASG-Debug-ID: 1208771202-601203d70000-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 53292151FCBF; Mon, 21 Apr 2008 02:46:42 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 0ACQuz2K8i7T13Wk; Mon, 21 Apr 2008 02:46:42 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jnsbh-0003qc-Vq; Mon, 21 Apr 2008 09:46:41 +0000 Date: Mon, 21 Apr 2008 05:46:41 -0400 From: Christoph Hellwig To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 2/4] XFS: Return case-insensitive match for dentry cache Subject: Re: [PATCH 2/4] XFS: Return case-insensitive match for dentry cache Message-ID: <20080421094641.GA5191@infradead.org> References: <20080421083103.433280025@chook.melbourne.sgi.com> <20080421083644.809426871@chook.melbourne.sgi.com> <20080421085947.GA10399@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080421085947.GA10399@infradead.org> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1208771202 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.1, rules version 3.1.48398 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15514 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs > > +kmem_zone_t *xfs_name_zone; > > What about just using kmalloc here? We know the length of the name > anyway, so there is no point of allocating the maximum possible size. > > > error = xfs_iget(dp->i_mount, NULL, inum, 0, 0, ipp, 0); > > - if (error) > > + if (error) { > > + if (ci_match && *ci_match) > > + xfs_name_free(name->name); > > goto out; > > + } > > All the allocation and freeing for ci_match looks odd and error prone > to me. I think the low-level directory code should never allocate > args->value unless it's explicitly asked for a CI match. That way > there's only one place in xfs_ci_lookup to free it either. Also the low-level name duplication code could be factored out a little more ala: /* * If a case-insensitive match, allocate a buffer and copy the actual * name into the buffer. Return it via args->value. */ void xfs_copy_ci_name(struct xfs_da_args *args, const char *name, int namelen) { if (args->return_ci_name && args->cmpresult == XFS_CMP_CASE) { args->valuelen = namelen; args->value = kmemdup(name, namelen, GFP_NOFS); /* error handled in higher layers */ } } Instead of adding args->return_ci_name it might make sense to just replace the last four chars there with an unsigned short lookup_flags and just set bits in it. From owner-xfs@oss.sgi.com Mon Apr 21 04:07:21 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 04:07:41 -0700 (PDT) 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.0 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 m3LB7Ikv004818 for ; Mon, 21 Apr 2008 04:07:19 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id VAA17505; Mon, 21 Apr 2008 21:07:53 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3LB7psT140475884; Mon, 21 Apr 2008 21:07:52 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3LB7mtr140587272; Mon, 21 Apr 2008 21:07:48 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 21 Apr 2008 21:07:48 +1000 From: David Chinner To: KOSAKI Motohiro Cc: David Chinner , lkml , xfs-oss , linux-mm Subject: Re: OOM killer doesn't kill the right task.... Message-ID: <20080421110748.GN108924158@sgi.com> References: <20080421070123.GM108924158@sgi.com> <20080421172255.C45A.KOSAKI.MOTOHIRO@jp.fujitsu.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080421172255.C45A.KOSAKI.MOTOHIRO@jp.fujitsu.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15515 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 21, 2008 at 05:24:04PM +0900, KOSAKI Motohiro wrote: > Hi David > > > Running in a 512MB UML system without swap, XFSQA test 084 reliably > > kills the kernel completely as the OOM killer is unable to find a > > task to kill. log output is below. > > > > I don't know when it started failing - ISTR this working just fine > > on 2.6.24 kernels. > > Can you reproduce it on non UML box? Not exactly. On a 64k page size ia64 box it kills my ssh session and all it's children which includes the errant process (log below). It doesn't kill the machine, but if I cared enough I'd argue that even that is killing the wrong process because it's pretty damn clear that the only process on the box using more than a couple of MB of memory is the resvtest program.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group resvtest invoked oom-killer: gfp_mask=0x1280d2, order=0, oomkilladj=0 Call Trace: [] show_stack+0x40/0xa0 sp=e000003022f0fb20 bsp=e000003022f01168 [] dump_stack+0x30/0x60 sp=e000003022f0fcf0 bsp=e000003022f01150 [] oom_kill_process+0x80/0x3a0 sp=e000003022f0fcf0 bsp=e000003022f010f8 [] out_of_memory+0x4e0/0x660 sp=e000003022f0fd00 bsp=e000003022f010b0 [] __alloc_pages+0x500/0x620 sp=e000003022f0fd90 bsp=e000003022f01040 [] alloc_page_vma+0x1c0/0x200 sp=e000003022f0fda0 bsp=e000003022f01008 [] handle_mm_fault+0x3a0/0xe60 sp=e000003022f0fda0 bsp=e000003022f00f88 [] ia64_do_page_fault+0x2a0/0xaa0 sp=e000003022f0fda0 bsp=e000003022f00f30 [] ia64_leave_kernel+0x0/0x270 sp=e000003022f0fe30 bsp=e000003022f00f30 Mem-info: Node 0 Normal per-cpu: CPU 0: hi: 0, btch: 1 usd: 0 CPU 1: hi: 0, btch: 1 usd: 0 CPU 2: hi: 0, btch: 1 usd: 0 CPU 3: hi: 0, btch: 1 usd: 0 Active:5044 inactive:64 dirty:0 writeback:0 unstable:0 free:34 slab:1110 mapped:6 pagetables:104 bounce:0 Node 0 Normal free:2176kB min:2880kB low:3584kB high:4288kB active:322816kB inactive:4096kB present:523776kB pages_scanned:32980 all_unreclaimable? yes lowmem_reserve[]: 0 0 Node 0 Normal: 2*64kB 2*128kB 0*256kB 0*512kB 0*1024kB 1*2048kB 0*4096kB 0*8192kB 0*16384kB 0*32768kB 0*65536kB 0*131072kB 0*262144kB 0*524288kB 0*1048576kB 0*2097152kB 0*4194304kB = 2432kB 76 total pagecache pages Swap cache: add 0, delete 0, find 0/0 Free swap = 0kB Total swap = 0kB Free swap: 0kB Node memory in pages: Node 0: RAM: 8192, rsvd: 1327, shrd: 129, swpd: 0 Node 1: RAM: 0, rsvd: 0, shrd: 0, swpd: 0 8192 pages of RAM 1327 reserved pages 129 pages shared 0 pages swap cached Total of 45 pages in page table cache 8117 free buffer pages Out of memory: kill process 2908 (sshd) score 379 or a child Killed process 2909 (bash) From owner-xfs@oss.sgi.com Mon Apr 21 12:43:45 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 12:44:14 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,SUBJ_FORWARDED 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 m3LJhfvl019616 for ; Mon, 21 Apr 2008 12:43:44 -0700 X-ASG-Debug-ID: 1208807053-320d030a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail2514.carrierzone.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A038912A3D47 for ; Mon, 21 Apr 2008 12:44:13 -0700 (PDT) Received: from mail2514.carrierzone.com (mail2514.carrierzone.com [64.29.147.24]) by cuda.sgi.com with ESMTP id gL0jZiqBK5TxFmJG for ; Mon, 21 Apr 2008 12:44:13 -0700 (PDT) X-Authenticated-User: support.geoglobal.com Received: from ggrmilesl.geoglobal.ca ([68.145.110.189]) (authenticated bits=0) by mail2514.carrierzone.com (8.13.6.20060614/8.13.1) with ESMTP id m3LJhtIB016378; Mon, 21 Apr 2008 19:43:57 GMT From: support@geoglobal.com To: xfs@oss.sgi.com, vincent.roy@geoglobal.com X-ASG-Orig-Subj: Fwd: xfs_repair -n report Subject: Fwd: xfs_repair -n report Date: Mon, 21 Apr 2008 14:52:01 -0600 User-Agent: KMail/1.9.1 MIME-Version: 1.0 Message-Id: <200804211452.01772.support@geoglobal.com> Content-Type: Multipart/Mixed; boundary="Boundary-00=_x5PDI3/s7NqIIFU" X-Barracuda-Connect: mail2514.carrierzone.com[64.29.147.24] X-Barracuda-Start-Time: 1208807054 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0015 1.0000 -2.0115 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.46 X-Barracuda-Spam-Status: No, SCORE=-0.46 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M, BSF_SC0_SA042a, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48438 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.55 NO_REAL_NAME From: does not include a real name 0.50 BSF_RULE7568M Custom Rule 7568M 0.50 BSF_SC0_SA042a Custom Rule SA042a X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15516 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: support@geoglobal.com Precedence: bulk X-list: xfs --Boundary-00=_x5PDI3/s7NqIIFU Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Sorry, I truncated the original logfile of 128MB to a short version for review. Again, all comments welcome. Regards, Vincent ---------- Forwarded Message ---------- Subject: xfs_repair -n report Date: Saturday 19 April 2008 23:22 From: support@geoglobal.com To: xfs@oss.sgi.com, vincent.roy@geoglobal.com RAID 5 - 4 disks on 9550 AMCC production machine / backup disk failed also verified without error - rebuilt after abrupt power shut down cannot mount - inconsistencies indicated - could not dump fs Here is testfile based xfs_repair -n Please help in anyway. All comments welcome.... Regards, Vincent ------------------------------------------------------- --Boundary-00=_x5PDI3/s7NqIIFU Content-Type: application/x-zerosize; name="testfile" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="testfile" --Boundary-00=_x5PDI3/s7NqIIFU Content-Type: text/rtf; charset="iso-8859-1"; name="testfile_raid.rtf" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="testfile_raid.rtf" {\rtf1\ansi\deff0\adeflang1025 {\fonttbl{\f0\froman\fprq2\fcharset0 Thorndale AMT{\*\falt Times New Roman};}{\f1\froman\fprq2\fcharset0 Thorndale AMT{\*\falt Times New Roman};}{\f2\fswiss\fprq2\fcharset0 Albany AMT{\*\falt Arial};}{\f3\fmodern\fprq1\fcharset0 Cumberland AMT{\*\falt Courier New};}{\f4\fnil\fprq2\fcharset0 Albany AMT{\*\falt Arial};}{\f5\fnil\fprq2\fcharset0 Lucidasans;}{\f6\fnil\fprq0\fcharset0 Lucidasans;}} {\colortbl;\red0\green0\blue0;\red128\green128\blue128;} {\stylesheet{\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057\snext1 Normal;} {\s2\sb240\sa120\keepn\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\afs28\lang255\ltrch\dbch\langfe255\hich\f2\fs28\lang2057\loch\f2\fs28\lang2057\sbasedon1\snext3 Heading;} {\s3\sa120\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057\sbasedon1\snext3 Body Text;} {\s4\sa120\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af6\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057\sbasedon3\snext4 List;} {\s5\sb120\sa120\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af6\afs24\lang255\ai\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\i\loch\f0\fs24\lang2057\i\sbasedon1\snext5 caption;} {\s6\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af6\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057\sbasedon1\snext6 Index;} {\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057\sbasedon1\snext7 Preformatted Text;} } {\info{\creatim\yr2008\mo4\dy21\hr14\min29}{\revtim\yr2008\mo4\dy21\hr14\min46}{\printim\yr1601\mo1\dy1\hr0\min0}{\comment StarWriter}{\vern6800}}\deftab709 {\*\pgdsctbl {\pgdsc0\pgdscuse195\pgwsxn11905\pghsxn16837\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\pgdscnxt0 Standard;}} \paperh16837\paperw11905\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\pgwsxn11905\pghsxn16837\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 Phase 1 - find and verify superblock...} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 Phase 2 - using internal log} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 - scan filesystem freespace and inode maps...} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 bad magic # 0x58418710 for agi 0} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 bad version # 2 for agi 0} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 would reset bad agi for ag 0} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 bad uncorrected agheader 0, skipping ag...} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 bad magic # 0x4142940a in btcnt block 7/2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 expected level 0 got 3 in btcnt block 7/2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,288) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,289) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,296) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,297) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,302) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,296) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,297) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,298) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,333) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,334) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,403) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 inode chunk claims used block, inobt block - agno 7, bno 3, inopb 16} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (14,421692) multiply claimed by bno space tree, state - 1} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (14,421693) multiply claimed by bno space tree, state - 1} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (14,421694) multiply claimed by bno space tree, state \uc3 \u8211\'e2\'80\'93\uc1 1} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (14,971003) multiply claimed by bno space tree, state - 1} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (14,971004) multiply claimed by bno space tree, state - 1} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (14,971005) multiply claimed by bno space tree, state - 1} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 inode chunk claims used block, inobt block - agno 14, bno 3, inopb 16} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 inode chunk claims used block, inobt block - agno 14, bno 3, inopb 16} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 inode chunk claims used block, inobt block - agno 14, bno 3, inopb 16} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 inode chunk claims used block, inobt block - agno 14, bno 3, inopb 16} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic # 0xf816dffa in btcnt block 16/171879} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 expected level 1 got 26155 in btcnt block 16/171879} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,5978200) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,5978203) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,5978205) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,5978207) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,68745) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,860197) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,785480) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,1866283) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic # 0x9ded151b in btbno block 22/2314} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 expected level 0 got 46701 in btbno block 22/2314} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (22,110646) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (22,129495) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (22,129496) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (22,348309) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (22,348310) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (22,53743) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic # 0xa6bceb7b in btcnt block 25/44818} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 expected level 0 got 55508 in btcnt block 25/44818} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (25,208993) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (25,160757) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic # 0xbe425443 in btcnt block 27/26679} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (27,201095) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (27,201096) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .block (27,4619369) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (27,4619370) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (27,4619371) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 root inode chunk not found} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 Phase 3 - for each AG...} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 - scan (but don't clear) agi unlinked lists...} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 error following ag 0 unlinked list} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 found inodes not in the inode allocation tree} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 found inodes not in the inode allocation tree} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 - process known inodes and perform inode discovery...} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 - agno = 0} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode 131 is free, would correct imap} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode 132 is free, would correct imap} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode 133 is free, would correct imap} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode 188 is free, would correct imap} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode 189 is free, would correct imap} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode 190 is free, would correct imap} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode 191 is free, would correct imap} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 - agno = 1} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad bestfree table in block 5 in directory inode 268435584: would repair table} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 268435720 claims free block 369517041} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 268435720 claims free block 369517042} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 268435720 claims free block 369517043} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 270738556 claims free block 471793209} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 270738556 claims free block 471793210} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 270738556 claims free block 471793211} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad nblocks 5 for inode 270738556, would reset to 97} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode 270738556 is free, would correct imap} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 270738557} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 270738557} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 270738558} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 270738558} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 270738559} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 270738559} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 270738592} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 270738593} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 270738594} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 270738753} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 270738753} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 270738901 claims used block 251703131} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 270738901} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 270738901} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 - agno = 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad . entry in directory inode 536871040, was 536871045: would correct} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad . entry in directory inode 536871041, was 536871040: would correct} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad . entry in directory inode 536871045, was 536871049: would correct} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad . entry in directory inode 536871047, was 536871830: would correct} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad directory block magic # 0x58443242 in block 1 for directory inode 536871055} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 corrupt block 1 in directory inode 536871055} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 \tab would junk block} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 536871085 claims free block 419433502} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 536871092 claims free block 469762257} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 536871096 claims free block 143352225} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 536871096 claims free block 143352226} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 corrupt block 0 in directory inode 536871099} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 \tab would junk block} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no . entry for directory 536871099} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no .. entry for directory 536871099} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 problem with directory contents in inode 536871099} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 536871099} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 536871102 claims free block 134321130} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 536871102 claims free block 134321131} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 536871102 claims free block 134321132} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179589 claims free block 286348755} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179589 claims free block 286348756} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179589 claims free block 286348757} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179590 claims used block 303545771} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179590} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179590} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179591 claims used block 486729909} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179591} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179591} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179592 data fork is too large (size = 4939602, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179592} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179592} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179593 data fork is too large (size = 4168798, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179593} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179593} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179594 data fork is too large (size = 4325755, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179594} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179594} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179595 data fork is too large (size = 3233338, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179595} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179595} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179596 data fork is too large (size = 10360806, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179596} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179596} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179597 data fork is too large (size = 9502373, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179597} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179597} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179598 data fork is too large (size = 3250076, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179598} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179598} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179599 data fork is too large (size = 3133743, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179599} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179599} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179600 data fork is too large (size = 4085608, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179600} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179600} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179601 claims used block 285233312} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179601} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179601} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179602 data fork is too large (size = 3410791, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179602} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179602} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179603 data fork is too large (size = 2044592, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179603} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179603} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179604 data fork is too large (size = 3109201, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179604} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179604} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179605 data fork is too large (size = 1523100, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179605} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179605} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179606 data fork is too large (size = 1811725, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179606} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179606} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179607 data fork is too large (size = 1659849, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179607} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179607} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179608 claims used block 285322819} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179608} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179608} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179609 claims free block 436897527} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179609 claims free block 436897528} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179609 claims free block 436897529} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179614 claims free block 286243438} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179614 claims free block 286243439} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179615 claims used block 302854456} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179615} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179615} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2 on inode 1342179616} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179616} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xbbf7 on inode 1342179617} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x64 on inode 1342179617} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179617} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x4727 on inode 1342179618} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x43 on inode 1342179618} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179618} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x7649 on inode 1342179619} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffc1 on inode 1342179619} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179619} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x8985 on inode 1342179620} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffc1 on inode 1342179620} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179620} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x327b on inode 1342179621} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x57 on inode 1342179621} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179621} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x7627 on inode 1342179622} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3e on inode 1342179622} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179622} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5956 on inode 1342179623} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x5b on inode 1342179623} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179623} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x374a on inode 1342179624} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x7f on inode 1342179624} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179624} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x77ca on inode 1342179625} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3f on inode 1342179625} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179625} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x1983 on inode 1342179626} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x10 on inode 1342179626} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179626} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x3ef6 on inode 1342179627} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x70 on inode 1342179627} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179627} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x77a2 on inode 1342179628} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3f on inode 1342179628} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179628} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x3ed2 on inode 1342179629} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x7a on inode 1342179629} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179629} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x7791 on inode 1342179630} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3f on inode 1342179630} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179630} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x3bc2 on inode 1342179631} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x10 on inode 1342179631} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179631} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2 on inode 1342179616, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179616} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179616} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xbbf7 on inode 1342179617, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x64 on inode 1342179617, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179617} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179617} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x4727 on inode 1342179618, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x43 on inode 1342179618, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179618} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179618} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x7649 on inode 1342179619, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffc1 on inode 1342179619, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179619} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179619} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x8985 on inode 1342179620, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffc1 on inode 1342179620, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179620} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179620} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x327b on inode 1342179621, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x57 on inode 1342179621, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179621} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179621} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x7627 on inode 1342179622, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3e on inode 1342179622, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179622} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179622} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5956 on inode 1342179623, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x5b on inode 1342179623, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179623} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179623} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x374a on inode 1342179624, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x7f on inode 1342179624, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179624} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179624} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x77ca on inode 1342179625, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3f on inode 1342179625, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179625} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179625} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x1983 on inode 1342179626, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x10 on inode 1342179626, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179626} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179626} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x3ef6 on inode 1342179627, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x70 on inode 1342179627, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179627} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179627} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x77a2 on inode 1342179628, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3f on inode 1342179628, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179628} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179628} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x3ed2 on inode 1342179629, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x7a on inode 1342179629, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179629} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179629} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x7791 on inode 1342179630, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3f on inode 1342179630, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179630} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179630} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x3bc2 on inode 1342179631, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x10 on inode 1342179631, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179631} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179631} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179632 data fork is too large (size = 196095, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179632} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179632} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179633 data fork is too large (size = 366190, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179633} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179633} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179634 claims used block 235047448} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179634} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179634} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179635 data fork is too large (size = 395536, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179635} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179635} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179636 claims used block 235008106} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179636} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179636} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad bmap btree ptr 0xc13a8acad6eab189 in ino 1342179639} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179639} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179639} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179640 claims used block 167823233} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179640} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179640} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179642 data fork is too large (size = 210763, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179642} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179642} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad size/format for directory 1342179643} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 problem with directory contents in inode 1342179643} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179643} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 mismatch between format (1) and size (176557) in symlink inode 1342179645} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in symlink 1342179645} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179645} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 mismatch between format (1) and size (541891) in symlink inode 1342179646} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in symlink 1342179646} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179646} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 mismatch between format (1) and size (528780) in symlink inode 1342179647} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in symlink 1342179647} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179647} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 mismatch between format (1) and size (97776) in symlink inode 1342179648} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in symlink 1342179648} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179648} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 mismatch between format (1) and size (71351) in symlink inode 1342179649} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in symlink 1342179649} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179649} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179654 claims used block 521054414} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179654} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179654} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179665 claims used block 135191770} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179665} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179665} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179670 claims free block 235329860} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179670 claims free block 235329861} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179670 claims free block 235329862} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342181150 claims free block 387842929} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342181150 claims free block 387842930} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342181150 claims free block 387842931} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181186} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181200} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181201} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181202} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181203} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181204} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181205} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2 on inode 1342181216} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -8098840690732274055 on inode 1342181217} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x1b20 on inode 1342181218} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xd on inode 1342181218} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -44603782713929781 on inode 1342181218} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xaf88 on inode 1342181219} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffff9f on inode 1342181219} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181219} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xaf97 on inode 1342181220} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x64 on inode 1342181220} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -8598615031889885277 on inode 1342181220} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x4ed7 on inode 1342181221} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffab on inode 1342181221} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -7421484120082124244 on inode 1342181221} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xc784 on inode 1342181222} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffff97 on inode 1342181222} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -7039745431618388759 on inode 1342181222} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x8654 on inode 1342181223} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffff94 on inode 1342181223} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -7892964874975931737 on inode 1342181223} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb2b2 on inode 1342181224} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffffd on inode 1342181224} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -2741290762856431056 on inode 1342181224} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb5f1 on inode 1342181225} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffffd on inode 1342181225} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -145244644254024567 on inode 1342181225} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf045 on inode 1342181226} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffac on inode 1342181226} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -216457572855644921 on inode 1342181226} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb486 on inode 1342181227} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffffc on inode 1342181227} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -4785780517491573548 on inode 1342181227} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xcb3 on inode 1342181228} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffff5 on inode 1342181228} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -218990860528255687 on inode 1342181228} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb449 on inode 1342181229} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffffc on inode 1342181229} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -215894529477870567 on inode 1342181229} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x953a on inode 1342181230} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffd3 on inode 1342181230} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -4040222610815773810 on inode 1342181230} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x899d on inode 1342181231} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2 on inode 1342181231} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -6137713694427973127 on inode 1342181231} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x672a on inode 1342181233} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xc on inode 1342181233} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181233} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181186} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181186} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181187 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181188 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181189 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181190 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181191 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181192 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181193 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181194 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181195 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181196 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181197 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181198 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181199 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181200} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181200} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181201} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181201} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181202} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181202} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181203} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181203} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181204} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181204} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181205} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181205} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181206 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181207 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181208 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181209 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181210 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181211 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181212 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181213 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181214 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181215 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2 on inode 1342181216, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181216 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181216} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -8098840690732274055 on inode 1342181217} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181217} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x1b20 on inode 1342181218, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xd on inode 1342181218, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -44603782713929781 on inode 1342181218} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181218} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xaf88 on inode 1342181219, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffff9f on inode 1342181219, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181219} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181219} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xaf97 on inode 1342181220, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x64 on inode 1342181220, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -8598615031889885277 on inode 1342181220} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181220} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x4ed7 on inode 1342181221, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffab on inode 1342181221, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -7421484120082124244 on inode 1342181221} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181221} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xc784 on inode 1342181222, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffff97 on inode 1342181222, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -7039745431618388759 on inode 1342181222} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181222} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x8654 on inode 1342181223, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffff94 on inode 1342181223, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -7892964874975931737 on inode 1342181223} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181223} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb2b2 on inode 1342181224, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffffd on inode 1342181224, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -2741290762856431056 on inode 1342181224} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181224} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb5f1 on inode 1342181225, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffffd on inode 1342181225, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -145244644254024567 on inode 1342181225} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181225} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf045 on inode 1342181226, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffac on inode 1342181226, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -216457572855644921 on inode 1342181226} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181226} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb486 on inode 1342181227, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffffc on inode 1342181227, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -4785780517491573548 on inode 1342181227} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181227} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xcb3 on inode 1342181228, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffff5 on inode 1342181228, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -218990860528255687 on inode 1342181228} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181228} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb449 on inode 1342181229, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffffc on inode 1342181229, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -215894529477870567 on inode 1342181229} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181229} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x953a on inode 1342181230, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffd3 on inode 1342181230, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -4040222610815773810 on inode 1342181230} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181230} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x899d on inode 1342181231, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2 on inode 1342181231, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -6137713694427973127 on inode 1342181231} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181231} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181232 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x672a on inode 1342181233, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xc on inode 1342181233, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181233} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181233} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181234 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181235 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181236 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181237 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181238 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181239 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181240 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181241 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181242 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181243 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181244 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181245 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181246 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181247 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xf on inode 1342181296} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -8531373024821224668 on inode 1342181297} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x297c on inode 1342181298} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x56 on inode 1342181298} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181298} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5544 on inode 1342181299} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x1b on inode 1342181299} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181299} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x464e on inode 1342181300} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x52 on inode 1342181300} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181300} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xd440 on inode 1342181301} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x33 on inode 1342181301} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181301} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xd4b1 on inode 1342181302} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffc0 on inode 1342181302} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -5714591680202162485 on inode 1342181302} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x82d7 on inode 1342181303} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffff8b on inode 1342181303} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -4027625441752728915 on inode 1342181303} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf0b9 on inode 1342181304} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffa0 on inode 1342181304} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -1404089711421248255 on inode 1342181304} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xa8cf on inode 1342181305} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffca on inode 1342181305} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181305} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5b52 on inode 1342181306} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x44 on inode 1342181306} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181306} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5d51 on inode 1342181311} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x65 on inode 1342181311} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181311} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x7 on inode 1342181312} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x2d28 on inode 1342181313} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x78 on inode 1342181313} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181313} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x641a on inode 1342181314} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2a on inode 1342181314} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181314} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x5 on inode 1342181328} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xa3fc on inode 1342181329} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x8381 on inode 1342181330} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x65 on inode 1342181330} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181330} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf2b7 on inode 1342181331} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x15 on inode 1342181331} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf2b3 on inode 1342181332} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x15 on inode 1342181332} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181332} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf543 on inode 1342181333} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x12 on inode 1342181333} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181333} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf55d on inode 1342181334} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181334} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342181281 claims free block 83886335} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 corrupt block 0 in directory inode 1342181281} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 \tab would junk block} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no . entry for directory 1342181281} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no .. entry for directory 1342181281} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 problem with directory contents in inode 1342181281} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181281} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342181282 claims free block 83886334} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 corrupt block 0 in directory inode 1342181282} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 \tab would junk block} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no . entry for directory 1342181282} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no .. entry for directory 1342181282} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 problem with directory contents in inode 1342181282} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181282} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342181283 claims free block 83886340} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad directory block magic # 0x5844b3a6 in block 0 for directory inode 1342181283} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 corrupt block 0 in directory inode 1342181283} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 \tab would junk block} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no . entry for directory 1342181283} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no .. entry for directory 1342181283} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 problem with directory contents in inode 1342181283} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181283} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342181290 claims free block 83886341} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181292 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181293 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181294 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181295 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xf on inode 1342181296, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181296 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181296} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -8531373024821224668 on inode 1342181297} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181297} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x297c on inode 1342181298, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x56 on inode 1342181298, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181298} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181298} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5544 on inode 1342181299, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x1b on inode 1342181299, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181299} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181299} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x464e on inode 1342181300, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x52 on inode 1342181300, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181300} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181300} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xd440 on inode 1342181301, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x33 on inode 1342181301, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181301} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181301} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xd4b1 on inode 1342181302, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffc0 on inode 1342181302, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -5714591680202162485 on inode 1342181302} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181302} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x82d7 on inode 1342181303, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffff8b on inode 1342181303, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -4027625441752728915 on inode 1342181303} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181303} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf0b9 on inode 1342181304, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffa0 on inode 1342181304, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -1404089711421248255 on inode 1342181304} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181304} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xa8cf on inode 1342181305, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffca on inode 1342181305, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181305} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181305} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5b52 on inode 1342181306, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x44 on inode 1342181306, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181306} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181306} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181307 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181308 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181309 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181310 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5d51 on inode 1342181311, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x65 on inode 1342181311, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181311} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181311} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x7 on inode 1342181312, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181312 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181312} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x2d28 on inode 1342181313, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x78 on inode 1342181313, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181313} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181313} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x641a on inode 1342181314, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2a on inode 1342181314, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181314} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181314} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181315 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181316 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181317 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181318 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181319 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181320 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181321 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181322 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181323 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181324 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181325 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181326 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181327 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x5 on inode 1342181328, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181328 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181328} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xa3fc on inode 1342181329, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 mismatch between format (2) and size (56) in directory ino 1342181329} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181329} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x8381 on inode 1342181330, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x65 on inode 1342181330, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181330} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181330} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf2b7 on inode 1342181331, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x15 on inode 1342181331, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 Unexpected inode type 0160000 inode 1342181331} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 \par } --Boundary-00=_x5PDI3/s7NqIIFU-- From owner-xfs@oss.sgi.com Mon Apr 21 12:59:54 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 13:00:11 -0700 (PDT) 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=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 m3LJxr5q021180 for ; Mon, 21 Apr 2008 12:59:54 -0700 X-ASG-Debug-ID: 1208808033-321403500000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from moutng.kundenserver.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1DC48A82D99 for ; Mon, 21 Apr 2008 13:00:34 -0700 (PDT) Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.188]) by cuda.sgi.com with ESMTP id 6HfW7B5BrnUbMvaY for ; Mon, 21 Apr 2008 13:00:34 -0700 (PDT) Received: from ppp-93-104-122-138.dynamic.mnet-online.de (ppp-93-104-122-138.dynamic.mnet-online.de [93.104.122.138]) by mrelayeu.kundenserver.de (node=mrelayeu4) with ESMTP (Nemesis) id 0ML21M-1Jo2Bj052Z-0004OJ; Mon, 21 Apr 2008 22:00:31 +0200 Date: Mon, 21 Apr 2008 22:00:30 +0200 (CEST) From: Christian Kujau X-X-Sender: evil@sheep.housecafe.de To: xfs@oss.sgi.com X-ASG-Orig-Subj: [OT]: how to change the email address in bugzilla Subject: [OT]: how to change the email address in bugzilla Message-ID: User-Agent: Alpine 1.10 (DEB 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII X-Provags-ID: V01U2FsdGVkX199rmMK+uY7GSqfjaFNJxmxMw5bm5nytZyAkwp Ry/fRaFgjmua9ykPG8JQjVDc7JQdageX0odXZ1pspn5OZLXjID Md/7dPB+JfIMrB8wBKXxQ== X-Barracuda-Connect: moutng.kundenserver.de[212.227.126.188] X-Barracuda-Start-Time: 1208808035 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.1, rules version 3.1.48438 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15517 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lists@nerdbynature.de Precedence: bulk X-list: xfs really OT, but I don't know where to ask: where can I change the email address of the bugzilla account on oss.sgi.com? Thanks, Christian. -- BOFH excuse #425: stop bit received From owner-xfs@oss.sgi.com Mon Apr 21 13:04:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 13:04:07 -0700 (PDT) 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.0 required=5.0 tests=BAYES_50,HTML_MESSAGE 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 m3LK3w7t021711 for ; Mon, 21 Apr 2008 13:04:00 -0700 X-ASG-Debug-ID: 1208808278-631900840000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from gv-out-0910.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8F0C8A83466 for ; Mon, 21 Apr 2008 13:04:39 -0700 (PDT) Received: from gv-out-0910.google.com (gv-out-0910.google.com [216.239.58.191]) by cuda.sgi.com with ESMTP id rWTU5HmFC9tMkDal for ; Mon, 21 Apr 2008 13:04:39 -0700 (PDT) Received: by gv-out-0910.google.com with SMTP id s4so175518gve.9 for ; Mon, 21 Apr 2008 13:04:37 -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:mime-version:content-type; bh=ofDcDW+A4mRkPfoTQGf7aQuIPAEv3O3S4D1+cp2tiss=; b=XCWpVhVbpjepkXAsvFhmP8S8E32m37IbCPl/zrTEZLRs55j/EZkNcFsVvJhwFiOf92wP9XVvARD5LcrfR6hR3pebQnSpIy1TZ5tRsdCAchtliBhqhDOT/2FN5k0LXCd/V0NskP6uYPMw3Ry5M1rKyedd/eWLUU0ckhE08aUmjJM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:mime-version:content-type; b=bwkcV1AIXIJfEhEuWsbKCUzpLXx/7cXoI5U4z39ZbQL2dWrseSEjke5kwp4gtRY3BQ4M1fnXTqfbfOrtkghZf/zx4Hg9xK7eglrpR/AtKfMM31NJjeSX8Z4EzID1WAxjQl7sqm9fWWCw5TEBUQ8u8w/JGknqmFNx46r/AcxCbLE= Received: by 10.150.145.14 with SMTP id s14mr7488667ybd.154.1208807842906; Mon, 21 Apr 2008 12:57:22 -0700 (PDT) Received: by 10.150.197.1 with HTTP; Mon, 21 Apr 2008 12:57:22 -0700 (PDT) Message-ID: <4f52331f0804211257n47c1d21fiffb6d07235c5b302@mail.gmail.com> Date: Mon, 21 Apr 2008 12:57:22 -0700 From: "Fong Vang" To: xfs@oss.sgi.com X-ASG-Orig-Subj: xfs_check and xfs_repair internal working details Subject: xfs_check and xfs_repair internal working details MIME-Version: 1.0 X-Barracuda-Connect: gv-out-0910.google.com[216.239.58.191] X-Barracuda-Start-Time: 1208808280 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.38 X-Barracuda-Spam-Status: No, SCORE=-1.38 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_00_10, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48438 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.64 HTML_00_10 BODY: Message is 0% to 10% HTML 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 854 X-archive-position: 15518 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sudoyang@gmail.com Precedence: bulk X-list: xfs I would like to find how how xfs_check and xfs_repair do their work internally. I need to find answers to the following questions: a) assuming the amount of data is the same for file systems, does it take longer for xfs_check and xfs_repair to check/repair a file system with a lot more files than one that has fewer? Assuming two file systems are 1TB each completely filled. One of the file systems is filled with very large files while the other one is filled with very small files, does it take longer to check and repair the latter? b) does xfs_check and repair check only the used blocks or does it check everything? I think there's a free list as well so I'm assuming it checks that list as well. If anyone can provide more insight into xfs_check and repair, it would be greatly appreciated. Thank you. [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Mon Apr 21 14:12:34 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 14:12:55 -0700 (PDT) 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.0 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 m3LLCTVe026381 for ; Mon, 21 Apr 2008 14:12:33 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id HAA02052; Tue, 22 Apr 2008 07:13:04 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3LLD2sT139680172; Tue, 22 Apr 2008 07:13:03 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3LLD1to141452886; Tue, 22 Apr 2008 07:13:01 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 22 Apr 2008 07:13:01 +1000 From: David Chinner To: Christoph Hellwig Cc: Barry Naujok , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH 2/4] XFS: Return case-insensitive match for dentry cache Message-ID: <20080421211300.GO108924158@sgi.com> References: <20080421083103.433280025@chook.melbourne.sgi.com> <20080421083644.809426871@chook.melbourne.sgi.com> <20080421085947.GA10399@infradead.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080421085947.GA10399@infradead.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15519 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 21, 2008 at 04:59:47AM -0400, Christoph Hellwig wrote: > > +STATIC struct dentry * > > +xfs_ci_dentry_update( > > + struct dentry *dent, > > + struct inode *dent_inode, > > + struct xfs_name *name) > > +{ > > + int err; > > + struct dentry *real_dent; > > + struct dentry *new_dent; > > + struct qstr nls_name; > > This helper should go into fs/dcache.c with a slightly move descritive > name (d_add_ci?). > > Also the naming is rather odd, please replace every occurance of > dent with dentry, and the variable dent_inode should be just inode. > > Also when moving this to dcache.c please provide a nice big kerneldoc > comment describing it like Anton did for the ntfs lookup instance. Perhaps this can be done (moving to dcache.c) as a followup patch series that also removes the duplicate code from ntfs and other places. Similarly for all the NLS stuff... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 21 14:41:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 14:41:54 -0700 (PDT) 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.0 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 m3LLfMCk028589 for ; Mon, 21 Apr 2008 14:41:24 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id HAA03020; Tue, 22 Apr 2008 07:41:57 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3LLfrsT141655354; Tue, 22 Apr 2008 07:41:54 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3LLflJt139482762; Tue, 22 Apr 2008 07:41:47 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 22 Apr 2008 07:41:47 +1000 From: David Chinner To: Andi Kleen Cc: David Chinner , Eric Sandeen , Timothy Shimmin , Niv Sardi , Christoph Hellwig , xfs@oss.sgi.com Subject: Re: likely and unlikely was: Re: [PATCH] split xfs_ioc_xattr Message-ID: <20080421214147.GP108924158@sgi.com> References: <20080414032940.GA10579@lst.de> <20080416063712.GN108924158@sgi.com> <4805A589.7080906@sgi.com> <87ve2i5kbs.fsf@basil.nowhere.org> <4808488A.7010204@sgi.com> <4808AAA5.1060201@sandeen.net> <20080421003343.GL108924158@sgi.com> <20080421075558.GC14446@one.firstfloor.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080421075558.GC14446@one.firstfloor.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15520 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 21, 2008 at 09:55:58AM +0200, Andi Kleen wrote: > On Mon, Apr 21, 2008 at 10:33:43AM +1000, David Chinner wrote: > > On Fri, Apr 18, 2008 at 09:05:25AM -0500, Eric Sandeen wrote: > > > ISTR that the dir2 code on Irix had tons of compiler pragmas for likely > > > and unlikely paths, and that it actually was well-profiled and tested. > > > Did that ever get translated into Linux hints? > > > > The Irix code (#pragma mips_frequency_hint [FREQUENT|NEVER|INIT]) > > only controllered physical placement of code, it never issued > > branch hints. > > likely/unlikely control placement too and I think it is actually > more important for kernel code than branch hints (which x86 doesn't > have explictely unlike ia64, they only way to do a branch hint is to reorder > the code) due to icache effects. > > i.e. a "never" block gets moved out of line, > > while a "frequent" block is left inline. Realistically, the way > > this is used in the Irix dir2 code is completely useless - code like > > this: > > Indeed because gcc has a heuristic that early returns are considered > unlikely: > > /* Branch causing function to terminate is probably not taken. */ > DEF_PREDICTOR (PRED_TREE_EARLY_RETURN, "early return (on trees)", HITRATE (61), > 0) > > It's only 61%, but that should be enough. > > I'm somewhat surprised that MipsPro didn't have such a default heuristic > though ... Different heuristics. IIRC the "true" branch of the if was typically put inline so you could implicitly code your logic to get the compiler to do the right thing.... And with the branch delay slot, things like: if (error) return error; translate into three instructions: cmp error, r0 jne return_prelude mov v0, error <<< BDS Seeing as the BDS is only executed when the jump occurs and v0 holds the function return value, there's no out of line code to bother hinting about.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 21 15:01:51 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 15:02:10 -0700 (PDT) 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.0 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 m3LM1lpM030108 for ; Mon, 21 Apr 2008 15:01:49 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id IAA03626; Tue, 22 Apr 2008 08:02:24 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3LM2NsT141592078; Tue, 22 Apr 2008 08:02:24 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3LM2LCD141454963; Tue, 22 Apr 2008 08:02:21 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 22 Apr 2008 08:02:21 +1000 From: David Chinner To: Fong Vang Cc: xfs@oss.sgi.com Subject: Re: xfs_check and xfs_repair internal working details Message-ID: <20080421220221.GQ108924158@sgi.com> References: <4f52331f0804211257n47c1d21fiffb6d07235c5b302@mail.gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4f52331f0804211257n47c1d21fiffb6d07235c5b302@mail.gmail.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15521 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 21, 2008 at 12:57:22PM -0700, Fong Vang wrote: > I would like to find how how xfs_check and xfs_repair do their work > internally. I need to find answers to the following questions: Read the source code - the answers are all there. > a) assuming the amount of data is the same for file systems, does it take > longer for xfs_check and xfs_repair to check/repair a file system with a lot > more files than one that has fewer? Assuming two file systems are 1TB each > completely filled. One of the file systems is filled with very large files > while the other one is filled with very small files, does it take longer to > check and repair the latter? The obvious thing here is to try it and measure it. Or perhaps go download the slides/video/audio from this talk: http://linux.conf.au/programme/detail?TalkID=135 The slides: http://mirror.linux.org.au/pub/linux.conf.au/2008/slides/135-fixing_xfs_faster.pdf And that should answer your question. > b) does xfs_check and repair check only the used blocks or does it check > everything? I think there's a free list as well so I'm assuming it checks > that list as well. Pretty much everything is checked and/or repaired. If it is not, then that's a bug. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 21 15:04:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 15:04:35 -0700 (PDT) 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.0 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 m3LM4Ofg030421 for ; Mon, 21 Apr 2008 15:04:26 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id IAA03660; Tue, 22 Apr 2008 08:05:01 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3LM50sT141616504; Tue, 22 Apr 2008 08:05:01 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3LM4xB7138949798; Tue, 22 Apr 2008 08:04:59 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 22 Apr 2008 08:04:59 +1000 From: David Chinner To: Christian Kujau Cc: xfs@oss.sgi.com Subject: Re: [OT]: how to change the email address in bugzilla Message-ID: <20080421220459.GR108924158@sgi.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15522 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 21, 2008 at 10:00:30PM +0200, Christian Kujau wrote: > really OT, but I don't know where to ask: > > where can I change the email address of the bugzilla account on > oss.sgi.com? You can't. Your email address is your account identifier. Just create a new one. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 21 15:30:45 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 15:31:09 -0700 (PDT) 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.0 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 m3LMUgoj000410 for ; Mon, 21 Apr 2008 15:30:44 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id IAA04243; Tue, 22 Apr 2008 08:31:18 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3LMVGsT141645718; Tue, 22 Apr 2008 08:31:18 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3LMVEVN140831588; Tue, 22 Apr 2008 08:31:14 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 22 Apr 2008 08:31:14 +1000 From: David Chinner To: support@geoglobal.com Cc: xfs@oss.sgi.com, vincent.roy@geoglobal.com Subject: Re: Fwd: xfs_repair -n report Message-ID: <20080421223114.GS108924158@sgi.com> References: <200804211452.01772.support@geoglobal.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200804211452.01772.support@geoglobal.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15523 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 21, 2008 at 02:52:01PM -0600, support@geoglobal.com wrote: > Sorry, I truncated the original logfile of 128MB to a short version for > review. Again, all comments welcome. Firstly, please post plain text attachments - that will cut down the size of them as well... > > Subject: xfs_repair -n report > Date: Saturday 19 April 2008 23:22 > From: support@geoglobal.com > To: xfs@oss.sgi.com, vincent.roy@geoglobal.com > > RAID 5 - 4 disks on 9550 AMCC production machine / backup disk failed also > verified without error - rebuilt after abrupt power shut down > cannot mount - inconsistencies indicated - could not dump fs Secondly, your raid has completely screwed the filesystem. I would strongly suggest that you confirm that the rebuild of the RAID put stuff back together properly (check things like the order of disks in the stripe, etc). If it claims nothing is wrong, then it has been lying to you. I hope you have backups, because that's the only way you're going to recover this mess. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 21 16:07:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 16:07:46 -0700 (PDT) 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=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 m3LN7Oe0003039 for ; Mon, 21 Apr 2008 16:07:25 -0700 X-ASG-Debug-ID: 1208819284-6f8103640000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from moutng.kundenserver.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1FE97A85C4F for ; Mon, 21 Apr 2008 16:08:04 -0700 (PDT) Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.179]) by cuda.sgi.com with ESMTP id Z1MCEPZTzZ8Jt5nu for ; Mon, 21 Apr 2008 16:08:04 -0700 (PDT) Received: from ppp-93-104-122-138.dynamic.mnet-online.de (ppp-93-104-122-138.dynamic.mnet-online.de [93.104.122.138]) by mrelayeu.kundenserver.de (node=mrelayeu2) with ESMTP (Nemesis) id 0MKwtQ-1Jo57D0VjX-0002Qh; Tue, 22 Apr 2008 01:08:03 +0200 Date: Tue, 22 Apr 2008 01:08:02 +0200 (CEST) From: Christian Kujau X-X-Sender: evil@sheep.housecafe.de To: David Chinner cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [OT]: how to change the email address in bugzilla Subject: Re: [OT]: how to change the email address in bugzilla In-Reply-To: <20080421220459.GR108924158@sgi.com> Message-ID: References: <20080421220459.GR108924158@sgi.com> User-Agent: Alpine 1.10 (DEB 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Provags-ID: V01U2FsdGVkX18bogLNrq4i1Z6tGYLXKJuHf06wV1rth/HPgIh NKu6TvlfsydPutprt/mY76OPSPBoSY28JoZ6aGDJZlMCyXRUis 0r3xvGt65HtTGfY6TZdKQ== X-Barracuda-Connect: moutng.kundenserver.de[212.227.126.179] X-Barracuda-Start-Time: 1208819286 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.1, rules version 3.1.48453 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15524 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lists@nerdbynature.de Precedence: bulk X-list: xfs On Tue, 22 Apr 2008, David Chinner wrote: > You can't. Your email address is your account identifier. Hm, ok. > Just create a new one. will do, thanks! Christian. -- BOFH excuse #100: IRQ dropout From owner-xfs@oss.sgi.com Mon Apr 21 18:44:12 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 18:44:33 -0700 (PDT) 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.0 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 m3M1i6Kc016644 for ; Mon, 21 Apr 2008 18:44:10 -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 LAA08557; Tue, 22 Apr 2008 11:44:39 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id C2FE258C4C15; Tue, 22 Apr 2008 11:44:39 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - split xfs_icsb_sync_counters_flags Message-Id: <20080422014439.C2FE258C4C15@chook.melbourne.sgi.com> Date: Tue, 22 Apr 2008 11:44:39 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15525 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Add a new xfs_icsb_sync_counters_locked for the case where m_sb_lock is already taken and add a flags argument to xfs_icsb_sync_counters so that xfs_icsb_sync_counters_flags is not needed. Signed-off-by: Christoph Hellwig Date: Tue Apr 22 11:44:03 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30917a fs/xfs/xfs_mount.h - 1.262 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.h.diff?r1=text&tr1=1.262&r2=text&tr2=1.261&f=h - Add xfs_icsb_sync_counters_locked(). fs/xfs/xfs_mount.c - 1.427 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.c.diff?r1=text&tr1=1.427&r2=text&tr2=1.426&f=h - Add xfs_icsb_sync_counters_locked(). fs/xfs/xfs_fsops.c - 1.133 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_fsops.c.diff?r1=text&tr1=1.133&r2=text&tr2=1.132&f=h - Add xfs_icsb_sync_counters_locked(). fs/xfs/linux-2.6/xfs_super.c - 1.414 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.414&r2=text&tr2=1.413&f=h - Add xfs_icsb_sync_counters_locked(). From owner-xfs@oss.sgi.com Mon Apr 21 18:48:52 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 18:49:00 -0700 (PDT) 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.0 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 m3M1mFCY016938 for ; Mon, 21 Apr 2008 18:48:50 -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 LAA08767; Tue, 22 Apr 2008 11:48:53 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 42E3758C4C15; Tue, 22 Apr 2008 11:48:53 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - split xfs_icsb_balance_counter Message-Id: <20080422014853.42E3758C4C15@chook.melbourne.sgi.com> Date: Tue, 22 Apr 2008 11:48:53 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15526 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs split xfs_icsb_balance_counter Add an xfs_icsb_balance_counter_locked for the case where mp->m_sb_lock is already locked. Signed-off-by: Christoph Hellwig Date: Tue Apr 22 11:48:25 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30918a fs/xfs/xfs_mount.c - 1.428 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.c.diff?r1=text&tr1=1.428&r2=text&tr2=1.427&f=h - Add xfs_icsb_balance_counter_locked. From owner-xfs@oss.sgi.com Mon Apr 21 18:50:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 18:50:16 -0700 (PDT) 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=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 m3M1o3rI017132 for ; Mon, 21 Apr 2008 18:50:07 -0700 X-ASG-Debug-ID: 1208829042-1a5602340000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail125c25.carrierzone.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8597212A4A4A; Mon, 21 Apr 2008 18:50:42 -0700 (PDT) Received: from mail125c25.carrierzone.com (mail125c25.carrierzone.com [64.29.147.195]) by cuda.sgi.com with ESMTP id PqS4myTvcIWvKsQ9; Mon, 21 Apr 2008 18:50:42 -0700 (PDT) X-POP-User: vincentr.geoglobal.com Received: from GGRBUP1 ([68.145.110.189]) by mail125c25.carrierzone.com (8.13.6.20060614/8.13.1) with ESMTP id m3M1oZOl025124; Tue, 22 Apr 2008 01:50:36 GMT Message-Id: <200804220150.m3M1oZOl025124@mail125c25.carrierzone.com> From: "Vincent Roy" To: "'David Chinner'" , References: <200804211452.01772.support@geoglobal.com> <20080421223114.GS108924158@sgi.com> X-ASG-Orig-Subj: RE: Fwd: xfs_repair -n report Subject: RE: Fwd: xfs_repair -n report Date: Mon, 21 Apr 2008 19:52:47 -0600 Message-ID: <003701c8a41b$91b416b0$2f0a0a0a@geoglobal.ca> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0038_01C8A3E9.4719A6B0" X-Mailer: Microsoft Office Outlook 11 Thread-index: Acij/29Wm5awTVFTS/aA/8Mjg9FsMAAGmeXA X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2900.3198 In-Reply-To: <20080421223114.GS108924158@sgi.com> X-Barracuda-Connect: mail125c25.carrierzone.com[64.29.147.195] X-Barracuda-Start-Time: 1208829044 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0444 1.0000 -1.7353 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.74 X-Barracuda-Spam-Status: No, SCORE=-1.74 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.1, rules version 3.1.48461 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15527 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: vincentr@geoglobal.com Precedence: bulk X-list: xfs This is a multi-part message in MIME format. ------=_NextPart_000_0038_01C8A3E9.4719A6B0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit That isn't good news. What do you suggest I do before totally trashing it, what xfs_repair arguments should I at least try? The data volume size is as it was before the RAID failure so the files are likely there and the RAID is stable. I will try an xfsdump prior. Regards, Vincent -----Original Message----- From: David Chinner [mailto:dgc@sgi.com] Sent: Monday, April 21, 2008 4:31 PM To: support@geoglobal.com Cc: xfs@oss.sgi.com; vincent.roy@geoglobal.com Subject: Re: Fwd: xfs_repair -n report On Mon, Apr 21, 2008 at 02:52:01PM -0600, support@geoglobal.com wrote: > Sorry, I truncated the original logfile of 128MB to a short version for > review. Again, all comments welcome. Firstly, please post plain text attachments - that will cut down the size of them as well... > > Subject: xfs_repair -n report > Date: Saturday 19 April 2008 23:22 > From: support@geoglobal.com > To: xfs@oss.sgi.com, vincent.roy@geoglobal.com > > RAID 5 - 4 disks on 9550 AMCC production machine / backup disk failed also > verified without error - rebuilt after abrupt power shut down > cannot mount - inconsistencies indicated - could not dump fs Secondly, your raid has completely screwed the filesystem. I would strongly suggest that you confirm that the rebuild of the RAID put stuff back together properly (check things like the order of disks in the stripe, etc). If it claims nothing is wrong, then it has been lying to you. I hope you have backups, because that's the only way you're going to recover this mess. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group ------=_NextPart_000_0038_01C8A3E9.4719A6B0 Content-Type: application/msword; name="testfile_raid.rtf" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="testfile_raid.rtf" {\rtf1\ansi\deff0\adeflang1025 {\fonttbl{\f0\froman\fprq2\fcharset0 Thorndale AMT{\*\falt Times New = Roman};}{\f1\froman\fprq2\fcharset0 Thorndale AMT{\*\falt Times New = Roman};}{\f2\fswiss\fprq2\fcharset0 Albany AMT{\*\falt = Arial};}{\f3\fmodern\fprq1\fcharset0 Cumberland AMT{\*\falt Courier = New};}{\f4\fnil\fprq2\fcharset0 Albany AMT{\*\falt = Arial};}{\f5\fnil\fprq2\fcharset0 Lucidasans;}{\f6\fnil\fprq0\fcharset0 = Lucidasans;}} {\colortbl;\red0\green0\blue0;\red128\green128\blue128;} {\stylesheet{\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\= afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24= \lang2057\snext1 Normal;} {\s2\sb240\sa120\keepn\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlc= h\afs28\lang255\ltrch\dbch\langfe255\hich\f2\fs28\lang2057\loch\f2\fs28\l= ang2057\sbasedon1\snext3 Heading;} {\s3\sa120\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057\sbasedon1\snext3 Body Text;} {\s4\sa120\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af6\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057\sbasedon3\snext4 List;} {\s5\sb120\sa120\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af6\= afs24\lang255\ai\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\i\loch\f0= \fs24\lang2057\i\sbasedon1\snext5 caption;} {\s6\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af6\afs24\lang25= 5\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057\sb= asedon1\snext6 Index;} {\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang25= 5\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057\sb= asedon1\snext7 Preformatted Text;} } {\info{\creatim\yr2008\mo4\dy21\hr14\min29}{\revtim\yr2008\mo4\dy21\hr14\= min46}{\printim\yr1601\mo1\dy1\hr0\min0}{\comment = StarWriter}{\vern6800}}\deftab709 {\*\pgdsctbl {\pgdsc0\pgdscuse195\pgwsxn11905\pghsxn16837\marglsxn1134\margrsxn1134\ma= rgtsxn1134\margbsxn1134\pgdscnxt0 Standard;}} \paperh16837\paperw11905\margl1134\margr1134\margt1134\margb1134\sectd\sb= knone\pgwsxn11905\pghsxn16837\marglsxn1134\margrsxn1134\margtsxn1134\marg= bsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1= \aftnnrlc \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 Phase 1 - find and verify = superblock...} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 Phase 2 - using internal = log} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch }{\rtlch = \ltrch\loch\f0\fs24\lang2057\i0\b0 - scan filesystem freespace and inode = maps...} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 bad magic # 0x58418710 = for agi 0} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 bad version # 2 for agi = 0} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 would reset bad agi for = ag 0} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 bad uncorrected agheader = 0, skipping ag...} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 bad magic # 0x4142940a in = btcnt block 7/2} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 expected level 0 got 3 in = btcnt block 7/2} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,288) already = used, state 2} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,289) already = used, state 2} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,296) already = used, state 2} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,297) already = used, state 2} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,302) already = used, state 2} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,296) already = used, state 2} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,297) already = used, state 2} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,298) already = used, state 2} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,333) already = used, state 2} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,334) already = used, state 2} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,403) already = used, state 2} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 inode chunk claims used = block, inobt block - agno 7, bno 3, inopb 16} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (14,421692) = multiply claimed by bno space tree, state - 1} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (14,421693) = multiply claimed by bno space tree, state - 1} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (14,421694) = multiply claimed by bno space tree, state \uc3 \u8211\'e2\'80\'93\uc1 = 1} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (14,971003) = multiply claimed by bno space tree, state - 1} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (14,971004) = multiply claimed by bno space tree, state - 1} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (14,971005) = multiply claimed by bno space tree, state - 1} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 inode chunk claims used = block, inobt block - agno 14, bno 3, inopb 16} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 inode chunk claims used = block, inobt block - agno 14, bno 3, inopb 16} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 inode chunk claims used = block, inobt block - agno 14, bno 3, inopb 16} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 inode chunk claims used = block, inobt block - agno 14, bno 3, inopb 16} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic # 0xf816dffa in = btcnt block 16/171879} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 expected level 1 got = 26155 in btcnt block 16/171879} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,5978200) = already used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,5978203) = already used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,5978205) = already used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,5978207) = already used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,68745) already = used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,860197) already = used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,785480) already = used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,1866283) = already used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic # 0x9ded151b in = btbno block 22/2314} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 expected level 0 got = 46701 in btbno block 22/2314} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (22,110646) already = used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (22,129495) already = used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (22,129496) already = used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (22,348309) already = used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (22,348310) already = used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (22,53743) already = used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic # 0xa6bceb7b in = btcnt block 25/44818} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 expected level 0 got = 55508 in btcnt block 25/44818} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (25,208993) already = used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (25,160757) already = used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic # 0xbe425443 in = btcnt block 27/26679} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (27,201095) already = used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (27,201096) already = used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .block (27,4619369) = already used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (27,4619370) = already used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (27,4619371) = already used, state 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 root inode chunk not = found} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 Phase 3 - for each AG...} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch }{\rtlch = \ltrch\loch\f3\fs20\lang2057\i0\b0 - scan (but don't clear) agi unlinked = lists...} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 error following ag 0 = unlinked list} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 found inodes not in the = inode allocation tree} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 found inodes not in the = inode allocation tree} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch }{\rtlch = \ltrch\loch\f3\fs20\lang2057\i0\b0 - process known inodes and perform = inode discovery...} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch }{\rtlch = \ltrch\loch\f3\fs20\lang2057\i0\b0 - agno =3D 0} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode = 131 is free, would correct imap} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode = 132 is free, would correct imap} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode = 133 is free, would correct imap} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode = 188 is free, would correct imap} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode = 189 is free, would correct imap} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode = 190 is free, would correct imap} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode = 191 is free, would correct imap} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch }{\rtlch = \ltrch\loch\f3\fs20\lang2057\i0\b0 - agno =3D 1} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad bestfree table in = block 5 in directory inode 268435584: would repair table} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 268435720 claims free block 369517041} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 268435720 claims free block 369517042} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 268435720 claims free block 369517043} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 270738556 claims free block 471793209} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 270738556 claims free block 471793210} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 270738556 claims free block 471793211} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad nblocks 5 for inode = 270738556, would reset to 97} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode = 270738556 is free, would correct imap} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 270738557} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 270738557} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 270738558} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 270738558} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 270738559} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 270738559} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 270738592} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 270738593} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 270738594} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 270738753} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 270738753} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular = inode 270738901 claims used block 251703131} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 270738901} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 270738901} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch }{\rtlch = \ltrch\loch\f3\fs20\lang2057\i0\b0 - agno =3D 2} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad . entry in directory = inode 536871040, was 536871045: would correct} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad . entry in directory = inode 536871041, was 536871040: would correct} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad . entry in directory = inode 536871045, was 536871049: would correct} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad . entry in directory = inode 536871047, was 536871830: would correct} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad directory block magic = # 0x58443242 in block 1 for directory inode 536871055} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 corrupt block 1 in = directory inode 536871055} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 \tab would junk block} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 536871085 claims free block 419433502} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 536871092 claims free block 469762257} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 536871096 claims free block 143352225} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 536871096 claims free block 143352226} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 corrupt block 0 in = directory inode 536871099} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 \tab would junk block} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no . entry for directory = 536871099} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no .. entry for directory = 536871099} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 problem with directory = contents in inode 536871099} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 536871099} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 536871102 claims free block 134321130} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 536871102 claims free block 134321131} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 536871102 claims free block 134321132} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 1342179589 claims free block 286348755} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 1342179589 claims free block 286348756} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 1342179589 claims free block 286348757} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular = inode 1342179590 claims used block 303545771} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179590} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179590} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular = inode 1342179591 claims used block 486729909} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179591} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179591} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179592 = data fork is too large (size =3D 4939602, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179592} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179592} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179593 = data fork is too large (size =3D 4168798, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179593} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179593} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179594 = data fork is too large (size =3D 4325755, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179594} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179594} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179595 = data fork is too large (size =3D 3233338, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179595} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179595} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179596 = data fork is too large (size =3D 10360806, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179596} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179596} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179597 = data fork is too large (size =3D 9502373, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179597} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179597} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179598 = data fork is too large (size =3D 3250076, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179598} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179598} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179599 = data fork is too large (size =3D 3133743, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179599} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179599} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179600 = data fork is too large (size =3D 4085608, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179600} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179600} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular = inode 1342179601 claims used block 285233312} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179601} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179601} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179602 = data fork is too large (size =3D 3410791, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179602} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179602} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179603 = data fork is too large (size =3D 2044592, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179603} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179603} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179604 = data fork is too large (size =3D 3109201, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179604} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179604} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179605 = data fork is too large (size =3D 1523100, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179605} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179605} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179606 = data fork is too large (size =3D 1811725, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179606} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179606} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179607 = data fork is too large (size =3D 1659849, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179607} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179607} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular = inode 1342179608 claims used block 285322819} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179608} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179608} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 1342179609 claims free block 436897527} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 1342179609 claims free block 436897528} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 1342179609 claims free block 436897529} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 1342179614 claims free block 286243438} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 1342179614 claims free block 286243439} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular = inode 1342179615 claims used block 302854456} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179615} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179615} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2 on = inode 1342179616} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179616} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xbbf7 = on inode 1342179617} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x64 = on inode 1342179617} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179617} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x4727 = on inode 1342179618} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x43 = on inode 1342179618} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179618} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x7649 = on inode 1342179619} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffffc1 on inode 1342179619} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179619} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x8985 = on inode 1342179620} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffffc1 on inode 1342179620} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179620} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x327b = on inode 1342179621} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x57 = on inode 1342179621} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179621} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x7627 = on inode 1342179622} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3e = on inode 1342179622} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179622} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5956 = on inode 1342179623} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x5b = on inode 1342179623} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179623} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x374a = on inode 1342179624} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x7f = on inode 1342179624} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179624} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x77ca = on inode 1342179625} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3f = on inode 1342179625} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179625} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x1983 = on inode 1342179626} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x10 = on inode 1342179626} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179626} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x3ef6 = on inode 1342179627} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x70 = on inode 1342179627} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179627} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x77a2 = on inode 1342179628} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3f = on inode 1342179628} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179628} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x3ed2 = on inode 1342179629} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x7a = on inode 1342179629} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179629} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x7791 = on inode 1342179630} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3f = on inode 1342179630} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179630} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x3bc2 = on inode 1342179631} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x10 = on inode 1342179631} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179631} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2 on = inode 1342179616, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179616} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179616} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xbbf7 = on inode 1342179617, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x64 = on inode 1342179617, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179617} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179617} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x4727 = on inode 1342179618, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x43 = on inode 1342179618, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179618} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179618} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x7649 = on inode 1342179619, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffffc1 on inode 1342179619, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179619} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179619} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x8985 = on inode 1342179620, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffffc1 on inode 1342179620, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179620} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179620} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x327b = on inode 1342179621, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x57 = on inode 1342179621, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179621} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179621} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x7627 = on inode 1342179622, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3e = on inode 1342179622, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179622} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179622} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5956 = on inode 1342179623, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x5b = on inode 1342179623, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179623} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179623} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x374a = on inode 1342179624, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x7f = on inode 1342179624, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179624} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179624} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x77ca = on inode 1342179625, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3f = on inode 1342179625, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179625} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179625} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x1983 = on inode 1342179626, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x10 = on inode 1342179626, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179626} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179626} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x3ef6 = on inode 1342179627, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x70 = on inode 1342179627, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179627} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179627} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x77a2 = on inode 1342179628, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3f = on inode 1342179628, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179628} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179628} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x3ed2 = on inode 1342179629, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x7a = on inode 1342179629, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179629} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179629} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x7791 = on inode 1342179630, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3f = on inode 1342179630, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179630} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179630} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x3bc2 = on inode 1342179631, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x10 = on inode 1342179631, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342179631} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179631} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179632 = data fork is too large (size =3D 196095, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179632} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179632} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179633 = data fork is too large (size =3D 366190, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179633} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179633} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular = inode 1342179634 claims used block 235047448} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179634} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179634} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179635 = data fork is too large (size =3D 395536, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179635} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179635} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular = inode 1342179636 claims used block 235008106} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179636} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179636} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad bmap btree ptr = 0xc13a8acad6eab189 in ino 1342179639} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179639} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179639} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular = inode 1342179640 claims used block 167823233} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179640} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179640} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179642 = data fork is too large (size =3D 210763, max =3D 156)} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179642} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179642} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad size/format for = directory 1342179643} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 problem with directory = contents in inode 1342179643} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179643} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 mismatch between format = (1) and size (176557) in symlink inode 1342179645} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in symlink = 1342179645} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179645} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 mismatch between format = (1) and size (541891) in symlink inode 1342179646} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in symlink = 1342179646} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179646} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 mismatch between format = (1) and size (528780) in symlink inode 1342179647} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in symlink = 1342179647} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179647} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 mismatch between format = (1) and size (97776) in symlink inode 1342179648} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in symlink = 1342179648} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179648} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 mismatch between format = (1) and size (71351) in symlink inode 1342179649} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in symlink = 1342179649} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179649} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular = inode 1342179654 claims used block 521054414} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179654} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179654} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular = inode 1342179665 claims used block 135191770} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode = 1342179665} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342179665} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 1342179670 claims free block 235329860} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 1342179670 claims free block 235329861} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 1342179670 claims free block 235329862} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 1342181150 claims free block 387842929} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 1342181150 claims free block 387842930} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 1342181150 claims free block 387842931} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181186} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181200} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181201} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181202} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181203} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181204} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181205} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2 on = inode 1342181216} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -8098840690732274055 on inode 1342181217} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x1b20 = on inode 1342181218} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xd on = inode 1342181218} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -44603782713929781 on inode 1342181218} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xaf88 = on inode 1342181219} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffff9f on inode 1342181219} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181219} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xaf97 = on inode 1342181220} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x64 = on inode 1342181220} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -8598615031889885277 on inode 1342181220} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x4ed7 = on inode 1342181221} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffffab on inode 1342181221} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -7421484120082124244 on inode 1342181221} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xc784 = on inode 1342181222} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffff97 on inode 1342181222} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -7039745431618388759 on inode 1342181222} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x8654 = on inode 1342181223} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffff94 on inode 1342181223} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -7892964874975931737 on inode 1342181223} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb2b2 = on inode 1342181224} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xfffffffd on inode 1342181224} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -2741290762856431056 on inode 1342181224} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb5f1 = on inode 1342181225} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xfffffffd on inode 1342181225} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -145244644254024567 on inode 1342181225} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf045 = on inode 1342181226} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffffac on inode 1342181226} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -216457572855644921 on inode 1342181226} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb486 = on inode 1342181227} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xfffffffc on inode 1342181227} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -4785780517491573548 on inode 1342181227} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xcb3 on = inode 1342181228} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xfffffff5 on inode 1342181228} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -218990860528255687 on inode 1342181228} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb449 = on inode 1342181229} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xfffffffc on inode 1342181229} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -215894529477870567 on inode 1342181229} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x953a = on inode 1342181230} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffffd3 on inode 1342181230} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -4040222610815773810 on inode 1342181230} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x899d = on inode 1342181231} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2 on = inode 1342181231} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -6137713694427973127 on inode 1342181231} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x672a = on inode 1342181233} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xc on = inode 1342181233} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181233} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181186} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181186} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181187 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181188 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181189 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181190 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181191 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181192 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181193 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181194 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181195 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181196 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181197 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181198 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181199 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181200} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181200} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181201} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181201} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181202} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181202} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181203} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181203} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181204} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181204} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181205} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181205} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181206 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181207 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181208 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181209 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181210 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181211 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181212 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181213 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181214 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181215 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2 on = inode 1342181216, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181216 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181216} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -8098840690732274055 on inode 1342181217} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181217} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x1b20 = on inode 1342181218, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xd on = inode 1342181218, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -44603782713929781 on inode 1342181218} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181218} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xaf88 = on inode 1342181219, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffff9f on inode 1342181219, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181219} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181219} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xaf97 = on inode 1342181220, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x64 = on inode 1342181220, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -8598615031889885277 on inode 1342181220} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181220} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x4ed7 = on inode 1342181221, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffffab on inode 1342181221, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -7421484120082124244 on inode 1342181221} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181221} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xc784 = on inode 1342181222, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffff97 on inode 1342181222, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -7039745431618388759 on inode 1342181222} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181222} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x8654 = on inode 1342181223, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffff94 on inode 1342181223, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -7892964874975931737 on inode 1342181223} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181223} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb2b2 = on inode 1342181224, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xfffffffd on inode 1342181224, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -2741290762856431056 on inode 1342181224} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181224} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb5f1 = on inode 1342181225, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xfffffffd on inode 1342181225, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -145244644254024567 on inode 1342181225} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181225} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf045 = on inode 1342181226, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffffac on inode 1342181226, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -216457572855644921 on inode 1342181226} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181226} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb486 = on inode 1342181227, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xfffffffc on inode 1342181227, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -4785780517491573548 on inode 1342181227} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181227} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xcb3 on = inode 1342181228, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xfffffff5 on inode 1342181228, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -218990860528255687 on inode 1342181228} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181228} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb449 = on inode 1342181229, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xfffffffc on inode 1342181229, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -215894529477870567 on inode 1342181229} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181229} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x953a = on inode 1342181230, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffffd3 on inode 1342181230, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -4040222610815773810 on inode 1342181230} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181230} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x899d = on inode 1342181231, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2 on = inode 1342181231, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -6137713694427973127 on inode 1342181231} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181231} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181232 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x672a = on inode 1342181233, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xc on = inode 1342181233, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181233} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181233} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181234 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181235 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181236 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181237 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181238 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181239 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181240 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181241 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181242 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181243 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181244 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181245 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181246 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181247 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xf on = inode 1342181296} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -8531373024821224668 on inode 1342181297} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x297c = on inode 1342181298} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x56 = on inode 1342181298} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181298} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5544 = on inode 1342181299} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x1b = on inode 1342181299} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181299} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x464e = on inode 1342181300} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x52 = on inode 1342181300} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181300} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xd440 = on inode 1342181301} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x33 = on inode 1342181301} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181301} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xd4b1 = on inode 1342181302} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffffc0 on inode 1342181302} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -5714591680202162485 on inode 1342181302} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x82d7 = on inode 1342181303} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffff8b on inode 1342181303} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -4027625441752728915 on inode 1342181303} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf0b9 = on inode 1342181304} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffffa0 on inode 1342181304} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -1404089711421248255 on inode 1342181304} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xa8cf = on inode 1342181305} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffffca on inode 1342181305} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181305} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5b52 = on inode 1342181306} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x44 = on inode 1342181306} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181306} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5d51 = on inode 1342181311} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x65 = on inode 1342181311} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181311} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x7 on = inode 1342181312} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x2d28 = on inode 1342181313} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x78 = on inode 1342181313} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181313} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x641a = on inode 1342181314} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2a = on inode 1342181314} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181314} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x5 on = inode 1342181328} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xa3fc = on inode 1342181329} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x8381 = on inode 1342181330} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x65 = on inode 1342181330} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181330} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf2b7 = on inode 1342181331} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x15 = on inode 1342181331} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf2b3 = on inode 1342181332} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x15 = on inode 1342181332} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181332} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf543 = on inode 1342181333} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x12 = on inode 1342181333} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181333} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf55d = on inode 1342181334} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181334} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 1342181281 claims free block 83886335} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 corrupt block 0 in = directory inode 1342181281} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 \tab would junk block} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no . entry for directory = 1342181281} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no .. entry for directory = 1342181281} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 problem with directory = contents in inode 1342181281} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181281} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 1342181282 claims free block 83886334} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 corrupt block 0 in = directory inode 1342181282} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 \tab would junk block} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no . entry for directory = 1342181282} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no .. entry for directory = 1342181282} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 problem with directory = contents in inode 1342181282} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181282} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 1342181283 claims free block 83886340} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad directory block magic = # 0x5844b3a6 in block 0 for directory inode 1342181283} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 corrupt block 0 in = directory inode 1342181283} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 \tab would junk block} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no . entry for directory = 1342181283} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no .. entry for directory = 1342181283} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 problem with directory = contents in inode 1342181283} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181283} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino = 1342181290 claims free block 83886341} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181292 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181293 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181294 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181295 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xf on = inode 1342181296, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181296 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181296} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -8531373024821224668 on inode 1342181297} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181297} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x297c = on inode 1342181298, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x56 = on inode 1342181298, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181298} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181298} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5544 = on inode 1342181299, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x1b = on inode 1342181299, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181299} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181299} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x464e = on inode 1342181300, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x52 = on inode 1342181300, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181300} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181300} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xd440 = on inode 1342181301, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x33 = on inode 1342181301, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181301} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181301} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xd4b1 = on inode 1342181302, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffffc0 on inode 1342181302, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -5714591680202162485 on inode 1342181302} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181302} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x82d7 = on inode 1342181303, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffff8b on inode 1342181303, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -4027625441752728915 on inode 1342181303} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181303} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf0b9 = on inode 1342181304, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffffa0 on inode 1342181304, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size = -1404089711421248255 on inode 1342181304} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181304} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xa8cf = on inode 1342181305, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number = 0xffffffca on inode 1342181305, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181305} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181305} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5b52 = on inode 1342181306, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x44 = on inode 1342181306, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181306} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181306} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181307 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181308 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181309 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181310 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5d51 = on inode 1342181311, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x65 = on inode 1342181311, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181311} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181311} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x7 on = inode 1342181312, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181312 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181312} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x2d28 = on inode 1342181313, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x78 = on inode 1342181313, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181313} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181313} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x641a = on inode 1342181314, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2a = on inode 1342181314, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181314} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181314} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181315 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181316 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181317 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181318 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181319 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181320 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181321 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181322 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181323 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181324 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181325 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181326 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181327 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x5 on = inode 1342181328, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode = 1342181328 is in use, would correct imap and clear inode} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181328} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xa3fc = on inode 1342181329, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 mismatch between format = (2) and size (56) in directory ino 1342181329} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181329} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x8381 = on inode 1342181330, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x65 = on inode 1342181330, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode = 1342181330} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode = 1342181330} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf2b7 = on inode 1342181331, would reset magic number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x15 = on inode 1342181331, would reset version number} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 Unexpected inode type = 0160000 inode 1342181331} \par \pard\plain = \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\= lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2= 057=20 \par \pard\plain = \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\= lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2= 057=20 \par } ------=_NextPart_000_0038_01C8A3E9.4719A6B0-- From owner-xfs@oss.sgi.com Mon Apr 21 18:53:19 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 18:53:26 -0700 (PDT) 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.0 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 m3M1rFJ3017668 for ; Mon, 21 Apr 2008 18:53:17 -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 LAA08874; Tue, 22 Apr 2008 11:53:53 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 0053558C4C15; Tue, 22 Apr 2008 11:53:52 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - kill XFS_ICSB_SB_LOCKED Message-Id: <20080422015353.0053558C4C15@chook.melbourne.sgi.com> Date: Tue, 22 Apr 2008 11:53:52 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15528 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs kill XFS_ICSB_SB_LOCKED With the last two patches XFS_ICSB_SB_LOCKED is never checked and only superflously passed to xfs_icsb_count, so kill it. Signed-off-by: Christoph Hellwig Date: Tue Apr 22 11:53:31 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30920a fs/xfs/xfs_mount.h - 1.263 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.h.diff?r1=text&tr1=1.263&r2=text&tr2=1.262&f=h - kill XFS_ICSB_SB_LOCKED. fs/xfs/xfs_mount.c - 1.429 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.c.diff?r1=text&tr1=1.429&r2=text&tr2=1.428&f=h - kill XFS_ICSB_SB_LOCKED. From owner-xfs@oss.sgi.com Mon Apr 21 18:57:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 18:57:53 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42 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 m3M1vWXB018318 for ; Mon, 21 Apr 2008 18:57:35 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA09032; Tue, 22 Apr 2008 11:58:08 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3M1w7sT140988527; Tue, 22 Apr 2008 11:58:07 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3M1w6AY141514599; Tue, 22 Apr 2008 11:58:06 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 22 Apr 2008 11:58:06 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss , gnb@sgi.com Subject: [PATCH] Don't initialise new inode generation numbers to zero V2 Message-ID: <20080422015806.GU108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15529 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Don't initialise new inode generation numbers to zero When we allocation new inode chunks, we initialise the generation numbers to zero. This works fine until we delete a chunk and then reallocate it, resulting in the same inode numbers but with a reset generation count. This can result in inode/generation pairs of different inodes occurring relatively close together. Given that the inode/gen pair makes up the "unique" portion of an NFS filehandle on XFS, this can result in file handles cached on clients being seen on the wire from the server but refer to a different file. This causes .... issues for NFS clients. Hence we need a unique generation number initialisation for each inode to prevent reuse of a small portion of the generation number space. Make this initialiser per-allocation group so that it is not a single point of contention in the filesystem, and increment it on every allocation within an AG to reduce the chance that a generation number is reused for a given inode number if the inode chunk is deleted and reallocated immediately afterwards. Version 2: o remove persistent per-AGI agi_newinogen field and replace with randomly generated 32 bit number for each new cluster. This prevents NFS clients from potentially guessing what the next generation number is going to be. Signed-off-by: Dave Chinner --- drivers/char/random.c | 1 + fs/xfs/xfs_ialloc.c | 10 ++++++++++ 2 files changed, 11 insertions(+) Index: 2.6.x-xfs-new/fs/xfs/xfs_ialloc.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_ialloc.c 2008-04-21 09:48:39.279043874 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_ialloc.c 2008-04-21 10:14:07.242106131 +1000 @@ -147,6 +147,7 @@ xfs_ialloc_ag_alloc( int version; /* inode version number to use */ int isaligned = 0; /* inode allocation at stripe unit */ /* boundary */ + unsigned int gen; args.tp = tp; args.mp = tp->t_mountp; @@ -290,6 +291,14 @@ xfs_ialloc_ag_alloc( else version = XFS_DINODE_VERSION_1; + /* + * Seed the new inode cluster with a random generation number. This + * prevents short-term reuse of generation numbers if a chunk is + * freed and then immediately reallocated. We use random numbers + * rather than a linear progression to prevent the next generation + * number from being guessable. + */ + gen = get_random_int(); for (j = 0; j < nbufs; j++) { /* * Get the block. @@ -309,6 +318,7 @@ xfs_ialloc_ag_alloc( free = XFS_MAKE_IPTR(args.mp, fbuf, i); free->di_core.di_magic = cpu_to_be16(XFS_DINODE_MAGIC); free->di_core.di_version = version; + free->di_core.di_gen = cpu_to_be32(gen); free->di_next_unlinked = cpu_to_be32(NULLAGINO); xfs_ialloc_log_di(tp, fbuf, i, XFS_DI_CORE_BITS | XFS_DI_NEXT_UNLINKED); Index: 2.6.x-xfs-new/drivers/char/random.c =================================================================== --- 2.6.x-xfs-new.orig/drivers/char/random.c 2008-03-13 13:05:54.000000000 +1100 +++ 2.6.x-xfs-new/drivers/char/random.c 2008-04-21 10:12:18.464202803 +1000 @@ -1646,6 +1646,7 @@ unsigned int get_random_int(void) */ return secure_ip_id((__force __be32)(current->pid + jiffies)); } +EXPORT_SYMBOL(get_random_int); /* * randomize_range() returns a start address such that From owner-xfs@oss.sgi.com Mon Apr 21 19:06:17 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 19:06:24 -0700 (PDT) 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 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 m3M26EuZ019133 for ; Mon, 21 Apr 2008 19:06:16 -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 MAA09312; Tue, 22 Apr 2008 12:06:49 +1000 Date: Tue, 22 Apr 2008 12:07:01 +1000 To: "Christoph Hellwig" Subject: Re: [PATCH 2/4] XFS: Return case-insensitive match for dentry cache From: "Barry Naujok" Organization: SGI Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080421083103.433280025@chook.melbourne.sgi.com> <20080421083644.809426871@chook.melbourne.sgi.com> <20080421085947.GA10399@infradead.org> Message-ID: In-Reply-To: <20080421085947.GA10399@infradead.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m3M26HuZ019136 X-archive-position: 15530 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Mon, 21 Apr 2008 18:59:47 +1000, Christoph Hellwig wrote: >> +STATIC struct dentry * >> +xfs_ci_dentry_update( >> + struct dentry *dent, >> + struct inode *dent_inode, >> + struct xfs_name *name) >> +{ >> + int err; >> + struct dentry *real_dent; >> + struct dentry *new_dent; >> + struct qstr nls_name; > > This helper should go into fs/dcache.c with a slightly move descritive > name (d_add_ci?). > > Also the naming is rather odd, please replace every occurance of > dent with dentry, and the variable dent_inode should be just inode. > > Also when moving this to dcache.c please provide a nice big kerneldoc > comment describing it like Anton did for the ntfs lookup instance. > of the > >> + /* >> + * following code from ntfs_lookup() in fs/ntfs/namei.c >> + */ > > Not a very helpful comment :) > >> + new_dent = d_splice_alias(dent_inode, real_dent); >> + if (new_dent) >> + dput(real_dent); >> + else >> + new_dent = real_dent; >> + return new_dent; > > I think this would be more readable as > > if (new_dentry) { > dput(real_dentry); > return new_dentry; > } > return real_dentry; > >> + /* Matching dentry exists, check if it is negative. */ >> + if (real_dent->d_inode) { >> + if (unlikely(real_dent->d_inode != dent_inode)) { >> + /* This can happen because bad inodes are unhashed. */ >> + BUG_ON(!is_bad_inode(dent_inode)); >> + BUG_ON(!is_bad_inode(real_dent->d_inode)); >> + } > > Shouldn't this be a can't above? > >> + * Already have the inode and the dentry attached, decrement >> + * the reference count to balance the xfs_lookup() we did >> + * earlier on. We found the dentry using d_lookup() so it >> + * cannot be disconnected and thus we do not need to worry >> + * about any NFS/disconnectedness issues here. > > s/xfs_lookup/iget/ This whole function (other than the xfs_blah) is a direct copy of Anton's code, I left the variable names etc the same. >> +kmem_zone_t *xfs_name_zone; > > What about just using kmalloc here? We know the length of the name > anyway, so there is no point of allocating the maximum possible size. Not with the CI/NLS, the length could be different. >> error = xfs_iget(dp->i_mount, NULL, inum, 0, 0, ipp, 0); >> - if (error) >> + if (error) { >> + if (ci_match && *ci_match) >> + xfs_name_free(name->name); >> goto out; >> + } > > All the allocation and freeing for ci_match looks odd and error prone > to me. I think the low-level directory code should never allocate > args->value unless it's explicitly asked for a CI match. That way > there's only one place in xfs_ci_lookup to free it either. Yes, I could do that, it is a neater, cleaner implementation. I did it this way to only alloc as required rather than an alloc for every lookup. Barry. From owner-xfs@oss.sgi.com Mon Apr 21 19:35:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 19:35:20 -0700 (PDT) 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.0 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 m3M2Yv2l020881 for ; Mon, 21 Apr 2008 19:34:59 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA09916; Tue, 22 Apr 2008 12:35:35 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3M2ZYsT141711019; Tue, 22 Apr 2008 12:35:35 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3M2ZXB7140967002; Tue, 22 Apr 2008 12:35:33 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 22 Apr 2008 12:35:33 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: Wrong patch checked in.... Message-ID: <20080422023533.GS103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15531 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Folks, I just noticed my builds were coming up with warnings inside QUOTADEBUG code. I never saw a patch go past that enabled it for debug kernels, so I was kinda confused until I found this: chook 232% p_modinfo -h xfs-linux-melb:xfs-kern:30878a mod xfs-linux-melb:xfs-kern:30878a header ========================================== - SM_Location: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb - Workarea: linuxbuild.melbourne.sgi.com:/home/donaldd/isms/2.6.x-xfs - xfs-linux-melb:xfs-kern:30878a 04/15/08 - PV Incidents affected: 971046 - Inspected by: hch - Description: Remove unused HAVE_SPLICE macro. HAVE_SPLICE was part of the infrastructure for building 2.4 and 2.6 kernels out of the same tree. Now we don't build 2.4 kernels this - Files affected: xfs.h 1.51 - Author: donaldd - xfs.h: Remove unused HAVE_SPLICE macro. Which was supposed to be: http://oss.sgi.com/archives/xfs/2008-04/msg00246.html --- a/fs/xfs/linux-2.6/xfs_linux.h 2008-04-08 13:23:55.000000000 +1000 +++ b/fs/xfs/linux-2.6/xfs_linux.h 2008-04-08 12:09:22.455341741 +1000 @@ -99,7 +99,6 @@ /* * Feature macros (disable/enable) */ -#define HAVE_SPLICE /* a splice(2) exists in 2.6, but not in 2.4 */ #ifdef CONFIG_SMP #define HAVE_PERCPU_SB /* per cpu superblock counters are a 2.6 feature */ #else What got checked in was: % p_rdiff -uM xfs-linux-melb:xfs-kern:30878a --- a/xfs.h 2008-04-22 12:28:12.000000000 +1000 +++ b/xfs.h 2008-04-22 12:28:12.000000000 +1000 @@ -22,7 +22,7 @@ #define STATIC #define DEBUG 1 #define XFS_BUF_LOCK_TRACKING 1 -/* #define QUOTADEBUG 1 */ +#define QUOTADEBUG 1 #endif #ifdef CONFIG_XFS_TRACE Seeing as this mod has already made it to Linus, we can't revert it easily. http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e687330b5ed1ea899fdaf0dea50aba196b6e019a Donald, can you do another checkin that returns xfs.h to it's previous state and removes the HAVE_SPLICE stuff correctly? Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 21 20:53:21 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 20:53:46 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_74 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 m3M3rGCN030006 for ; Mon, 21 Apr 2008 20:53: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 NAA11145; Tue, 22 Apr 2008 13:53:50 +1000 Date: Tue, 22 Apr 2008 13:54:28 +1000 To: "Christoph Hellwig" Subject: Re: [PATCH 2/4] XFS: Return case-insensitive match for dentry cache From: "Barry Naujok" Organization: SGI Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080421083103.433280025@chook.melbourne.sgi.com> <20080421083644.809426871@chook.melbourne.sgi.com> <20080421085947.GA10399@infradead.org> <20080421094641.GA5191@infradead.org> Message-ID: In-Reply-To: <20080421094641.GA5191@infradead.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m3M3rLCN030013 X-archive-position: 15532 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Mon, 21 Apr 2008 19:46:41 +1000, Christoph Hellwig wrote: >> > +kmem_zone_t *xfs_name_zone; >> >> What about just using kmalloc here? We know the length of the name >> anyway, so there is no point of allocating the maximum possible size. >> >> > error = xfs_iget(dp->i_mount, NULL, inum, 0, 0, ipp, 0); >> > - if (error) >> > + if (error) { >> > + if (ci_match && *ci_match) >> > + xfs_name_free(name->name); >> > goto out; >> > + } >> >> All the allocation and freeing for ci_match looks odd and error prone >> to me. I think the low-level directory code should never allocate >> args->value unless it's explicitly asked for a CI match. That way >> there's only one place in xfs_ci_lookup to free it either. > > Also the low-level name duplication code could be factored out a little > more ala: > > /* > * If a case-insensitive match, allocate a buffer and copy the actual > * name into the buffer. Return it via args->value. > */ > void xfs_copy_ci_name(struct xfs_da_args *args, const char *name, int > namelen) > { > if (args->return_ci_name && args->cmpresult == XFS_CMP_CASE) { > args->valuelen = namelen; > args->value = kmemdup(name, namelen, GFP_NOFS); > /* error handled in higher layers */ > } > } > > Instead of adding args->return_ci_name it might make sense to just > replace the last four chars there with an unsigned short lookup_flags > and just set bits in it. There's already a "flags" field in xfs_da_args and only the low 16 bits are currently used for attr operations. We could use 5 of the high bits for these flags, or just add another flags field (which are used for things other than lookup). From owner-xfs@oss.sgi.com Mon Apr 21 21:06:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 21:06:28 -0700 (PDT) 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=BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from relay.sgi.com (relay2.corp.sgi.com [192.26.58.22]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m3M461cT031019 for ; Mon, 21 Apr 2008 21:06:02 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5F8BF30415E; Mon, 21 Apr 2008 21:06:39 -0700 (PDT) Received: from [134.14.55.15] (dhcp15.melbourne.sgi.com [134.14.55.15]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3M46bjm605568; Tue, 22 Apr 2008 14:06:37 +1000 (AEST) Message-ID: <480D641B.8060301@melbourne.sgi.com> Date: Tue, 22 Apr 2008 14:05:47 +1000 From: Greg Banks Organization: File Serving Technologies ; Silicon Graphics Inc. User-Agent: Thunderbird 1.5.0.12 (X11/20060911) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [PATCH] Don't initialise new inode generation numbers to zero V2 References: <20080422015806.GU108924158@sgi.com> In-Reply-To: <20080422015806.GU108924158@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15533 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: gnb@melbourne.sgi.com Precedence: bulk X-list: xfs David Chinner wrote: > Don't initialise new inode generation numbers to zero > > When we allocation new inode chunks, we initialise the generation > numbers to zero. This works fine until we delete a chunk and then > reallocate it, resulting in the same inode numbers but with a > reset generation count. This can result in inode/generation > pairs of different inodes occurring relatively close together. > > Given that the inode/gen pair makes up the "unique" portion of > an NFS filehandle on XFS, this can result in file handles cached > on clients being seen on the wire from the server but refer to > a different file. This causes .... issues for NFS clients. > > Hence we need a unique generation number initialisation for > each inode to prevent reuse of a small portion of the generation > number space. Make this initialiser per-allocation group so > that it is not a single point of contention in the filesystem, > and increment it on every allocation within an AG to reduce the > chance that a generation number is reused for a given inode number > if the inode chunk is deleted and reallocated immediately > afterwards. > > Version 2: > o remove persistent per-AGI agi_newinogen field and replace with > randomly generated 32 bit number for each new cluster. This prevents > NFS clients from potentially guessing what the next generation > number is going to be. > I'm confused, why would an NFS client be trying to guess the generation number? AFAICS the important thing is to ensure that the (inode,gen) tuple isn't reused for a long time to prevent accidental filehandle identity issues on clients; whether the gen is predictable or not doesn't matter at all. You could just as well use a 32 bit hash of the nanosecond-precision timestamp when the inode cluster is first allocated. This patch seems to me to be draining entropy from the random bit pool, which is needed for important things on the network, for little benefit. -- Greg Banks, P.Engineer, SGI Australian Software Group. The cake is *not* a lie. I don't speak for SGI. From owner-xfs@oss.sgi.com Mon Apr 21 21:24:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 21:24:45 -0700 (PDT) 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.3 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 m3M4OMB5032350 for ; Mon, 21 Apr 2008 21:24:25 -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 OAA11735; Tue, 22 Apr 2008 14:24:59 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16365) id 2511658C4C15; Tue, 22 Apr 2008 14:24:59 +1000 (EST) To: xfs@oss.sgi.com, sgi.bugs.xfs@engr.sgi.com Subject: TAKE 971046 - Fix broken HAVE_SPLICE removal commit. Message-Id: <20080422042459.2511658C4C15@chook.melbourne.sgi.com> Date: Tue, 22 Apr 2008 14:24:59 +1000 (EST) From: donaldd@sgi.com (Donald Douwsma) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15534 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: donaldd@sgi.com Precedence: bulk X-list: xfs Fix broken HAVE_SPLICE removal commit. Commit e687330b5ed1ea899fdaf0dea50aba196b6e019a was meant to remove the unused HAVE_SPLICE macro, instead an unrelated change was checked enabling QUOTADEBUG when building DEBUG XFS. Restore the intended changes. Date: Tue Apr 22 14:24:24 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/donaldd/isms/2.6.x-xfs Inspected by: bnaujok The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30924a fs/xfs/xfs.h - 1.53 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs.h.diff?r1=text&tr1=1.53&r2=text&tr2=1.52&f=h - Restore disabled QUOTADEBUG for DEBUG builds. fs/xfs/linux-2.6/xfs_linux.h - 1.164 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_linux.h.diff?r1=text&tr1=1.164&r2=text&tr2=1.163&f=h - Remove unused HAVE_SPLICE macro. From owner-xfs@oss.sgi.com Mon Apr 21 21:27:23 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 21:27:49 -0700 (PDT) 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.3 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 m3M4RJig032604 for ; Mon, 21 Apr 2008 21:27:22 -0700 Received: from cxfsmac10.melbourne.sgi.com (cxfsmac10.melbourne.sgi.com [134.14.55.100]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA11786; Tue, 22 Apr 2008 14:27:57 +1000 Message-ID: <480D694D.8010809@sgi.com> Date: Tue, 22 Apr 2008 14:27:57 +1000 From: Donald Douwsma User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: Wrong patch checked in.... References: <20080422023533.GS103491721@sgi.com> In-Reply-To: <20080422023533.GS103491721@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15535 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: donaldd@sgi.com Precedence: bulk X-list: xfs David Chinner wrote: > Folks, > > I just noticed my builds were coming up with warnings inside > QUOTADEBUG code. I never saw a patch go past that enabled it > for debug kernels, so I was kinda confused until I found this: > ... > Seeing as this mod has already made it to Linus, we can't revert it easily. > > http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e687330b5ed1ea899fdaf0dea50aba196b6e019a > > Donald, can you do another checkin that returns xfs.h to it's previous > state and removes the HAVE_SPLICE stuff correctly? Definitely, just checked it in. Thanks for picking this up Dave, Don From owner-xfs@oss.sgi.com Mon Apr 21 21:52:49 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 21:52:58 -0700 (PDT) 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 m3M4qmMF002069 for ; Mon, 21 Apr 2008 21:52:49 -0700 X-ASG-Debug-ID: 1208840006-37fe02200000-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 23C72CB774; Mon, 21 Apr 2008 21:53:26 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id SKRqnzRlSwN0hLlC; Mon, 21 Apr 2008 21:53:26 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JoAVS-000546-9k; Tue, 22 Apr 2008 04:53:26 +0000 Date: Tue, 22 Apr 2008 00:53:26 -0400 From: Christoph Hellwig To: David Chinner Cc: Christoph Hellwig , Barry Naujok , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 2/4] XFS: Return case-insensitive match for dentry cache Subject: Re: [PATCH 2/4] XFS: Return case-insensitive match for dentry cache Message-ID: <20080422045326.GB11321@infradead.org> References: <20080421083103.433280025@chook.melbourne.sgi.com> <20080421083644.809426871@chook.melbourne.sgi.com> <20080421085947.GA10399@infradead.org> <20080421211300.GO108924158@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080421211300.GO108924158@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1208840010 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.1, rules version 3.1.48474 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15537 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Tue, Apr 22, 2008 at 07:13:01AM +1000, David Chinner wrote: > Perhaps this can be done (moving to dcache.c) as a followup patch > series that also removes the duplicate code from ntfs and other > places. Similarly for all the NLS stuff... It's not like this one is changing core code, just adding a single function should be fine from the XFS tree without any bigger implications. Switching over ntfs should be a separate patch of course. From owner-xfs@oss.sgi.com Mon Apr 21 21:51:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 21:52:10 -0700 (PDT) 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 m3M4pjUW001939 for ; Mon, 21 Apr 2008 21:51:46 -0700 X-ASG-Debug-ID: 1208839944-3850028e0000-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 1DF9B12A47B9; Mon, 21 Apr 2008 21:52:24 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id ZuDVHU2EdcTXimii; Mon, 21 Apr 2008 21:52:24 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JoAUQ-0001Wq-SG; Tue, 22 Apr 2008 04:52:22 +0000 Date: Tue, 22 Apr 2008 00:52:22 -0400 From: Christoph Hellwig To: Barry Naujok Cc: Christoph Hellwig , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 2/4] XFS: Return case-insensitive match for dentry cache Subject: Re: [PATCH 2/4] XFS: Return case-insensitive match for dentry cache Message-ID: <20080422045222.GA11321@infradead.org> References: <20080421083103.433280025@chook.melbourne.sgi.com> <20080421083644.809426871@chook.melbourne.sgi.com> <20080421085947.GA10399@infradead.org> <20080421094641.GA5191@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1208839947 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.1, rules version 3.1.48473 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15536 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Tue, Apr 22, 2008 at 01:54:28PM +1000, Barry Naujok wrote: > There's already a "flags" field in xfs_da_args and only the low 16 bits > are currently used for attr operations. > > We could use 5 of the high bits for these flags, or just add another > flags field (which are used for things other than lookup). Either way is fine for me. The problem with the flags field is that the values in there seem to be passed down from higher up, e.g. the attr code so we'd have to be careful not to use any value twice. From owner-xfs@oss.sgi.com Mon Apr 21 21:54:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 21:54:56 -0700 (PDT) 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 m3M4sj7e002439 for ; Mon, 21 Apr 2008 21:54:46 -0700 X-ASG-Debug-ID: 1208840126-4d9f00d40000-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 2B07712A4BB0; Mon, 21 Apr 2008 21:55:26 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id ZADnhwh5Dl6GJJQh; Mon, 21 Apr 2008 21:55:26 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JoAXO-0000KF-C6; Tue, 22 Apr 2008 04:55:26 +0000 Date: Tue, 22 Apr 2008 00:55:26 -0400 From: Christoph Hellwig To: Barry Naujok Cc: Christoph Hellwig , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 2/4] XFS: Return case-insensitive match for dentry cache Subject: Re: [PATCH 2/4] XFS: Return case-insensitive match for dentry cache Message-ID: <20080422045526.GC11321@infradead.org> References: <20080421083103.433280025@chook.melbourne.sgi.com> <20080421083644.809426871@chook.melbourne.sgi.com> <20080421085947.GA10399@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1208840127 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.1, rules version 3.1.48473 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15538 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Tue, Apr 22, 2008 at 12:07:01PM +1000, Barry Naujok wrote: >> What about just using kmalloc here? We know the length of the name >> anyway, so there is no point of allocating the maximum possible size. > > Not with the CI/NLS, the length could be different. Well, even then we know the length to allocate because it needs to be passed up in the nls_name. For the utf8 case the allocated space for the string might just be different from the number of characters. From owner-xfs@oss.sgi.com Mon Apr 21 22:04:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 22:04:37 -0700 (PDT) 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.0 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 m3M547Ku003473 for ; Mon, 21 Apr 2008 22:04:11 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA12771; Tue, 22 Apr 2008 15:04:49 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3M54msT141505268; Tue, 22 Apr 2008 15:04:48 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3M54mf0141731106; Tue, 22 Apr 2008 15:04:48 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 22 Apr 2008 15:04:48 +1000 From: David Chinner To: Greg Banks Cc: David Chinner , xfs-dev , xfs-oss Subject: Re: [PATCH] Don't initialise new inode generation numbers to zero V2 Message-ID: <20080422050447.GV103491721@sgi.com> References: <20080422015806.GU108924158@sgi.com> <480D641B.8060301@melbourne.sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <480D641B.8060301@melbourne.sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15539 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Tue, Apr 22, 2008 at 02:05:47PM +1000, Greg Banks wrote: > David Chinner wrote: > > Don't initialise new inode generation numbers to zero > > > > When we allocation new inode chunks, we initialise the generation > > numbers to zero. This works fine until we delete a chunk and then > > reallocate it, resulting in the same inode numbers but with a > > reset generation count. This can result in inode/generation > > pairs of different inodes occurring relatively close together. > > > > Given that the inode/gen pair makes up the "unique" portion of > > an NFS filehandle on XFS, this can result in file handles cached > > on clients being seen on the wire from the server but refer to > > a different file. This causes .... issues for NFS clients. > > > > Hence we need a unique generation number initialisation for > > each inode to prevent reuse of a small portion of the generation > > number space. Make this initialiser per-allocation group so > > that it is not a single point of contention in the filesystem, > > and increment it on every allocation within an AG to reduce the > > chance that a generation number is reused for a given inode number > > if the inode chunk is deleted and reallocated immediately > > afterwards. > > > > Version 2: > > o remove persistent per-AGI agi_newinogen field and replace with > > randomly generated 32 bit number for each new cluster. This prevents > > NFS clients from potentially guessing what the next generation > > number is going to be. > > > I'm confused, why would an NFS client be trying to guess the generation > number? AFAICS the important thing is to ensure that the (inode,gen) > tuple isn't reused for a long time to prevent accidental filehandle > identity issues on clients; whether the gen is predictable or not > doesn't matter at all. Yeah, that's exactly what I said to Christoph, but that's the issue he raised w.r.t a malicious client triggering inode/gen collisions intentionally. If that's not a problem, then I can just use random32() for the inode number. If it is a real problem, then it needs to be a cryptographically secure random number. Personally, I don't care either way - I just want to get the issue fixed. Christoph, care to explain how and why this is a problem to everyone? Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 21 23:30:41 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 21 Apr 2008 23:30:50 -0700 (PDT) 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=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 m3M6UcOc008325 for ; Mon, 21 Apr 2008 23:30:41 -0700 X-ASG-Debug-ID: 1208844924-1eb700b30000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from main.carme.maven.pl (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 57DBE10A7708 for ; Mon, 21 Apr 2008 23:15:24 -0700 (PDT) Received: from main.carme.maven.pl (main.carme.maven.pl [193.239.45.138]) by cuda.sgi.com with ESMTP id O4aI4wGHrOJFRyZi for ; Mon, 21 Apr 2008 23:15:24 -0700 (PDT) Received: from [83.238.65.58] (port=4070 helo=[192.168.1.157] ident=matrix157) by main.carme.maven.pl with esmtpa (Exim 4.69) (envelope-from ) id 1JoBlU-0002hR-Ae; Tue, 22 Apr 2008 08:14:04 +0200 From: Arkadiusz Miskiewicz Organization: SelfOrganizing To: David Chinner X-ASG-Orig-Subj: Re: [OT]: how to change the email address in bugzilla Subject: Re: [OT]: how to change the email address in bugzilla Date: Tue, 22 Apr 2008 08:14:45 +0200 User-Agent: PLD Linux KMail/1.9.9 Cc: Christian Kujau , xfs@oss.sgi.com References: <20080421220459.GR108924158@sgi.com> In-Reply-To: <20080421220459.GR108924158@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-2" Content-Disposition: inline Message-Id: <200804220814.45959.arekm@maven.pl> X-Barracuda-Connect: main.carme.maven.pl[193.239.45.138] X-Barracuda-Start-Time: 1208844925 X-Barracuda-Bayes: INNOCENT GLOBAL 0.2045 1.0000 -0.8041 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.80 X-Barracuda-Spam-Status: No, SCORE=-0.80 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.1, rules version 3.1.48481 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m3M6UgOc008331 X-archive-position: 15540 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: arekm@maven.pl Precedence: bulk X-list: xfs On Tuesday 22 of April 2008, David Chinner wrote: > On Mon, Apr 21, 2008 at 10:00:30PM +0200, Christian Kujau wrote: > > really OT, but I don't know where to ask: > > > > where can I change the email address of the bugzilla account on > > oss.sgi.com? > > You can't. Your email address is your account identifier. Just > create a new one. You can in a sane bugzilla configuration. Creating new one means subscribing once again to all reported/watched bugs etc. > Cheers, > Dave. -- Arkadiusz Mi¶kiewicz PLD/Linux Team arekm / maven.pl http://ftp.pld-linux.org/ From owner-xfs@oss.sgi.com Tue Apr 22 02:19:47 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 02:20:06 -0700 (PDT) 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 m3M9JhHd024588 for ; Tue, 22 Apr 2008 02:19:47 -0700 X-ASG-Debug-ID: 1208856018-1c4c00060000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.ipax.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6C497CD52B for ; Tue, 22 Apr 2008 02:20:19 -0700 (PDT) Received: from mail.ipax.at (mail.ipax.at [80.64.143.40]) by cuda.sgi.com with ESMTP id LwyBXfDqUsHYAygv for ; Tue, 22 Apr 2008 02:20:19 -0700 (PDT) Received: from [192.168.1.110] (vie-078-142-128-152.dsl.sil.at [78.142.128.152]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.ipax.at (Postfix) with ESMTP id F2EB7477351 for ; Tue, 22 Apr 2008 11:20:19 +0200 (CEST) Message-ID: <480DADD2.7060408@ipax.at> Date: Tue, 22 Apr 2008 11:20:18 +0200 From: "Raoul Bhatia [IPAX]" User-Agent: Thunderbird 2.0.0.12 (X11/20080227) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: call trace after >page allocation failure. order:0, mode:0x10000< Subject: call trace after >page allocation failure. order:0, mode:0x10000< X-Enigmail-Version: 0.95.6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail.ipax.at[80.64.143.40] X-Barracuda-Start-Time: 1208856024 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=INFO_TLD X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48493 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 INFO_TLD URI: Contains an URL in the INFO top-level domain X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15541 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: r.bhatia@ipax.at Precedence: bulk X-list: xfs hi, is the following calltrace related to xfs or something else? it happended during "stress --hdd 20 --hdd-bytes 2g" on a raid10 volume: > # cat /proc/mdstat > Personalities : [raid1] [raid10] > md0 : active raid10 sdd5[3] sdc5[2] sdb5[1] sda5[0] > 39069824 blocks 64K chunks 2 near-copies [4/4] [UUUU] maybe this is xfs' way to tell "out of diskspace"? :) > db-ipax-164:~# uname -a > Linux db-ipax-164.travian.info 2.6.25-rc8 #2 SMP Mon Apr 7 14:50:22 CEST 2008 x86_64 GNU/Linux * debian etch 64bit * libc6 2.3.6.ds1-13etch5 * xfsprogs 2.8.11-1 cheers, raoul > stress: page allocation failure. order:0, mode:0x10000 > Pid: 12386, comm: stress Not tainted 2.6.25-rc8 #2 > > Call Trace: > [] __alloc_pages+0x2ea/0x306 > [] kmem_getpages+0xc6/0x194 > [] kmem_getpages+0xc6/0x194 > [] fallback_alloc+0x11a/0x18f > [] kmem_cache_alloc_node+0xf1/0x122 > [] cache_grow+0xd5/0x20c > [] fallback_alloc+0x159/0x18f > [] kmem_cache_alloc+0xad/0xdc > [] mempool_alloc+0x24/0xda > [] :xfs:xfs_cluster_write+0xcd/0xf8 > [] bio_alloc_bioset+0x89/0xd9 > [] bio_alloc+0x10/0x20 > [] :xfs:xfs_alloc_ioend_bio+0x22/0x4e > [] :xfs:xfs_submit_ioend+0x4d/0xc6 > [] :xfs:xfs_page_state_convert+0x516/0x565 > [] :xfs:xfs_vm_writepage+0xb4/0xeb > [] __writepage+0xa/0x23 > [] write_cache_pages+0x182/0x2b7 > [] __writepage+0x0/0x23 > [] do_writepages+0x20/0x2d > [] __writeback_single_inode+0x144/0x29d > [] sync_sb_inodes+0x1b1/0x285 > [] :xfs:xfs_get_blocks+0x0/0xe > [] writeback_inodes+0x62/0xb3 > [] balance_dirty_pages_ratelimited_nr+0x155/0x2b3 > [] generic_file_buffered_write+0x206/0x633 > [] thread_return+0x3e/0x9d > [] current_fs_time+0x1e/0x24 > [] :xfs:xfs_write+0x52f/0x75a > [] dummy_file_permission+0x0/0x3 > [] do_sync_write+0xc9/0x10c > [] autoremove_wake_function+0x0/0x2e > [] set_next_entity+0x18/0x3a > [] vfs_write+0xad/0x136 > [] sys_write+0x45/0x6e > [] system_call_after_swapgs+0x7b/0x80 > > Mem-info: > Node 0 DMA per-cpu: > CPU 0: hi: 0, btch: 1 usd: 0 > CPU 1: hi: 0, btch: 1 usd: 0 > CPU 2: hi: 0, btch: 1 usd: 0 > CPU 3: hi: 0, btch: 1 usd: 0 > Node 0 DMA32 per-cpu: > CPU 0: hi: 186, btch: 31 usd: 153 > CPU 1: hi: 186, btch: 31 usd: 185 > CPU 2: hi: 186, btch: 31 usd: 141 > CPU 3: hi: 186, btch: 31 usd: 190 > Node 0 Normal per-cpu: > CPU 0: hi: 186, btch: 31 usd: 169 > CPU 1: hi: 186, btch: 31 usd: 185 > CPU 2: hi: 186, btch: 31 usd: 44 > CPU 3: hi: 186, btch: 31 usd: 116 > Node 1 Normal per-cpu: > CPU 0: hi: 186, btch: 31 usd: 175 > CPU 1: hi: 186, btch: 31 usd: 156 > CPU 2: hi: 186, btch: 31 usd: 33 > CPU 3: hi: 186, btch: 31 usd: 160 > Active:35627 inactive:1900080 dirty:48667 writeback:147697 unstable:0 > free:8797 slab:112757 mapped:1726 pagetables:391 bounce:0 > Node 0 DMA free:11996kB min:12kB low:12kB high:16kB active:0kB inactive:0kB present:11452kB pages_scanned:0 all_unreclaimable? yes > lowmem_reserve[]: 0 3000 4010 4010 > Node 0 DMA32 free:12336kB min:4276kB low:5344kB high:6412kB active:1592kB inactive:2834572kB present:3072160kB pages_scanned:0 all_unreclaimable? no > lowmem_reserve[]: 0 0 1010 1010 > Node 0 Normal free:2320kB min:1436kB low:1792kB high:2152kB active:14336kB inactive:973540kB present:1034240kB pages_scanned:0 all_unreclaimable? no > lowmem_reserve[]: 0 0 0 0 > Node 1 Normal free:8984kB min:5756kB low:7192kB high:8632kB active:126580kB inactive:3791952kB present:4136960kB pages_scanned:0 all_unreclaimable? no > lowmem_reserve[]: 0 0 0 0 > Node 0 DMA: 5*4kB 5*8kB 2*16kB 4*32kB 4*64kB 4*128kB 3*256kB 2*512kB 1*1024kB 0*2048kB 2*4096kB = 11996kB > Node 0 DMA32: 1301*4kB 17*8kB 1*16kB 1*32kB 1*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 1*2048kB 1*4096kB = 12236kB > Node 0 Normal: 311*4kB 0*8kB 1*16kB 3*32kB 1*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 0*2048kB 0*4096kB = 2060kB > Node 1 Normal: 1210*4kB 0*8kB 0*16kB 0*32kB 1*64kB 1*128kB 2*256kB 1*512kB 1*1024kB 1*2048kB 0*4096kB = 9128kB > 1901879 total pagecache pages > Swap cache: add 526500, delete 526485, find 153749/161350 > Free swap = 1999532kB > Total swap = 2000084kB > Free swap: 1999532kB > 2097152 pages of RAM > 29989 reserved pages > 1902596 pages shared > 15 pages swap cached -- ____________________________________________________________________ DI (FH) Raoul Bhatia M.Sc. email. r.bhatia@ipax.at Technischer Leiter IPAX - Aloy Bhatia Hava OEG web. http://www.ipax.at Barawitzkagasse 10/2/2/11 email. office@ipax.at 1190 Wien tel. +43 1 3670030 FN 277995t HG Wien fax. +43 1 3670030 15 ____________________________________________________________________ From owner-xfs@oss.sgi.com Tue Apr 22 04:01:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 04:01:46 -0700 (PDT) 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.0 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 m3MB1YLg030012 for ; Tue, 22 Apr 2008 04:01:37 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id VAA19265; Tue, 22 Apr 2008 21:02:13 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3MB2BsT141007544; Tue, 22 Apr 2008 21:02:12 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3MB2AhB141822639; Tue, 22 Apr 2008 21:02:10 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 22 Apr 2008 21:02:10 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [PATCH] Fix check for block zero access in xfs_write_iomap_allocate Message-ID: <20080422110210.GZ103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15543 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Fix check for block zero access in xfs_write_iomap_allocate The check for block zero access should be done on non-realtime inodes. Fix the logic error in xfs_write_iomap_allocate(), and simplify the logic on all checks for block zero access. Signed-off-by: Dave Chinner --- fs/xfs/xfs_iomap.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) Index: 2.6.x-xfs-new/fs/xfs/xfs_iomap.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_iomap.c 2008-04-22 11:54:54.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_iomap.c 2008-04-22 20:45:53.469961429 +1000 @@ -523,8 +523,7 @@ xfs_iomap_write_direct( goto error_out; } - if (unlikely(!imap.br_startblock && - !(XFS_IS_REALTIME_INODE(ip)))) { + if (!(imap.br_startblock || XFS_IS_REALTIME_INODE(ip))) { error = xfs_cmn_err_fsblock_zero(ip, &imap); goto error_out; } @@ -686,8 +685,7 @@ retry: goto retry; } - if (unlikely(!imap[0].br_startblock && - !(XFS_IS_REALTIME_INODE(ip)))) + if (!(imap[0].br_startblock || XFS_IS_REALTIME_INODE(ip))) return xfs_cmn_err_fsblock_zero(ip, &imap[0]); *ret_imap = imap[0]; @@ -838,9 +836,9 @@ xfs_iomap_write_allocate( * See if we were able to allocate an extent that * covers at least part of the callers request */ - if (unlikely(!imap.br_startblock && - XFS_IS_REALTIME_INODE(ip))) + if (!(imap.br_startblock || XFS_IS_REALTIME_INODE(ip))) return xfs_cmn_err_fsblock_zero(ip, &imap); + if ((offset_fsb >= imap.br_startoff) && (offset_fsb < (imap.br_startoff + imap.br_blockcount))) { @@ -934,8 +932,7 @@ xfs_iomap_write_unwritten( if (error) return XFS_ERROR(error); - if (unlikely(!imap.br_startblock && - !(XFS_IS_REALTIME_INODE(ip)))) + if (!(imap.br_startblock || XFS_IS_REALTIME_INODE(ip))) return xfs_cmn_err_fsblock_zero(ip, &imap); if ((numblks_fsb = imap.br_blockcount) == 0) { From owner-xfs@oss.sgi.com Tue Apr 22 04:00:20 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 04:00:38 -0700 (PDT) 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.0 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 m3MB0G5a029937 for ; Tue, 22 Apr 2008 04:00:19 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id VAA19239; Tue, 22 Apr 2008 21:00:54 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3MB0rsT141838016; Tue, 22 Apr 2008 21:00:54 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3MB0qrQ140655997; Tue, 22 Apr 2008 21:00:52 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 22 Apr 2008 21:00:52 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [PATCH] Don't double count reserved block changes on UP. Message-ID: <20080422110052.GY103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15542 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Don't double count reserved block changes on UP. On uniprocessor machines, the incore superblock is used for all in memory accounting of free blocks. in this situation, changes to the reserved block count are accounted twice; once directly and once via xfs_mod_incore_sb(). Seeing as the modification on SMP is done via xfs_mod_incore_sb(), make this the only update mechanism that UP uses as well. Signed-off-by: Dave Chinner --- fs/xfs/xfs_fsops.c | 4 ---- 1 files changed, 0 insertions(+), 4 deletions(-) diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c index d3a0f53..c4f7c93 100644 --- a/fs/xfs/xfs_fsops.c +++ b/fs/xfs/xfs_fsops.c @@ -552,11 +552,8 @@ retry: mp->m_resblks += free; mp->m_resblks_avail += free; fdblks_delta = -free; - mp->m_sb.sb_fdblocks = XFS_ALLOC_SET_ASIDE(mp); } else { fdblks_delta = -delta; - mp->m_sb.sb_fdblocks = - lcounter + XFS_ALLOC_SET_ASIDE(mp); mp->m_resblks = request; mp->m_resblks_avail += delta; } @@ -587,7 +584,6 @@ out: if (error == ENOSPC) goto retry; } - return 0; } From owner-xfs@oss.sgi.com Tue Apr 22 05:43:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 05:43:54 -0700 (PDT) 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=BAYES_00,J_CHICKENPOX_210, J_CHICKENPOX_45,SUBJECT_FUZZY_TION 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 m3MChaBp008805 for ; Tue, 22 Apr 2008 05:43:37 -0700 X-ASG-Debug-ID: 1208868257-566f02380000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from wr-out-0506.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8823E12A543B for ; Tue, 22 Apr 2008 05:44:18 -0700 (PDT) Received: from wr-out-0506.google.com (wr-out-0506.google.com [64.233.184.235]) by cuda.sgi.com with ESMTP id 1wobhx8o3LHOlbYw for ; Tue, 22 Apr 2008 05:44:18 -0700 (PDT) Received: by wr-out-0506.google.com with SMTP id c48so1169410wra.23 for ; Tue, 22 Apr 2008 05:44:17 -0700 (PDT) Received: by 10.101.66.14 with SMTP id t14mr252841ank.113.1208868256679; Tue, 22 Apr 2008 05:44:16 -0700 (PDT) Received: by 10.100.131.20 with HTTP; Tue, 22 Apr 2008 05:44:16 -0700 (PDT) Message-ID: <18b102300804220544r4bad21b8pe5fc3d61460389d4@mail.gmail.com> Date: Tue, 22 Apr 2008 08:44:16 -0400 From: "James Klaas" To: "Eric Sandeen" X-ASG-Orig-Subj: Re: Is my partition repairable? Subject: Re: Is my partition repairable? Cc: xfs@oss.sgi.com In-Reply-To: <480AC8C1.1050102@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <18b102300804090813u24423515k4c478635494534dc@mail.gmail.com> <480AC8C1.1050102@sandeen.net> X-Barracuda-Connect: wr-out-0506.google.com[64.233.184.235] X-Barracuda-Start-Time: 1208868258 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.1, rules version 3.1.48507 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15544 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jklaas@appalachian.dyndns.org Precedence: bulk X-list: xfs On Sun, Apr 20, 2008 at 12:38 AM, Eric Sandeen wrote: > James Klaas wrote: > > I've been struggling to recover/repair an XFS partition that is on a > > Linux software raid. This is on Ubuntu Feisty (7.04) with xfsprogs > > v2.8.18. > > > > When I try to mount the system, it attempts a recovery: > > > > [127094.470809] Filesystem "md0": Disabling barriers, not supported by > > the underlying device > > [127094.471954] XFS mounting filesystem md0 > > [127094.613551] Starting XFS recovery on filesystem: md0 (logdev: internal) > > [127094.858897] Filesystem "md0": XFS internal error > > xfs_btree_check_sblock at line 334 of file fs/xfs/xfs_btree.c. Caller > > 0xf8eda9fb > > The simplest approach, though perhaps not the least prone to data loss, > is to run xfs_repair with the -L option to zero out the log before > proceeding. > > You could also mount -o ro,norecovery first to back up as much critical > data as possible, beforehand. > > -Eric > Thank you, that actually worked this time for me. I was probably not doing it right before. Now, I have a copy from when I "mount -o ro,norecovery" the partition and after I ran "xfs_repair -L" on the partition. I got a lot of lost+found entries which I went through and decided to mostly throw away (not important files). Most showed up on the copy of the norecovery mounted filesystem anyway. One puzzling thing though. Many files have different md5sums on the copied filesystem versus the repaired filesystem. I've gone through a few of them, but I've been unable to determine a real difference. Do you have any advice as to which files to trust more? I'm inclined to trust the files on the repaired filesystem. James From owner-xfs@oss.sgi.com Tue Apr 22 08:42:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 08:42:26 -0700 (PDT) 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.6 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 m3MFg6ae024379 for ; Tue, 22 Apr 2008 08:42:08 -0700 X-ASG-Debug-ID: 1208878966-2294005e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from rv-out-0506.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 195B615B1B4B for ; Tue, 22 Apr 2008 08:42:46 -0700 (PDT) Received: from rv-out-0506.google.com (rv-out-0506.google.com [209.85.198.238]) by cuda.sgi.com with ESMTP id dP9YAuCKYRraRlqY for ; Tue, 22 Apr 2008 08:42:46 -0700 (PDT) Received: by rv-out-0506.google.com with SMTP id g37so1054884rvb.32 for ; Tue, 22 Apr 2008 08:42:46 -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:mime-version:content-type:content-transfer-encoding:content-disposition; bh=ABbRZ86hDSjIWhaFJauFhafZufPrPzbLfq9rNzyWhDU=; b=sDrRwQIhR8KXWVKcO+CWt/5Le8ebr7l0i9E6uD23xAqK7t0ugU6vCU50TEQyDYo0YaGt6HIK8M2bu9532nmqBY2clZp+qCCVGSZn9k2o6MHT0by+k9mTcLjic5JPN1EaiBoRPikNegjTjYtRx2FLe5elA6YGcUGES1AXyJ8WaLs= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=TRbHyFFMDdKuTSECTQW6uE/VwyFxJmCSo55xzenw3QBhf1n9DUv5lY5XLRgdo8Kvh4vmSftfIjKCdZg8IQZjfPuM2MHlQpkF9b99tqlhkGyETtsBA2N99lNQthy9DqCX6HMBe3ehesx78zVnnDod3VaPpq520zG1eHTt5PFphBs= Received: by 10.141.87.13 with SMTP id p13mr228776rvl.163.1208878965956; Tue, 22 Apr 2008 08:42:45 -0700 (PDT) Received: by 10.140.208.15 with HTTP; Tue, 22 Apr 2008 08:42:45 -0700 (PDT) Message-ID: <1d3e8bf0804220842r26411f51vc714da371255aa90@mail.gmail.com> Date: Tue, 22 Apr 2008 15:42:45 +0000 From: "Dovydas Sankauskas" To: xfs@oss.sgi.com X-ASG-Orig-Subj: disk I/O error Subject: disk I/O error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline X-Barracuda-Connect: rv-out-0506.google.com[209.85.198.238] X-Barracuda-Start-Time: 1208878968 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.1, rules version 3.1.48518 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15545 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: laisve@gmail.com Precedence: bulk X-list: xfs Hi. I have an external USB HDD, which I wanted to use as a temporary storage for my personal data while I clean up my local hdd. And while moving files from local hdd to external hdd, it stopped responding. I tried xfs_repair, but no luck. Any insight on what has happened and what are my chances to restore data? Here are my logs. # xfs_repair /dev/sdb1 - creating 2 worker thread(s) Phase 1 - find and verify superblock... superblock read failed, offset 0, size 524288, ag 0, rval -1 fatal error -- Input/output error # xfs_check /dev/sdb1 xfs_check: read failed: Input/output error Segmentation fault # uname -a Linux pasaka 2.6.22-14-generic #1 SMP Sun Oct 14 23:05:12 GMT 2007 i686 GNU/Linux relevant /var/log/syslog Dec 7 11:51:38 localhost kernel: [1784909.352000] usb 4-1: USB disconnect, address 15 Dec 7 11:51:38 localhost kernel: [1784909.352000] sd 12:0:0:0: [sdb] Result: hostbyte=DID_NO_CONNECT driverbyte=DRIVER_OK,SUGGEST_OK Dec 7 11:51:38 localhost kernel: [1784909.352000] end_request: I/O error, dev sdb, sector 118489959 Dec 7 11:51:38 localhost kernel: [1784909.352000] xfs_force_shutdown(sdb1,0x1) called from line 423 of file /build/buildd/linux-source-2.6.22-2.6.22/fs/xfs/xfs_rw.c. Return address = 0xf8cc2c7c Dec 7 11:51:38 localhost kernel: [1784909.352000] Filesystem "sdb1": I/O Error Detected. Shutting down filesystem: sdb1 Dec 7 11:51:38 localhost kernel: [1784909.352000] Please umount the filesystem, and rectify the problem(s) Dec 7 11:51:38 localhost kernel: [1784909.352000] xfs_force_shutdown(sdb1,0x1) called from line 423 of file /build/buildd/linux-source-2.6.22-2.6.22/fs/xfs/xfs_rw.c. Return address = 0xf8cc2c7c Dec 7 11:51:38 localhost kernel: [1784909.424000] I/O error in filesystem ("sdb1") meta-data dev sdb1 block 0x7100328 ("xfs_trans_read_buf") error 5 buf count 8192 Dec 7 15:37:02 localhost kernel: [1798432.984000] scsi17 : SCSI emulation for USB Mass Storage devices Dec 7 15:37:02 localhost kernel: [1798432.984000] usb-storage: device found at 20 Dec 7 15:37:02 localhost kernel: [1798432.984000] usb-storage: waiting for device to settle before scanning Dec 7 15:37:07 localhost kernel: [1798437.984000] usb-storage: device scan complete Dec 7 15:37:07 localhost kernel: [1798437.988000] scsi 17:0:0:0: Direct-Access Maxtor 6 L300R0 0811 PQ: 0 ANSI: 0 Dec 7 15:37:07 localhost kernel: [1798437.992000] sd 17:0:0:0: [sdb] 586114704 512-byte hardware sectors (300091 MB) Dec 7 15:37:07 localhost kernel: [1798437.992000] sd 17:0:0:0: [sdb] Test WP failed, assume Write Enabled Dec 7 15:37:07 localhost kernel: [1798437.992000] sd 17:0:0:0: [sdb] Assuming drive cache: write through Dec 7 15:37:07 localhost kernel: [1798437.992000] sd 17:0:0:0: [sdb] 586114704 512-byte hardware sectors (300091 MB) Dec 7 15:37:07 localhost kernel: [1798437.996000] sd 17:0:0:0: [sdb] Test WP failed, assume Write Enabled Dec 7 15:37:07 localhost kernel: [1798437.996000] sd 17:0:0:0: [sdb] Assuming drive cache: write through Dec 7 15:37:07 localhost kernel: [1798437.996000] sdb: sdb1 Dec 7 15:37:07 localhost kernel: [1798438.012000] sd 17:0:0:0: [sdb] Attached SCSI disk Dec 7 15:37:07 localhost kernel: [1798438.012000] sd 17:0:0:0: Attached scsi generic sg2 type 0 Dec 7 15:37:18 localhost kernel: [1798448.764000] sd 17:0:0:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE,SUGGEST_OK Dec 7 15:37:18 localhost kernel: [1798448.764000] sd 17:0:0:0: [sdb] Sense Key : Hardware Error [current] Dec 7 15:37:18 localhost kernel: [1798448.764000] sd 17:0:0:0: [sdb] Add. Sense: Data phase error Dec 7 15:37:18 localhost kernel: [1798448.764000] end_request: I/O error, dev sdb, sector 112 Dec 7 15:37:18 localhost kernel: [1798448.764000] Buffer I/O error on device sdb, logical block 14 Dec 7 15:37:18 localhost kernel: [1798448.764000] Buffer I/O error on device sdb, logical block 15 Dec 7 15:37:18 localhost kernel: [1798448.764000] Buffer I/O error on device sdb, logical block 16 Dec 7 15:37:26 localhost kernel: [1798456.976000] XFS mounting filesystem sdb1 Dec 7 15:37:26 localhost kernel: [1798457.220000] Starting XFS recovery on filesystem: sdb1 (logdev: internal) Dec 7 15:37:38 localhost kernel: [1798469.300000] sd 17:0:0:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE,SUGGEST_OK Dec 7 15:37:38 localhost kernel: [1798469.300000] sd 17:0:0:0: [sdb] Sense Key : Hardware Error [current] Dec 7 15:37:38 localhost kernel: [1798469.300000] sd 17:0:0:0: [sdb] Add. Sense: Data phase error Dec 7 15:37:38 localhost kernel: [1798469.300000] end_request: I/O error, dev sdb, sector 127 Dec 7 15:37:38 localhost kernel: [1798469.304000] I/O error in filesystem ("sdb1") meta-data dev sdb1 block 0x40 ("xfs_trans_read_buf") error 5 buf count 8192 Dec 7 15:37:38 localhost kernel: [1798469.304000] XFS: failed to read root inode relevant /var/log/messages Dec 7 15:37:02 localhost kernel: [1798432.852000] usb 4-1: new high speed USB device using ehci_hcd and address 20 Dec 7 15:37:02 localhost kernel: [1798432.984000] usb 4-1: configuration #1 chosen from 1 choice Dec 7 15:37:02 localhost kernel: [1798432.984000] scsi17 : SCSI emulation for USB Mass Storage devices Dec 7 15:37:07 localhost kernel: [1798437.988000] scsi 17:0:0:0: Direct-Access Maxtor 6 L300R0 0811 PQ: 0 ANSI: 0 Dec 7 15:37:07 localhost kernel: [1798437.992000] sd 17:0:0:0: [sdb] 586114704 512-byte hardware sectors (300091 MB) Dec 7 15:37:07 localhost kernel: [1798437.992000] sd 17:0:0:0: [sdb] Test WP failed, assume Write Enabled Dec 7 15:37:07 localhost kernel: [1798437.992000] sd 17:0:0:0: [sdb] 586114704 512-byte hardware sectors (300091 MB) Dec 7 15:37:07 localhost kernel: [1798437.996000] sd 17:0:0:0: [sdb] Test WP failed, assume Write Enabled Dec 7 15:37:07 localhost kernel: [1798437.996000] sdb: sdb1 Dec 7 15:37:07 localhost kernel: [1798438.012000] sd 17:0:0:0: [sdb] Attached SCSI disk Dec 7 15:37:07 localhost kernel: [1798438.012000] sd 17:0:0:0: Attached scsi generic sg2 type 0 Dec 7 15:37:18 localhost kernel: [1798448.764000] sd 17:0:0:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE,SUGGEST_OK Dec 7 15:37:18 localhost kernel: [1798448.764000] sd 17:0:0:0: [sdb] Sense Key : Hardware Error [current] Dec 7 15:37:18 localhost kernel: [1798448.764000] sd 17:0:0:0: [sdb] Add. Sense: Data phase error Dec 7 15:37:18 localhost kernel: [1798448.764000] end_request: I/O error, dev sdb, sector 112 Dec 7 15:37:26 localhost kernel: [1798456.976000] XFS mounting filesystem sdb1 Dec 7 15:37:26 localhost kernel: [1798457.220000] Starting XFS recovery on filesystem: sdb1 (logdev: internal) Dec 7 15:37:38 localhost kernel: [1798469.300000] sd 17:0:0:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE,SUGGEST_OK Dec 7 15:37:38 localhost kernel: [1798469.300000] sd 17:0:0:0: [sdb] Sense Key : Hardware Error [current] Dec 7 15:37:38 localhost kernel: [1798469.300000] sd 17:0:0:0: [sdb] Add. Sense: Data phase error Dec 7 15:37:38 localhost kernel: [1798469.300000] end_request: I/O error, dev sdb, sector 127 Dec 7 15:37:38 localhost kernel: [1798469.304000] XFS: failed to read root inode Dec 7 15:37:38 localhost kernel: [1798469.416000] XFS mounting filesystem sdb1 Dec 7 15:37:38 localhost kernel: [1798469.588000] Starting XFS recovery on filesystem: sdb1 (logdev: internal) Dec 7 15:37:52 localhost kernel: [1798483.084000] sd 17:0:0:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE,SUGGEST_OK Dec 7 15:37:52 localhost kernel: [1798483.084000] sd 17:0:0:0: [sdb] Sense Key : Hardware Error [current] Dec 7 15:37:52 localhost kernel: [1798483.084000] sd 17:0:0:0: [sdb] Add. Sense: Data phase error Dec 7 15:37:52 localhost kernel: [1798483.084000] end_request: I/O error, dev sdb, sector 127 Dec 7 15:37:52 localhost kernel: [1798483.092000] XFS: failed to read root inode Dec 7 15:40:18 localhost kernel: [1798629.192000] sd 17:0:0:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE,SUGGEST_OK Dec 7 15:40:18 localhost kernel: [1798629.192000] sd 17:0:0:0: [sdb] Sense Key : Hardware Error [current] Dec 7 15:40:18 localhost kernel: [1798629.192000] sd 17:0:0:0: [sdb] Add. Sense: Data phase error Dec 7 15:40:18 localhost kernel: [1798629.192000] end_request: I/O error, dev sdb, sector 126 Dec 7 15:44:32 localhost kernel: [1798883.420000] sd 17:0:0:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE,SUGGEST_OK Dec 7 15:44:32 localhost kernel: [1798883.420000] sd 17:0:0:0: [sdb] Sense Key : Hardware Error [current] Dec 7 15:44:32 localhost kernel: [1798883.420000] sd 17:0:0:0: [sdb] Add. Sense: Data phase error Dec 7 15:44:32 localhost kernel: [1798883.420000] end_request: I/O error, dev sdb, sector 131 Any help would be appreciated. -- Dovydas Sankauskas From owner-xfs@oss.sgi.com Tue Apr 22 09:51:51 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 09:52:09 -0700 (PDT) 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 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 m3MGpm5L028477 for ; Tue, 22 Apr 2008 09:51:51 -0700 X-ASG-Debug-ID: 1208883144-072c02800000-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 829AFA933BA for ; Tue, 22 Apr 2008 09:52:24 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id O7lKmCD6kH62M22q for ; Tue, 22 Apr 2008 09:52:24 -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 D9C0E18003F13; Tue, 22 Apr 2008 11:52:23 -0500 (CDT) Message-ID: <480E17C7.7070606@sandeen.net> Date: Tue, 22 Apr 2008 11:52:23 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Dovydas Sankauskas CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: disk I/O error Subject: Re: disk I/O error References: <1d3e8bf0804220842r26411f51vc714da371255aa90@mail.gmail.com> In-Reply-To: <1d3e8bf0804220842r26411f51vc714da371255aa90@mail.gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1208883150 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.1, rules version 3.1.48521 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15546 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Dovydas Sankauskas wrote: > Hi. > > I have an external USB HDD, which I wanted to use as a temporary > storage for my personal data while I clean up my local hdd. And while > moving files from local hdd to external hdd, it stopped responding. I > tried xfs_repair, but no luck. > > Any insight on what has happened Look no further than your $SUBJECT :) > and what are my chances to restore > data? Which disk died, original or backup? In any case to recover as best you can from the dying disk, try dd_rescue to image every readable sector, then run xfs_repair on that image and mount it loopback to get to what's left. -Eric From owner-xfs@oss.sgi.com Tue Apr 22 15:48:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 15:49:03 -0700 (PDT) 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.8 required=5.0 tests=AWL,BAYES_00,SUBJ_FORWARDED autolearn=no 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 m3MMmY4U020860 for ; Tue, 22 Apr 2008 15:48:38 -0700 X-ASG-Debug-ID: 1208904545-371a02220000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail2505.carrierzone.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5A49915B8F5D for ; Tue, 22 Apr 2008 15:49:05 -0700 (PDT) Received: from mail2505.carrierzone.com (mail2505.carrierzone.com [64.29.147.15]) by cuda.sgi.com with ESMTP id eJ3iVfLo4Z9t3dxz for ; Tue, 22 Apr 2008 15:49:05 -0700 (PDT) X-Authenticated-User: support.geoglobal.com Received: from ggrmilesl.geoglobal.ca ([68.145.110.189]) (authenticated bits=0) by mail2505.carrierzone.com (8.13.6.20060614/8.13.1) with ESMTP id m3MMmnbk019167; Tue, 22 Apr 2008 22:48:50 GMT From: support@geoglobal.com To: xfs@oss.sgi.com, vincent.roy@geoglobal.com X-ASG-Orig-Subj: Fwd: xfs_repair -n report Subject: Fwd: xfs_repair -n report Date: Tue, 22 Apr 2008 16:56:11 -0600 User-Agent: KMail/1.9.1 MIME-Version: 1.0 Message-Id: <200804221656.13566.support@geoglobal.com> Content-Type: Multipart/Mixed; boundary="Boundary-00=_N0mDIQ4dDOicR2G" X-Barracuda-Connect: mail2505.carrierzone.com[64.29.147.15] X-Barracuda-Start-Time: 1208904546 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0872 1.0000 -1.4701 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.42 X-Barracuda-Spam-Status: No, SCORE=-0.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48546 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.55 NO_REAL_NAME From: does not include a real name 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15547 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: support@geoglobal.com Precedence: bulk X-list: xfs --Boundary-00=_N0mDIQ4dDOicR2G Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Here is the log when xfs_repair -Lv I noticed on one thread that someone mentioned a patch that works on the error "Unexpected inode type 0160000 inode 1342181331" Anyone know where this patch is? Regards, Vincent ---------- Forwarded Message ---------- Subject: Fwd: xfs_repair -n report Date: Monday 21 April 2008 14:52 From: support@geoglobal.com To: xfs@oss.sgi.com, vincent.roy@geoglobal.com Sorry, I truncated the original logfile of 128MB to a short version for review. Again, all comments welcome. Regards, Vincent ---------- Forwarded Message ---------- Subject: xfs_repair -n report Date: Saturday 19 April 2008 23:22 From: support@geoglobal.com To: xfs@oss.sgi.com, vincent.roy@geoglobal.com RAID 5 - 4 disks on 9550 AMCC production machine / backup disk failed also verified without error - rebuilt after abrupt power shut down cannot mount - inconsistencies indicated - could not dump fs Here is testfile based xfs_repair -n Please help in anyway. All comments welcome.... Regards, Vincent ------------------------------------------------------- ------------------------------------------------------- --Boundary-00=_N0mDIQ4dDOicR2G Content-Type: application/x-zerosize; name="testfile" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="testfile" --Boundary-00=_N0mDIQ4dDOicR2G Content-Type: text/rtf; charset="iso-8859-1"; name="testfile_raid.rtf" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="testfile_raid.rtf" {\rtf1\ansi\deff0\adeflang1025 {\fonttbl{\f0\froman\fprq2\fcharset0 Thorndale AMT{\*\falt Times New Roman};}{\f1\froman\fprq2\fcharset0 Thorndale AMT{\*\falt Times New Roman};}{\f2\fswiss\fprq2\fcharset0 Albany AMT{\*\falt Arial};}{\f3\fmodern\fprq1\fcharset0 Cumberland AMT{\*\falt Courier New};}{\f4\fnil\fprq2\fcharset0 Albany AMT{\*\falt Arial};}{\f5\fnil\fprq2\fcharset0 Lucidasans;}{\f6\fnil\fprq0\fcharset0 Lucidasans;}} {\colortbl;\red0\green0\blue0;\red128\green128\blue128;} {\stylesheet{\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057\snext1 Normal;} {\s2\sb240\sa120\keepn\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\afs28\lang255\ltrch\dbch\langfe255\hich\f2\fs28\lang2057\loch\f2\fs28\lang2057\sbasedon1\snext3 Heading;} {\s3\sa120\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057\sbasedon1\snext3 Body Text;} {\s4\sa120\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af6\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057\sbasedon3\snext4 List;} {\s5\sb120\sa120\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af6\afs24\lang255\ai\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\i\loch\f0\fs24\lang2057\i\sbasedon1\snext5 caption;} {\s6\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af6\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057\sbasedon1\snext6 Index;} {\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057\sbasedon1\snext7 Preformatted Text;} } {\info{\creatim\yr2008\mo4\dy21\hr14\min29}{\revtim\yr2008\mo4\dy21\hr14\min46}{\printim\yr1601\mo1\dy1\hr0\min0}{\comment StarWriter}{\vern6800}}\deftab709 {\*\pgdsctbl {\pgdsc0\pgdscuse195\pgwsxn11905\pghsxn16837\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\pgdscnxt0 Standard;}} \paperh16837\paperw11905\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\pgwsxn11905\pghsxn16837\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 Phase 1 - find and verify superblock...} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 Phase 2 - using internal log} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 - scan filesystem freespace and inode maps...} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 bad magic # 0x58418710 for agi 0} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 bad version # 2 for agi 0} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 would reset bad agi for ag 0} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 bad uncorrected agheader 0, skipping ag...} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 bad magic # 0x4142940a in btcnt block 7/2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 expected level 0 got 3 in btcnt block 7/2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,288) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,289) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,296) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,297) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,302) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,296) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,297) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,298) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,333) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,334) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (7,403) already used, state 2} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 inode chunk claims used block, inobt block - agno 7, bno 3, inopb 16} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (14,421692) multiply claimed by bno space tree, state - 1} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (14,421693) multiply claimed by bno space tree, state - 1} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 block (14,421694) multiply claimed by bno space tree, state \uc3 \u8211\'e2\'80\'93\uc1 1} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 {\rtlch \ltrch\loch\f0\fs24\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (14,971003) multiply claimed by bno space tree, state - 1} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (14,971004) multiply claimed by bno space tree, state - 1} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (14,971005) multiply claimed by bno space tree, state - 1} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 inode chunk claims used block, inobt block - agno 14, bno 3, inopb 16} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 inode chunk claims used block, inobt block - agno 14, bno 3, inopb 16} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 inode chunk claims used block, inobt block - agno 14, bno 3, inopb 16} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 inode chunk claims used block, inobt block - agno 14, bno 3, inopb 16} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic # 0xf816dffa in btcnt block 16/171879} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 expected level 1 got 26155 in btcnt block 16/171879} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,5978200) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,5978203) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,5978205) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,5978207) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,68745) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,860197) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,785480) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (17,1866283) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic # 0x9ded151b in btbno block 22/2314} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 expected level 0 got 46701 in btbno block 22/2314} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (22,110646) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (22,129495) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (22,129496) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (22,348309) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (22,348310) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (22,53743) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic # 0xa6bceb7b in btcnt block 25/44818} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 expected level 0 got 55508 in btcnt block 25/44818} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (25,208993) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (25,160757) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic # 0xbe425443 in btcnt block 27/26679} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (27,201095) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (27,201096) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .block (27,4619369) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (27,4619370) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 block (27,4619371) already used, state 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 root inode chunk not found} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 Phase 3 - for each AG...} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 - scan (but don't clear) agi unlinked lists...} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 error following ag 0 unlinked list} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 found inodes not in the inode allocation tree} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 found inodes not in the inode allocation tree} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 - process known inodes and perform inode discovery...} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 - agno = 0} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode 131 is free, would correct imap} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode 132 is free, would correct imap} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode 133 is free, would correct imap} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode 188 is free, would correct imap} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode 189 is free, would correct imap} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode 190 is free, would correct imap} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode 191 is free, would correct imap} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 - agno = 1} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad bestfree table in block 5 in directory inode 268435584: would repair table} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 268435720 claims free block 369517041} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 268435720 claims free block 369517042} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 268435720 claims free block 369517043} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 270738556 claims free block 471793209} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 270738556 claims free block 471793210} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 270738556 claims free block 471793211} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad nblocks 5 for inode 270738556, would reset to 97} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims in-use inode 270738556 is free, would correct imap} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 270738557} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 270738557} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 270738558} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 270738558} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 270738559} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 270738559} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 270738592} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 270738593} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 270738594} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 270738753} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 270738753} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 270738901 claims used block 251703131} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 270738901} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 270738901} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 - agno = 2} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad . entry in directory inode 536871040, was 536871045: would correct} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad . entry in directory inode 536871041, was 536871040: would correct} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad . entry in directory inode 536871045, was 536871049: would correct} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad . entry in directory inode 536871047, was 536871830: would correct} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad directory block magic # 0x58443242 in block 1 for directory inode 536871055} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 corrupt block 1 in directory inode 536871055} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 \tab would junk block} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 536871085 claims free block 419433502} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 536871092 claims free block 469762257} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 536871096 claims free block 143352225} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 536871096 claims free block 143352226} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 corrupt block 0 in directory inode 536871099} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 \tab would junk block} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no . entry for directory 536871099} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no .. entry for directory 536871099} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 problem with directory contents in inode 536871099} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 536871099} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 536871102 claims free block 134321130} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 536871102 claims free block 134321131} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 536871102 claims free block 134321132} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179589 claims free block 286348755} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179589 claims free block 286348756} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179589 claims free block 286348757} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179590 claims used block 303545771} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179590} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179590} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179591 claims used block 486729909} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179591} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179591} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179592 data fork is too large (size = 4939602, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179592} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179592} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179593 data fork is too large (size = 4168798, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179593} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179593} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179594 data fork is too large (size = 4325755, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179594} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179594} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179595 data fork is too large (size = 3233338, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179595} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179595} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179596 data fork is too large (size = 10360806, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179596} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179596} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179597 data fork is too large (size = 9502373, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179597} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179597} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179598 data fork is too large (size = 3250076, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179598} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179598} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179599 data fork is too large (size = 3133743, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179599} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179599} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179600 data fork is too large (size = 4085608, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179600} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179600} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179601 claims used block 285233312} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179601} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179601} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179602 data fork is too large (size = 3410791, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179602} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179602} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179603 data fork is too large (size = 2044592, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179603} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179603} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179604 data fork is too large (size = 3109201, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179604} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179604} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179605 data fork is too large (size = 1523100, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179605} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179605} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179606 data fork is too large (size = 1811725, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179606} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179606} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179607 data fork is too large (size = 1659849, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179607} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179607} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179608 claims used block 285322819} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179608} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179608} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179609 claims free block 436897527} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179609 claims free block 436897528} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179609 claims free block 436897529} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179614 claims free block 286243438} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179614 claims free block 286243439} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179615 claims used block 302854456} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179615} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179615} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2 on inode 1342179616} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179616} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xbbf7 on inode 1342179617} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x64 on inode 1342179617} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179617} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x4727 on inode 1342179618} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x43 on inode 1342179618} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179618} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x7649 on inode 1342179619} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffc1 on inode 1342179619} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179619} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x8985 on inode 1342179620} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffc1 on inode 1342179620} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179620} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x327b on inode 1342179621} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x57 on inode 1342179621} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179621} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x7627 on inode 1342179622} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3e on inode 1342179622} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179622} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5956 on inode 1342179623} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x5b on inode 1342179623} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179623} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x374a on inode 1342179624} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x7f on inode 1342179624} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179624} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x77ca on inode 1342179625} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3f on inode 1342179625} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179625} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x1983 on inode 1342179626} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x10 on inode 1342179626} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179626} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x3ef6 on inode 1342179627} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x70 on inode 1342179627} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179627} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x77a2 on inode 1342179628} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3f on inode 1342179628} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179628} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x3ed2 on inode 1342179629} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x7a on inode 1342179629} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179629} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x7791 on inode 1342179630} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3f on inode 1342179630} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179630} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x3bc2 on inode 1342179631} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x10 on inode 1342179631} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179631} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2 on inode 1342179616, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179616} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179616} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xbbf7 on inode 1342179617, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x64 on inode 1342179617, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179617} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179617} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x4727 on inode 1342179618, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x43 on inode 1342179618, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179618} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179618} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x7649 on inode 1342179619, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffc1 on inode 1342179619, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179619} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179619} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x8985 on inode 1342179620, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffc1 on inode 1342179620, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179620} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179620} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x327b on inode 1342179621, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x57 on inode 1342179621, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179621} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179621} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x7627 on inode 1342179622, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3e on inode 1342179622, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179622} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179622} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5956 on inode 1342179623, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x5b on inode 1342179623, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179623} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179623} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x374a on inode 1342179624, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x7f on inode 1342179624, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179624} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179624} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x77ca on inode 1342179625, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3f on inode 1342179625, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179625} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179625} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x1983 on inode 1342179626, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x10 on inode 1342179626, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179626} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179626} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x3ef6 on inode 1342179627, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x70 on inode 1342179627, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179627} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179627} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x77a2 on inode 1342179628, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3f on inode 1342179628, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179628} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179628} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x3ed2 on inode 1342179629, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x7a on inode 1342179629, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179629} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179629} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x7791 on inode 1342179630, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x3f on inode 1342179630, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179630} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179630} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x3bc2 on inode 1342179631, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x10 on inode 1342179631, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342179631} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179631} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179632 data fork is too large (size = 196095, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179632} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179632} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179633 data fork is too large (size = 366190, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179633} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179633} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179634 claims used block 235047448} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179634} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179634} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179635 data fork is too large (size = 395536, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179635} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179635} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179636 claims used block 235008106} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179636} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179636} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad bmap btree ptr 0xc13a8acad6eab189 in ino 1342179639} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179639} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179639} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179640 claims used block 167823233} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179640} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179640} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 local inode 1342179642 data fork is too large (size = 210763, max = 156)} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179642} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179642} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad size/format for directory 1342179643} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 problem with directory contents in inode 1342179643} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179643} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 mismatch between format (1) and size (176557) in symlink inode 1342179645} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in symlink 1342179645} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179645} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 mismatch between format (1) and size (541891) in symlink inode 1342179646} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in symlink 1342179646} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179646} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 mismatch between format (1) and size (528780) in symlink inode 1342179647} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in symlink 1342179647} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179647} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 mismatch between format (1) and size (97776) in symlink inode 1342179648} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in symlink 1342179648} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179648} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 mismatch between format (1) and size (71351) in symlink inode 1342179649} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in symlink 1342179649} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179649} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179654 claims used block 521054414} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179654} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179654} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in regular inode 1342179665 claims used block 135191770} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad data fork in inode 1342179665} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342179665} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179670 claims free block 235329860} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179670 claims free block 235329861} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342179670 claims free block 235329862} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 .} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342181150 claims free block 387842929} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342181150 claims free block 387842930} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342181150 claims free block 387842931} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181186} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181200} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181201} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181202} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181203} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181204} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181205} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2 on inode 1342181216} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -8098840690732274055 on inode 1342181217} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x1b20 on inode 1342181218} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xd on inode 1342181218} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -44603782713929781 on inode 1342181218} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xaf88 on inode 1342181219} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffff9f on inode 1342181219} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181219} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xaf97 on inode 1342181220} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x64 on inode 1342181220} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -8598615031889885277 on inode 1342181220} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x4ed7 on inode 1342181221} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffab on inode 1342181221} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -7421484120082124244 on inode 1342181221} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xc784 on inode 1342181222} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffff97 on inode 1342181222} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -7039745431618388759 on inode 1342181222} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x8654 on inode 1342181223} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffff94 on inode 1342181223} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -7892964874975931737 on inode 1342181223} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb2b2 on inode 1342181224} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffffd on inode 1342181224} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -2741290762856431056 on inode 1342181224} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb5f1 on inode 1342181225} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffffd on inode 1342181225} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -145244644254024567 on inode 1342181225} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf045 on inode 1342181226} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffac on inode 1342181226} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -216457572855644921 on inode 1342181226} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb486 on inode 1342181227} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffffc on inode 1342181227} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -4785780517491573548 on inode 1342181227} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xcb3 on inode 1342181228} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffff5 on inode 1342181228} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -218990860528255687 on inode 1342181228} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb449 on inode 1342181229} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffffc on inode 1342181229} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -215894529477870567 on inode 1342181229} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x953a on inode 1342181230} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffd3 on inode 1342181230} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -4040222610815773810 on inode 1342181230} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x899d on inode 1342181231} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2 on inode 1342181231} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -6137713694427973127 on inode 1342181231} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x672a on inode 1342181233} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xc on inode 1342181233} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181233} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181186} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181186} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181187 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181188 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181189 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181190 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181191 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181192 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181193 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181194 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181195 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181196 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181197 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181198 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181199 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181200} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181200} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181201} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181201} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181202} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181202} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181203} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181203} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181204} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181204} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181205} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181205} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181206 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181207 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181208 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181209 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181210 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181211 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181212 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181213 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181214 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181215 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2 on inode 1342181216, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181216 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181216} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -8098840690732274055 on inode 1342181217} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181217} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x1b20 on inode 1342181218, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xd on inode 1342181218, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -44603782713929781 on inode 1342181218} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181218} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xaf88 on inode 1342181219, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffff9f on inode 1342181219, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181219} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181219} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xaf97 on inode 1342181220, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x64 on inode 1342181220, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -8598615031889885277 on inode 1342181220} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181220} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x4ed7 on inode 1342181221, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffab on inode 1342181221, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -7421484120082124244 on inode 1342181221} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181221} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xc784 on inode 1342181222, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffff97 on inode 1342181222, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -7039745431618388759 on inode 1342181222} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181222} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x8654 on inode 1342181223, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffff94 on inode 1342181223, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -7892964874975931737 on inode 1342181223} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181223} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb2b2 on inode 1342181224, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffffd on inode 1342181224, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -2741290762856431056 on inode 1342181224} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181224} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb5f1 on inode 1342181225, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffffd on inode 1342181225, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -145244644254024567 on inode 1342181225} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181225} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf045 on inode 1342181226, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffac on inode 1342181226, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -216457572855644921 on inode 1342181226} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181226} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb486 on inode 1342181227, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffffc on inode 1342181227, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -4785780517491573548 on inode 1342181227} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181227} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xcb3 on inode 1342181228, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffff5 on inode 1342181228, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -218990860528255687 on inode 1342181228} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181228} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xb449 on inode 1342181229, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xfffffffc on inode 1342181229, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -215894529477870567 on inode 1342181229} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181229} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x953a on inode 1342181230, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffd3 on inode 1342181230, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -4040222610815773810 on inode 1342181230} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181230} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x899d on inode 1342181231, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2 on inode 1342181231, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -6137713694427973127 on inode 1342181231} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181231} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181232 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x672a on inode 1342181233, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xc on inode 1342181233, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181233} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181233} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181234 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181235 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181236 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181237 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181238 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181239 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181240 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181241 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181242 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181243 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181244 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181245 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181246 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181247 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xf on inode 1342181296} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -8531373024821224668 on inode 1342181297} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x297c on inode 1342181298} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x56 on inode 1342181298} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181298} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5544 on inode 1342181299} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x1b on inode 1342181299} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181299} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x464e on inode 1342181300} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x52 on inode 1342181300} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181300} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xd440 on inode 1342181301} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x33 on inode 1342181301} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181301} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xd4b1 on inode 1342181302} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffc0 on inode 1342181302} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -5714591680202162485 on inode 1342181302} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x82d7 on inode 1342181303} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffff8b on inode 1342181303} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -4027625441752728915 on inode 1342181303} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf0b9 on inode 1342181304} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffa0 on inode 1342181304} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -1404089711421248255 on inode 1342181304} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xa8cf on inode 1342181305} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffca on inode 1342181305} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181305} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5b52 on inode 1342181306} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x44 on inode 1342181306} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181306} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5d51 on inode 1342181311} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x65 on inode 1342181311} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181311} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x7 on inode 1342181312} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x2d28 on inode 1342181313} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x78 on inode 1342181313} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181313} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x641a on inode 1342181314} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2a on inode 1342181314} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181314} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x5 on inode 1342181328} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xa3fc on inode 1342181329} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x8381 on inode 1342181330} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x65 on inode 1342181330} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181330} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf2b7 on inode 1342181331} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x15 on inode 1342181331} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf2b3 on inode 1342181332} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x15 on inode 1342181332} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181332} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf543 on inode 1342181333} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x12 on inode 1342181333} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181333} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf55d on inode 1342181334} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181334} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342181281 claims free block 83886335} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 corrupt block 0 in directory inode 1342181281} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 \tab would junk block} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no . entry for directory 1342181281} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no .. entry for directory 1342181281} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 problem with directory contents in inode 1342181281} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181281} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342181282 claims free block 83886334} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 corrupt block 0 in directory inode 1342181282} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 \tab would junk block} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no . entry for directory 1342181282} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no .. entry for directory 1342181282} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 problem with directory contents in inode 1342181282} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181282} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342181283 claims free block 83886340} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad directory block magic # 0x5844b3a6 in block 0 for directory inode 1342181283} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 corrupt block 0 in directory inode 1342181283} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 \tab would junk block} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no . entry for directory 1342181283} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 no .. entry for directory 1342181283} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 problem with directory contents in inode 1342181283} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181283} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 data fork in ino 1342181290 claims free block 83886341} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181292 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181293 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181294 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181295 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xf on inode 1342181296, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181296 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181296} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -8531373024821224668 on inode 1342181297} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181297} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x297c on inode 1342181298, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x56 on inode 1342181298, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181298} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181298} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5544 on inode 1342181299, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x1b on inode 1342181299, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181299} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181299} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x464e on inode 1342181300, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x52 on inode 1342181300, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181300} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181300} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xd440 on inode 1342181301, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x33 on inode 1342181301, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181301} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181301} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xd4b1 on inode 1342181302, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffc0 on inode 1342181302, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -5714591680202162485 on inode 1342181302} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181302} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x82d7 on inode 1342181303, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffff8b on inode 1342181303, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -4027625441752728915 on inode 1342181303} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181303} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf0b9 on inode 1342181304, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffa0 on inode 1342181304, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad (negative) size -1404089711421248255 on inode 1342181304} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181304} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xa8cf on inode 1342181305, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0xffffffca on inode 1342181305, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181305} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181305} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5b52 on inode 1342181306, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x44 on inode 1342181306, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181306} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181306} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181307 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181308 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181309 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181310 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x5d51 on inode 1342181311, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x65 on inode 1342181311, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181311} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181311} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x7 on inode 1342181312, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181312 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181312} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x2d28 on inode 1342181313, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x78 on inode 1342181313, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181313} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181313} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x641a on inode 1342181314, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x2a on inode 1342181314, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181314} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181314} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181315 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181316 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181317 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181318 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181319 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181320 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181321 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181322 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181323 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181324 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181325 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181326 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181327 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x5 on inode 1342181328, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 imap claims a free inode 1342181328 is in use, would correct imap and clear inode} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181328} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xa3fc on inode 1342181329, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 mismatch between format (2) and size (56) in directory ino 1342181329} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181329} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0x8381 on inode 1342181330, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x65 on inode 1342181330, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad inode format in inode 1342181330} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 would have cleared inode 1342181330} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad magic number 0xf2b7 on inode 1342181331, would reset magic number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 bad version number 0x15 on inode 1342181331, would reset version number} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 {\rtlch \ltrch\loch\f3\fs20\lang2057\i0\b0 Unexpected inode type 0160000 inode 1342181331} \par \pard\plain \ltrpar\s7\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af3\afs20\lang255\ltrch\dbch\af3\langfe255\hich\f3\fs20\lang2057\loch\f3\fs20\lang2057 \par \pard\plain \ltrpar\s1\cf0{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\rtlch\af5\afs24\lang255\ltrch\dbch\af4\langfe255\hich\f0\fs24\lang2057\loch\f0\fs24\lang2057 \par } --Boundary-00=_N0mDIQ4dDOicR2G Content-Type: text/plain; charset="iso-8859-1"; name="xfs_short_log" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xfs_short_log" bad magic number 0xa3fc on inode 1342181329, resetting magic number mismatch between format (2) and size (56) in directory ino 1342181329 cleared inode 1342181329 bad magic number 0x8381 on inode 1342181330, resetting magic number bad version number 0x65 on inode 1342181330, resetting version number bad inode format in inode 1342181330 cleared inode 1342181330 bad magic number 0xf2b7 on inode 1342181331, resetting magic number bad version number 0x15 on inode 1342181331, resetting version number Unexpected inode type 0160000 inode 1342181331 --Boundary-00=_N0mDIQ4dDOicR2G-- From owner-xfs@oss.sgi.com Tue Apr 22 17:57:52 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 17:58:10 -0700 (PDT) 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 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 m3N0vpAq000462 for ; Tue, 22 Apr 2008 17:57:52 -0700 X-ASG-Debug-ID: 1208912311-204403500000-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 2A3BDA9A746 for ; Tue, 22 Apr 2008 17:58:31 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id XKkZkvpDDaUR3LlL for ; Tue, 22 Apr 2008 17:58:31 -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 9830618003F13 for ; Tue, 22 Apr 2008 19:58:30 -0500 (CDT) Message-ID: <480E89B5.8070006@sandeen.net> Date: Tue, 22 Apr 2008 19:58:29 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: Re: [PATCH] fix dir2 shortform structures on ARM old ABI Subject: Re: [PATCH] fix dir2 shortform structures on ARM old ABI References: <47DB4181.7040603@sandeen.net> In-Reply-To: <47DB4181.7040603@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1208912312 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.1, rules version 3.1.48555 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15548 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Eric Sandeen wrote: > This should fix the longstanding issues with xfs and old ABI > arm boxes, which lead to various asserts and xfs shutdowns, > and for which an (incorrect) patch has been floating around > for years. (Said patch made ARM internally consistent, but > altered the normal xfs on-disk format such that it looked > corrupted on other architectures): > http://lists.arm.linux.org.uk/lurker/message/20040311.002034.5ecf21a2.html ping again... There is still the cache flushing issue, I guess, but I think the on-disk alignment is still worth fixing. Oh, I'm sorry Jeff - I meant "fixing." :) Thanks, -Eric > Old ABI ARM has interesting packing & padding; for example > on ARM old abi: > > struct xfs_dir2_sf_entry { > __uint8_t namelen; /* 0 1 */ > > /* XXX 3 bytes hole, try to pack */ > > xfs_dir2_sf_off_t offset; /* 4 4 */ > __uint8_t name[1]; /* 8 1 */ > > /* XXX 3 bytes hole, try to pack */ > > xfs_dir2_inou_t inumber; /* 12 8 */ > > /* size: 20, cachelines: 1 */ > /* sum members: 14, holes: 2, sum holes: 6 */ > /* last cacheline: 20 bytes */ > }; > > but on x86: > > struct xfs_dir2_sf_entry { > __uint8_t namelen; /* 0 1 */ > xfs_dir2_sf_off_t offset; /* 1 2 */ > __uint8_t name[1]; /* 3 1 */ > xfs_dir2_inou_t inumber; /* 4 8 */ > > /* size: 12, cachelines: 1 */ > /* last cacheline: 12 bytes */ > }; > > ... this sort of discrepancy leads to problems. > > I've verified this patch by comparing the on-disk structure > layouts using pahole from the dwarves package, as well as > running through a bit of xfsqa under qemu-arm, modified so > that the check/repair phase after each test actually executes > check/repair from the x86 host, on the filesystem populated > by the arm emulator. Thus far it all looks good. > > There are 2 other structures with extra padding at the end, > but they don't seem to cause trouble. I suppose they could > be packed as well: xfs_dir2_data_unused_t and xfs_dir2_sf_t. > > Note that userspace needs a similar treatment, and any > filesystems which were running with the previous rogue > "fix" will now see corruption (either in the kernel, or > during xfs_repair) with this fix properly in place; it > may be worth teaching xfs_repair to identify and fix that > specific issue. > > Signed-off-by: Eric Sandeen > > --- > > Index: linux-2.6.24/fs/xfs/linux-2.6/xfs_linux.h > =================================================================== > --- linux-2.6.24.orig/fs/xfs/linux-2.6/xfs_linux.h > +++ linux-2.6.24/fs/xfs/linux-2.6/xfs_linux.h > @@ -300,4 +300,11 @@ static inline __uint64_t howmany_64(__ui > return x; > } > > +/* ARM old ABI has some weird alignment/padding */ > +#if defined(__arm__) && !defined(__ARM_EABI__) > +#define __arch_pack __attribute__((packed)) > +#else > +#define __arch_pack > +#endif > + > #endif /* __XFS_LINUX__ */ > Index: linux-2.6.24/fs/xfs/xfs_dir2_sf.h > =================================================================== > --- linux-2.6.24.orig/fs/xfs/xfs_dir2_sf.h > +++ linux-2.6.24/fs/xfs/xfs_dir2_sf.h > @@ -62,7 +62,7 @@ typedef union { > * Normalized offset (in a data block) of the entry, really xfs_dir2_data_off_t. > * Only need 16 bits, this is the byte offset into the single block form. > */ > -typedef struct { __uint8_t i[2]; } xfs_dir2_sf_off_t; > +typedef struct { __uint8_t i[2]; } __arch_pack xfs_dir2_sf_off_t; > > /* > * The parent directory has a dedicated field, and the self-pointer must > @@ -76,14 +76,14 @@ typedef struct xfs_dir2_sf_hdr { > __uint8_t count; /* count of entries */ > __uint8_t i8count; /* count of 8-byte inode #s */ > xfs_dir2_inou_t parent; /* parent dir inode number */ > -} xfs_dir2_sf_hdr_t; > +} __arch_pack xfs_dir2_sf_hdr_t; > > typedef struct xfs_dir2_sf_entry { > __uint8_t namelen; /* actual name length */ > xfs_dir2_sf_off_t offset; /* saved offset */ > __uint8_t name[1]; /* name, variable size */ > xfs_dir2_inou_t inumber; /* inode number, var. offset */ > -} xfs_dir2_sf_entry_t; > +} __arch_pack xfs_dir2_sf_entry_t; > > typedef struct xfs_dir2_sf { > xfs_dir2_sf_hdr_t hdr; /* shortform header */ > > > From owner-xfs@oss.sgi.com Tue Apr 22 18:37:31 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 18:37:38 -0700 (PDT) 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.0 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 m3N1bReu003068 for ; Tue, 22 Apr 2008 18:37:29 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA09925; Wed, 23 Apr 2008 11:38:04 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3N1c3sT140703370; Wed, 23 Apr 2008 11:38:04 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3N1c2NV142579764; Wed, 23 Apr 2008 11:38:02 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 23 Apr 2008 11:38:02 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [PATCH, XFSQA] Don't run 175-177 if DMAPI is not supported Message-ID: <20080423013802.GJ103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15549 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Don't run tests 175, 176 or 177 if dmapi is not supported by the underlying kernel. Signed-off-by: Dave Chinner --- xfstests/175 | 5 +++++ xfstests/176 | 5 +++++ xfstests/177 | 5 +++++ 3 files changed, 15 insertions(+) Index: xfs-cmds/xfstests/175 =================================================================== --- xfs-cmds.orig/xfstests/175 2007-08-24 14:19:48.000000000 +1000 +++ xfs-cmds/xfstests/175 2008-04-23 11:33:33.727631991 +1000 @@ -29,6 +29,7 @@ _cleanup() # get standard environment, filters and checks . ./common.rc . ./common.filter +. ./common.dmapi . ./common.punch # real QA test starts here @@ -37,6 +38,10 @@ _supported_os Linux _require_scratch +# test that we have DMAPI support +_dmapi_scratch_mount +unmount $SCRATCH_MNT > /dev/null 2>&1 + # _test_punch args: blksize extsize_hint filesize "pp1 pp2 pp3" \ # "ps1 ps2 ps3" "pt1 pt2 pt3" "wp1 wp2" "ws1 ws2" \ # "w p p w p" resvsp Index: xfs-cmds/xfstests/176 =================================================================== --- xfs-cmds.orig/xfstests/176 2007-08-24 14:19:48.000000000 +1000 +++ xfs-cmds/xfstests/176 2008-04-23 11:33:57.780529656 +1000 @@ -27,6 +27,7 @@ _cleanup() # get standard environment, filters and checks . ./common.rc . ./common.filter +. ./common.dmapi . ./common.punch # real QA test starts here @@ -35,6 +36,10 @@ _supported_os Linux _require_scratch +# test that we have DMAPI support +_dmapi_scratch_mount +unmount $SCRATCH_MNT > /dev/null 2>&1 + # _test_punch args: blksize extsize_hint filesize "pp1 pp2 pp3" \ # "ps1 ps2 ps3" "pt1 pt2 pt3" "wp1 wp2" "ws1 ws2" \ # "w p p w p" resvsp Index: xfs-cmds/xfstests/177 =================================================================== --- xfs-cmds.orig/xfstests/177 2007-10-12 13:50:14.000000000 +1000 +++ xfs-cmds/xfstests/177 2008-04-23 11:34:38.991214401 +1000 @@ -27,6 +27,7 @@ _cleanup() # get standard environment, filters and checks . ./common.rc . ./common.filter +. ./common.dmapi # real QA test starts here @@ -39,6 +40,10 @@ _require_scratch _scratch_mkfs_xfs >/dev/null 2>&1 \ || _fail "mkfs failed" +# test that we have DMAPI support +_dmapi_scratch_mount +unmount $SCRATCH_MNT > /dev/null 2>&1 + _scratch_mount \ || _fail "mount failed" From owner-xfs@oss.sgi.com Tue Apr 22 18:56:42 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 18:56:50 -0700 (PDT) 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.0 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 m3N1uc4Z004329 for ; Tue, 22 Apr 2008 18:56:40 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA10318; Wed, 23 Apr 2008 11:57:15 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3N1vEsT142882704; Wed, 23 Apr 2008 11:57:15 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3N1vDxw142913573; Wed, 23 Apr 2008 11:57:13 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 23 Apr 2008 11:57:13 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [PATCH, XFSQA] Use XFS_IO_PROG in 164 and 165 Message-ID: <20080423015713.GL103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15551 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs We should be using $XFS_IO_PROG rather than calling the binary directly and assuming that the path is picking up the right test binary. Signed-off-by: Dave Chinner --- xfstests/164 | 24 ++++++++++++------------ xfstests/165 | 16 ++++++++-------- 2 files changed, 20 insertions(+), 20 deletions(-) Index: xfs-cmds/xfstests/164 =================================================================== --- xfs-cmds.orig/xfstests/164 2007-08-24 14:19:48.000000000 +1000 +++ xfs-cmds/xfstests/164 2008-04-23 11:53:31.821494444 +1000 @@ -64,36 +64,36 @@ _test_eof_hole() { # on a BB boundary rm -f $testfile - xfs_io -f -d \ + $XFS_IO_PROG -f -d \ -c 'pwrite -b 50k 0 50k' \ -c 'truncate 100k' \ -c 'pread -b 200k 0 200k' \ $testfile | _filter_io - xfs_io -c 'bmap -vp' $testfile | _filter_bmap + $XFS_IO_PROG -c 'bmap -vp' $testfile | _filter_bmap echo "" # on an odd byte boundary => 1 short of boundary rm -f $testfile boundary_minus1=`expr 100 \* 1024 - 1` echo "boundary_minus1 = $boundary_minus1" - xfs_io -f -d \ + $XFS_IO_PROG -f -d \ -c 'pwrite -b 50k 0 50k' \ -c "truncate $boundary_minus1" \ -c 'pread -b 200k 0 200k' \ $testfile | _filter_io - xfs_io -c 'bmap -vp' $testfile | _filter_bmap + $XFS_IO_PROG -c 'bmap -vp' $testfile | _filter_bmap echo "" # on an odd byte boundary => 1 over boundary rm -f $testfile boundary_plus1=`expr 100 \* 1024 + 1` echo "boundary_plus1 = $boundary_plus1" - xfs_io -f -d \ + $XFS_IO_PROG -f -d \ -c 'pwrite -b 50k 0 50k' \ -c "truncate $boundary_plus1" \ -c 'pread -b 200k 0 200k' \ $testfile | _filter_io - xfs_io -c 'bmap -vp' $testfile | _filter_bmap + $XFS_IO_PROG -c 'bmap -vp' $testfile | _filter_bmap echo "" } @@ -101,39 +101,39 @@ _test_eof_unwritten_extent() { # on a BB boundary rm -f $testfile - xfs_io -f -d \ + $XFS_IO_PROG -f -d \ -c 'resvsp 0 100k' \ -c 'truncate 100k' \ -c 'pwrite -b 50k 0 50k' \ -c 'pread -b 200k 0 200k' \ $testfile | _filter_io - xfs_io -c 'bmap -vp' $testfile | _filter_bmap + $XFS_IO_PROG -c 'bmap -vp' $testfile | _filter_bmap echo "" # on an odd byte boundary => 1 short of boundary rm -f $testfile boundary_minus1=`expr 100 \* 1024 - 1` echo "boundary_minus1 = $boundary_minus1" - xfs_io -f -d \ + $XFS_IO_PROG -f -d \ -c "resvsp 0 $boundary_minus1" \ -c "truncate $boundary_minus1" \ -c 'pwrite -b 50k 0 50k' \ -c 'pread -b 200k 0 200k' \ $testfile | _filter_io - xfs_io -c 'bmap -vp' $testfile | _filter_bmap + $XFS_IO_PROG -c 'bmap -vp' $testfile | _filter_bmap echo "" # on an odd byte boundary => 1 over boundary rm -f $testfile boundary_plus1=`expr 100 \* 1024 + 1` echo "boundary_plus1 = $boundary_plus1" - xfs_io -f -d \ + $XFS_IO_PROG -f -d \ -c "resvsp 0 $boundary_plus1" \ -c "truncate $boundary_plus1" \ -c 'pwrite -b 50k 0 50k' \ -c 'pread -b 200k 0 200k' \ $testfile | _filter_io - xfs_io -c 'bmap -vp' $testfile | _filter_bmap + $XFS_IO_PROG -c 'bmap -vp' $testfile | _filter_bmap echo "" } Index: xfs-cmds/xfstests/165 =================================================================== --- xfs-cmds.orig/xfstests/165 2007-04-20 20:28:54.000000000 +1000 +++ xfs-cmds/xfstests/165 2008-04-23 11:53:56.350340350 +1000 @@ -68,10 +68,10 @@ len=4 end=`expr 10 \* $len` # Other test... -#xfs_io -f -c "resvsp ${off}k ${end}k" $testfile +#$XFS_IO_PROG -f -c "resvsp ${off}k ${end}k" $testfile # write the initial file -xfs_io -f -c "pwrite 0 ${end}k" $testfile | _filter_io +$XFS_IO_PROG -f -c "pwrite 0 ${end}k" $testfile | _filter_io off=0 @@ -80,7 +80,7 @@ do offset=${off}k length=${len}k - xfs_io -c "unresvsp $offset $length" -c "bmap -vp" $testfile | _filter_bmap + $XFS_IO_PROG -c "unresvsp $offset $length" -c "bmap -vp" $testfile | _filter_bmap off=`expr $off + $len` # skip over 1 off=`expr $off + $len` @@ -97,18 +97,18 @@ do echo "" # prealloc and write - xfs_io -d -c "resvsp $offset $length" -c "pwrite -b $bufsize $offset $length" $testfile | _filter_io + $XFS_IO_PROG -d -c "resvsp $offset $length" -c "pwrite -b $bufsize $offset $length" $testfile | _filter_io # Other tests... - #xfs_io -c "resvsp $offset $length" $testfile + #$XFS_IO_PROG -c "resvsp $offset $length" $testfile #xfs_bmap -v -p $testfile - #xfs_io -d -c "pwrite -b $bufsize $offset $length" $testfile + #$XFS_IO_PROG -d -c "pwrite -b $bufsize $offset $length" $testfile #xfs_bmap -v -p $testfile - xfs_io -r -c "pread -v -b $bufsize $offset $length" $testfile >$tmp.$off & + $XFS_IO_PROG -r -c "pread -v -b $bufsize $offset $length" $testfile >$tmp.$off & # Other tests... - #xfs_io -r -c "pread -v -b $bufsize $offset $length" $testfile + #$XFS_IO_PROG -r -c "pread -v -b $bufsize $offset $length" $testfile #sleep 5 off=`expr $off + $len` # skip over 1 From owner-xfs@oss.sgi.com Tue Apr 22 18:55:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 18:55:26 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_41 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 m3N1t44u004151 for ; Tue, 22 Apr 2008 18:55:06 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA10266; Wed, 23 Apr 2008 11:55:41 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3N1tesT138126624; Wed, 23 Apr 2008 11:55:41 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3N1tdOp142685289; Wed, 23 Apr 2008 11:55:39 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 23 Apr 2008 11:55:39 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [PATCH, XFSQA] Use common language setting Message-ID: <20080423015539.GK103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15550 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Prevent output from being munged by language settings and causing golden output mismatches. Signed-off-by: Dave Chinner --- xfstests/common.config | 4 ++++ 1 file changed, 4 insertions(+) Index: xfs-cmds/xfstests/common.config =================================================================== --- xfs-cmds.orig/xfstests/common.config 2008-03-27 11:49:53.000000000 +1100 +++ xfs-cmds/xfstests/common.config 2008-04-23 11:52:36.980546211 +1000 @@ -32,6 +32,10 @@ # validity or mountedness. # +# all tests should use a common language setting to prevent golden +# output mismatches. +export LANG=C + # Warning: don't put freeware before /usr/bsd on IRIX coz you'll # get the wrong hostname and set your system name to -s :) [ -d /usr/bsd ] && PATH=$PATH:/usr/bsd From owner-xfs@oss.sgi.com Tue Apr 22 20:52:15 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 20:52:39 -0700 (PDT) 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 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 m3N3qCK9015343 for ; Tue, 22 Apr 2008 20:52:14 -0700 X-ASG-Debug-ID: 1208922770-50d5026e0000-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 567DFA9B974 for ; Tue, 22 Apr 2008 20:52:50 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 1L0R1Fp8qO4TkKHy for ; Tue, 22 Apr 2008 20:52:50 -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 C164A18004B68 for ; Tue, 22 Apr 2008 22:52:49 -0500 (CDT) Message-ID: <480EB291.5030205@sandeen.net> Date: Tue, 22 Apr 2008 22:52:49 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: [PATCH] fix non-smp xfs build Subject: [PATCH] fix non-smp xfs build Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1208922774 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.1, rules version 3.1.48567 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15552 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs xfs_reserve_blocks() calls xfs_icsb_sync_counters_locked(), which is not defined if !CONFIG_SMP/!HAVE_PERCPU_SB Signed-off-by: Eric Sandeen --- Index: linux-2.6-xfs/fs/xfs/xfs_mount.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.h +++ linux-2.6-xfs/fs/xfs/xfs_mount.h @@ -217,6 +217,7 @@ extern void xfs_icsb_sync_counters_locke #define xfs_icsb_init_counters(mp) (0) #define xfs_icsb_reinit_counters(mp) do { } while (0) #define xfs_icsb_sync_counters(mp, flags) do { } while (0) +#define xfs_icsb_sync_counters_locked(mp, flags) do { } while (0) #endif typedef struct xfs_ail { From owner-xfs@oss.sgi.com Tue Apr 22 20:56:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 20:56:52 -0700 (PDT) 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_66 autolearn=no 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 m3N3uYbr015824 for ; Tue, 22 Apr 2008 20:56:36 -0700 X-ASG-Debug-ID: 1208923032-4e0d02a10000-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 DB46D15BA1E3 for ; Tue, 22 Apr 2008 20:57:12 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 1tHZOyTmQA68OETM for ; Tue, 22 Apr 2008 20:57:12 -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 7CA3018004B68 for ; Tue, 22 Apr 2008 22:57:12 -0500 (CDT) Message-ID: <480EB397.1040304@sandeen.net> Date: Tue, 22 Apr 2008 22:57:11 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: [PATCH] re-remove xfs custom bitops Subject: [PATCH] re-remove xfs custom bitops Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1208923035 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.1, rules version 3.1.48568 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15553 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Once more, with feeling! This re-instates the reverted mod after the ppc panic of Feb '08. You guys do have ppc boxes in the test farm now right? :) This keeps xfs_lowbit64 as it was since there aren't good generic helpers there ... This should probably keep Dave's signed-off line, there's a bit of my (userspace) testing here but no original work. This exact patch isn't tested but it's based on a conglomeration of prior testing... Thanks, -Eric Index: linux-2.6-xfs/fs/xfs/xfs_bit.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_bit.c +++ linux-2.6-xfs/fs/xfs/xfs_bit.c @@ -25,109 +25,6 @@ * XFS bit manipulation routines, used in non-realtime code. */ -#ifndef HAVE_ARCH_HIGHBIT -/* - * Index of high bit number in byte, -1 for none set, 0..7 otherwise. - */ -static const char xfs_highbit[256] = { - -1, 0, 1, 1, 2, 2, 2, 2, /* 00 .. 07 */ - 3, 3, 3, 3, 3, 3, 3, 3, /* 08 .. 0f */ - 4, 4, 4, 4, 4, 4, 4, 4, /* 10 .. 17 */ - 4, 4, 4, 4, 4, 4, 4, 4, /* 18 .. 1f */ - 5, 5, 5, 5, 5, 5, 5, 5, /* 20 .. 27 */ - 5, 5, 5, 5, 5, 5, 5, 5, /* 28 .. 2f */ - 5, 5, 5, 5, 5, 5, 5, 5, /* 30 .. 37 */ - 5, 5, 5, 5, 5, 5, 5, 5, /* 38 .. 3f */ - 6, 6, 6, 6, 6, 6, 6, 6, /* 40 .. 47 */ - 6, 6, 6, 6, 6, 6, 6, 6, /* 48 .. 4f */ - 6, 6, 6, 6, 6, 6, 6, 6, /* 50 .. 57 */ - 6, 6, 6, 6, 6, 6, 6, 6, /* 58 .. 5f */ - 6, 6, 6, 6, 6, 6, 6, 6, /* 60 .. 67 */ - 6, 6, 6, 6, 6, 6, 6, 6, /* 68 .. 6f */ - 6, 6, 6, 6, 6, 6, 6, 6, /* 70 .. 77 */ - 6, 6, 6, 6, 6, 6, 6, 6, /* 78 .. 7f */ - 7, 7, 7, 7, 7, 7, 7, 7, /* 80 .. 87 */ - 7, 7, 7, 7, 7, 7, 7, 7, /* 88 .. 8f */ - 7, 7, 7, 7, 7, 7, 7, 7, /* 90 .. 97 */ - 7, 7, 7, 7, 7, 7, 7, 7, /* 98 .. 9f */ - 7, 7, 7, 7, 7, 7, 7, 7, /* a0 .. a7 */ - 7, 7, 7, 7, 7, 7, 7, 7, /* a8 .. af */ - 7, 7, 7, 7, 7, 7, 7, 7, /* b0 .. b7 */ - 7, 7, 7, 7, 7, 7, 7, 7, /* b8 .. bf */ - 7, 7, 7, 7, 7, 7, 7, 7, /* c0 .. c7 */ - 7, 7, 7, 7, 7, 7, 7, 7, /* c8 .. cf */ - 7, 7, 7, 7, 7, 7, 7, 7, /* d0 .. d7 */ - 7, 7, 7, 7, 7, 7, 7, 7, /* d8 .. df */ - 7, 7, 7, 7, 7, 7, 7, 7, /* e0 .. e7 */ - 7, 7, 7, 7, 7, 7, 7, 7, /* e8 .. ef */ - 7, 7, 7, 7, 7, 7, 7, 7, /* f0 .. f7 */ - 7, 7, 7, 7, 7, 7, 7, 7, /* f8 .. ff */ -}; -#endif - -/* - * xfs_highbit32: get high bit set out of 32-bit argument, -1 if none set. - */ -inline int -xfs_highbit32( - __uint32_t v) -{ -#ifdef HAVE_ARCH_HIGHBIT - return highbit32(v); -#else - int i; - - if (v & 0xffff0000) - if (v & 0xff000000) - i = 24; - else - i = 16; - else if (v & 0x0000ffff) - if (v & 0x0000ff00) - i = 8; - else - i = 0; - else - return -1; - return i + xfs_highbit[(v >> i) & 0xff]; -#endif -} - -/* - * xfs_lowbit64: get low bit set out of 64-bit argument, -1 if none set. - */ -int -xfs_lowbit64( - __uint64_t v) -{ - __uint32_t w = (__uint32_t)v; - int n = 0; - - if (w) { /* lower bits */ - n = ffs(w); - } else { /* upper bits */ - w = (__uint32_t)(v >> 32); - if (w && (n = ffs(w))) - n += 32; - } - return n - 1; -} - -/* - * xfs_highbit64: get high bit set out of 64-bit argument, -1 if none set. - */ -int -xfs_highbit64( - __uint64_t v) -{ - __uint32_t h = (__uint32_t)(v >> 32); - - if (h) - return xfs_highbit32(h) + 32; - return xfs_highbit32((__uint32_t)v); -} - - /* * Return whether bitmap is empty. * Size is number of words in the bitmap, which is padded to word boundary Index: linux-2.6-xfs/fs/xfs/xfs_bit.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_bit.h +++ linux-2.6-xfs/fs/xfs/xfs_bit.h @@ -47,13 +47,39 @@ static inline __uint64_t xfs_mask64lo(in } /* Get high bit set out of 32-bit argument, -1 if none set */ -extern int xfs_highbit32(__uint32_t v); - -/* Get low bit set out of 64-bit argument, -1 if none set */ -extern int xfs_lowbit64(__uint64_t v); +static inline int xfs_highbit32(__uint32_t v) +{ + return fls(v) - 1; +} /* Get high bit set out of 64-bit argument, -1 if none set */ -extern int xfs_highbit64(__uint64_t); +static inline int xfs_highbit64(__uint64_t v) +{ + return fls64(v) - 1; +} + +/* Get low bit set out of 32-bit argument, -1 if none set */ +static inline int xfs_lowbit32(__uint32_t v) +{ + unsigned long t = v; + return (v) ? find_first_bit(&t, 32) : -1; +} + +/* Get low bit set out of 64-bit argument, -1 if none set */ +static inline int xfs_lowbit64(__uint64_t v) +{ + __uint32_t w = (__uint32_t)v; + int n = 0; + + if (w) { /* lower bits */ + n = ffs(w); + } else { /* upper bits */ + w = (__uint32_t)(v >> 32); + if (w && (n = ffs(w))) + n += 32; + } + return n - 1; +} /* Return whether bitmap is empty (1 == empty) */ extern int xfs_bitmap_empty(uint *map, uint size); Index: linux-2.6-xfs/fs/xfs/xfs_rtalloc.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_rtalloc.c +++ linux-2.6-xfs/fs/xfs/xfs_rtalloc.c @@ -74,18 +74,6 @@ STATIC int xfs_rtmodify_summary(xfs_moun */ /* - * xfs_lowbit32: get low bit set out of 32-bit argument, -1 if none set. - */ -STATIC int -xfs_lowbit32( - __uint32_t v) -{ - if (v) - return ffs(v) - 1; - return -1; -} - -/* * Allocate space to the bitmap or summary file, and zero it, for growfs. */ STATIC int /* error */ @@ -450,6 +438,7 @@ xfs_rtallocate_extent_near( } bbno = XFS_BITTOBLOCK(mp, bno); i = 0; + ASSERT(minlen != 0); log2len = xfs_highbit32(minlen); /* * Loop over all bitmap blocks (bbno + i is current block). @@ -618,6 +607,8 @@ xfs_rtallocate_extent_size( xfs_suminfo_t sum; /* summary information for extents */ ASSERT(minlen % prod == 0 && maxlen % prod == 0); + ASSERT(maxlen != 0); + /* * Loop over all the levels starting with maxlen. * At each level, look at all the bitmap blocks, to see if there @@ -675,6 +666,9 @@ xfs_rtallocate_extent_size( *rtblock = NULLRTBLOCK; return 0; } + ASSERT(minlen != 0); + ASSERT(maxlen != 0); + /* * Loop over sizes, from maxlen down to minlen. * This time, when we do the allocations, allow smaller ones @@ -1961,6 +1955,7 @@ xfs_growfs_rt( nsbp->sb_blocksize * nsbp->sb_rextsize); nsbp->sb_rextents = nsbp->sb_rblocks; do_div(nsbp->sb_rextents, nsbp->sb_rextsize); + ASSERT(nsbp->sb_rextents != 0); nsbp->sb_rextslog = xfs_highbit32(nsbp->sb_rextents); nrsumlevels = nmp->m_rsumlevels = nsbp->sb_rextslog + 1; nrsumsize = From owner-xfs@oss.sgi.com Tue Apr 22 21:05:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 21:05:57 -0700 (PDT) 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 m3N45XA8017282 for ; Tue, 22 Apr 2008 21:05:35 -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 OAA12440; Wed, 23 Apr 2008 14:06:11 +1000 Message-ID: <480EB5CE.90001@sgi.com> Date: Wed, 23 Apr 2008 14:06:38 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [PATCH] Fix check for block zero access in xfs_write_iomap_allocate References: <20080422110210.GZ103491721@sgi.com> In-Reply-To: <20080422110210.GZ103491721@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15554 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Looks good. David Chinner wrote: > Fix check for block zero access in xfs_write_iomap_allocate > > The check for block zero access should be done on non-realtime > inodes. Fix the logic error in xfs_write_iomap_allocate(), and > simplify the logic on all checks for block zero access. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_iomap.c | 13 +++++-------- > 1 file changed, 5 insertions(+), 8 deletions(-) > > Index: 2.6.x-xfs-new/fs/xfs/xfs_iomap.c > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_iomap.c 2008-04-22 11:54:54.000000000 +1000 > +++ 2.6.x-xfs-new/fs/xfs/xfs_iomap.c 2008-04-22 20:45:53.469961429 +1000 > @@ -523,8 +523,7 @@ xfs_iomap_write_direct( > goto error_out; > } > > - if (unlikely(!imap.br_startblock && > - !(XFS_IS_REALTIME_INODE(ip)))) { > + if (!(imap.br_startblock || XFS_IS_REALTIME_INODE(ip))) { > error = xfs_cmn_err_fsblock_zero(ip, &imap); > goto error_out; > } > @@ -686,8 +685,7 @@ retry: > goto retry; > } > > - if (unlikely(!imap[0].br_startblock && > - !(XFS_IS_REALTIME_INODE(ip)))) > + if (!(imap[0].br_startblock || XFS_IS_REALTIME_INODE(ip))) > return xfs_cmn_err_fsblock_zero(ip, &imap[0]); > > *ret_imap = imap[0]; > @@ -838,9 +836,9 @@ xfs_iomap_write_allocate( > * See if we were able to allocate an extent that > * covers at least part of the callers request > */ > - if (unlikely(!imap.br_startblock && > - XFS_IS_REALTIME_INODE(ip))) > + if (!(imap.br_startblock || XFS_IS_REALTIME_INODE(ip))) > return xfs_cmn_err_fsblock_zero(ip, &imap); > + > if ((offset_fsb >= imap.br_startoff) && > (offset_fsb < (imap.br_startoff + > imap.br_blockcount))) { > @@ -934,8 +932,7 @@ xfs_iomap_write_unwritten( > if (error) > return XFS_ERROR(error); > > - if (unlikely(!imap.br_startblock && > - !(XFS_IS_REALTIME_INODE(ip)))) > + if (!(imap.br_startblock || XFS_IS_REALTIME_INODE(ip))) > return xfs_cmn_err_fsblock_zero(ip, &imap); > > if ((numblks_fsb = imap.br_blockcount) == 0) { > > > From owner-xfs@oss.sgi.com Tue Apr 22 21:18:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 21:18:27 -0700 (PDT) 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 m3N4I3pk018552 for ; Tue, 22 Apr 2008 21:18:04 -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 OAA12662; Wed, 23 Apr 2008 14:18:41 +1000 Message-ID: <480EB8BC.9010205@sgi.com> Date: Wed, 23 Apr 2008 14:19:08 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [PATCH] Don't double count reserved block changes on UP. References: <20080422110052.GY103491721@sgi.com> In-Reply-To: <20080422110052.GY103491721@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15555 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Makes sense. Looks good to me. David Chinner wrote: > Don't double count reserved block changes on UP. > > On uniprocessor machines, the incore superblock is used for > all in memory accounting of free blocks. in this situation, > changes to the reserved block count are accounted twice; > once directly and once via xfs_mod_incore_sb(). Seeing as > the modification on SMP is done via xfs_mod_incore_sb(), > make this the only update mechanism that UP uses as well. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_fsops.c | 4 ---- > 1 files changed, 0 insertions(+), 4 deletions(-) > > diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c > index d3a0f53..c4f7c93 100644 > --- a/fs/xfs/xfs_fsops.c > +++ b/fs/xfs/xfs_fsops.c > @@ -552,11 +552,8 @@ retry: > mp->m_resblks += free; > mp->m_resblks_avail += free; > fdblks_delta = -free; > - mp->m_sb.sb_fdblocks = XFS_ALLOC_SET_ASIDE(mp); > } else { > fdblks_delta = -delta; > - mp->m_sb.sb_fdblocks = > - lcounter + XFS_ALLOC_SET_ASIDE(mp); > mp->m_resblks = request; > mp->m_resblks_avail += delta; > } > @@ -587,7 +584,6 @@ out: > if (error == ENOSPC) > goto retry; > } > - > return 0; > } > > From owner-xfs@oss.sgi.com Tue Apr 22 21:41:05 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 21:41:12 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_41 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 m3N4f1g9020158 for ; Tue, 22 Apr 2008 21:41:03 -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 OAA12976; Wed, 23 Apr 2008 14:41:39 +1000 To: "David Chinner" , xfs-dev Subject: Re: [PATCH, XFSQA] Use common language setting From: "Barry Naujok" Organization: SGI Cc: xfs-oss Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080423015539.GK103491721@sgi.com> Date: Wed, 23 Apr 2008 14:42:29 +1000 Message-ID: In-Reply-To: <20080423015539.GK103491721@sgi.com> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m3N4f5g9020161 X-archive-position: 15556 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Wed, 23 Apr 2008 11:55:39 +1000, David Chinner wrote: > Prevent output from being munged by language settings and > causing golden output mismatches. > > Signed-off-by: Dave Chinner > --- > xfstests/common.config | 4 ++++ > 1 file changed, 4 insertions(+) > > Index: xfs-cmds/xfstests/common.config > =================================================================== > --- xfs-cmds.orig/xfstests/common.config 2008-03-27 11:49:53.000000000 > +1100 > +++ xfs-cmds/xfstests/common.config 2008-04-23 11:52:36.980546211 +1000 > @@ -32,6 +32,10 @@ > # validity or mountedness. > # > +# all tests should use a common language setting to prevent golden > +# output mismatches. > +export LANG=C > + > # Warning: don't put freeware before /usr/bsd on IRIX coz you'll > # get the wrong hostname and set your system name to -s :) > [ -d /usr/bsd ] && PATH=$PATH:/usr/bsd Looks fine. From owner-xfs@oss.sgi.com Tue Apr 22 21:43:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 21:43:21 -0700 (PDT) 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 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 m3N4h0RD020431 for ; Tue, 22 Apr 2008 21:43:02 -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 OAA13014; Wed, 23 Apr 2008 14:43:38 +1000 To: "David Chinner" , xfs-dev Subject: Re: [PATCH, XFSQA] Use XFS_IO_PROG in 164 and 165 From: "Barry Naujok" Organization: SGI Cc: xfs-oss Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080423015713.GL103491721@sgi.com> Date: Wed, 23 Apr 2008 14:44:29 +1000 Message-ID: In-Reply-To: <20080423015713.GL103491721@sgi.com> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m3N4h4RD020441 X-archive-position: 15557 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Wed, 23 Apr 2008 11:57:13 +1000, David Chinner wrote: > We should be using $XFS_IO_PROG rather than calling the binary > directly and assuming that the path is picking up the right test binary. Yep, OK. I'm sure there's plenty of other ones with other xfsprogs too. > Signed-off-by: Dave Chinner > --- > xfstests/164 | 24 ++++++++++++------------ > xfstests/165 | 16 ++++++++-------- > 2 files changed, 20 insertions(+), 20 deletions(-) > > Index: xfs-cmds/xfstests/164 > =================================================================== > --- xfs-cmds.orig/xfstests/164 2007-08-24 14:19:48.000000000 +1000 > +++ xfs-cmds/xfstests/164 2008-04-23 11:53:31.821494444 +1000 > @@ -64,36 +64,36 @@ _test_eof_hole() > { > # on a BB boundary > rm -f $testfile > - xfs_io -f -d \ > + $XFS_IO_PROG -f -d \ > -c 'pwrite -b 50k 0 50k' \ > -c 'truncate 100k' \ > -c 'pread -b 200k 0 200k' \ > $testfile | _filter_io > - xfs_io -c 'bmap -vp' $testfile | _filter_bmap > + $XFS_IO_PROG -c 'bmap -vp' $testfile | _filter_bmap > echo "" > # on an odd byte boundary => 1 short of boundary > rm -f $testfile > boundary_minus1=`expr 100 \* 1024 - 1` > echo "boundary_minus1 = $boundary_minus1" > - xfs_io -f -d \ > + $XFS_IO_PROG -f -d \ > -c 'pwrite -b 50k 0 50k' \ > -c "truncate $boundary_minus1" \ > -c 'pread -b 200k 0 200k' \ > $testfile | _filter_io > - xfs_io -c 'bmap -vp' $testfile | _filter_bmap > + $XFS_IO_PROG -c 'bmap -vp' $testfile | _filter_bmap > echo "" > # on an odd byte boundary => 1 over boundary > rm -f $testfile > boundary_plus1=`expr 100 \* 1024 + 1` > echo "boundary_plus1 = $boundary_plus1" > - xfs_io -f -d \ > + $XFS_IO_PROG -f -d \ > -c 'pwrite -b 50k 0 50k' \ > -c "truncate $boundary_plus1" \ > -c 'pread -b 200k 0 200k' \ > $testfile | _filter_io > - xfs_io -c 'bmap -vp' $testfile | _filter_bmap > + $XFS_IO_PROG -c 'bmap -vp' $testfile | _filter_bmap > echo "" > } > @@ -101,39 +101,39 @@ _test_eof_unwritten_extent() > { > # on a BB boundary > rm -f $testfile > - xfs_io -f -d \ > + $XFS_IO_PROG -f -d \ > -c 'resvsp 0 100k' \ > -c 'truncate 100k' \ > -c 'pwrite -b 50k 0 50k' \ > -c 'pread -b 200k 0 200k' \ > $testfile | _filter_io > - xfs_io -c 'bmap -vp' $testfile | _filter_bmap > + $XFS_IO_PROG -c 'bmap -vp' $testfile | _filter_bmap > echo "" > # on an odd byte boundary => 1 short of boundary > rm -f $testfile > boundary_minus1=`expr 100 \* 1024 - 1` > echo "boundary_minus1 = $boundary_minus1" > - xfs_io -f -d \ > + $XFS_IO_PROG -f -d \ > -c "resvsp 0 $boundary_minus1" \ > -c "truncate $boundary_minus1" \ > -c 'pwrite -b 50k 0 50k' \ > -c 'pread -b 200k 0 200k' \ > $testfile | _filter_io > - xfs_io -c 'bmap -vp' $testfile | _filter_bmap > + $XFS_IO_PROG -c 'bmap -vp' $testfile | _filter_bmap > echo "" > # on an odd byte boundary => 1 over boundary > rm -f $testfile > boundary_plus1=`expr 100 \* 1024 + 1` > echo "boundary_plus1 = $boundary_plus1" > - xfs_io -f -d \ > + $XFS_IO_PROG -f -d \ > -c "resvsp 0 $boundary_plus1" \ > -c "truncate $boundary_plus1" \ > -c 'pwrite -b 50k 0 50k' \ > -c 'pread -b 200k 0 200k' \ > $testfile | _filter_io > - xfs_io -c 'bmap -vp' $testfile | _filter_bmap > + $XFS_IO_PROG -c 'bmap -vp' $testfile | _filter_bmap > echo "" > } > Index: xfs-cmds/xfstests/165 > =================================================================== > --- xfs-cmds.orig/xfstests/165 2007-04-20 20:28:54.000000000 +1000 > +++ xfs-cmds/xfstests/165 2008-04-23 11:53:56.350340350 +1000 > @@ -68,10 +68,10 @@ len=4 > end=`expr 10 \* $len` > # Other test... > -#xfs_io -f -c "resvsp ${off}k ${end}k" $testfile > +#$XFS_IO_PROG -f -c "resvsp ${off}k ${end}k" $testfile > # write the initial file > -xfs_io -f -c "pwrite 0 ${end}k" $testfile | _filter_io > +$XFS_IO_PROG -f -c "pwrite 0 ${end}k" $testfile | _filter_io > off=0 > @@ -80,7 +80,7 @@ do > offset=${off}k > length=${len}k > - xfs_io -c "unresvsp $offset $length" -c "bmap -vp" $testfile | > _filter_bmap > + $XFS_IO_PROG -c "unresvsp $offset $length" -c "bmap -vp" $testfile | > _filter_bmap > off=`expr $off + $len` # skip over 1 > off=`expr $off + $len` > @@ -97,18 +97,18 @@ do > echo "" > # prealloc and write > - xfs_io -d -c "resvsp $offset $length" -c "pwrite -b $bufsize $offset > $length" $testfile | _filter_io > + $XFS_IO_PROG -d -c "resvsp $offset $length" -c "pwrite -b $bufsize > $offset $length" $testfile | _filter_io > # Other tests... > - #xfs_io -c "resvsp $offset $length" $testfile > + #$XFS_IO_PROG -c "resvsp $offset $length" $testfile > #xfs_bmap -v -p $testfile > - #xfs_io -d -c "pwrite -b $bufsize $offset $length" $testfile > + #$XFS_IO_PROG -d -c "pwrite -b $bufsize $offset $length" $testfile > #xfs_bmap -v -p $testfile > - xfs_io -r -c "pread -v -b $bufsize $offset $length" $testfile > >$tmp.$off & > + $XFS_IO_PROG -r -c "pread -v -b $bufsize $offset $length" $testfile > >$tmp.$off & > # Other tests... > - #xfs_io -r -c "pread -v -b $bufsize $offset $length" $testfile > + #$XFS_IO_PROG -r -c "pread -v -b $bufsize $offset $length" $testfile > #sleep 5 > off=`expr $off + $len` # skip over 1 From owner-xfs@oss.sgi.com Tue Apr 22 22:29:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 22:29:16 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42, J_CHICKENPOX_44 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 m3N5Sqqq023572 for ; Tue, 22 Apr 2008 22:28:57 -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 PAA13925; Wed, 23 Apr 2008 15:29:34 +1000 Message-ID: <480EC93D.9090103@sgi.com> Date: Wed, 23 Apr 2008 15:29:33 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: xfs-oss , xfs-dev Subject: REVIEW: 980021 - fix up noattr2 mount option Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15558 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Hi there, Mounting noattr2 in xfs fails to achieve anything AFAICT - and it certainly doesn't do anything useful. The twisty mounting path goes something like this: ============================ xfs_fs_get_sb -> xfs_fs_fill_super -> xfs_parseargs - sets args->flags: MNTOPT_ATTR2, MNTOPT_NOATTR2 -> xfs_mount(...args...) xfs_mount -> xfs_start_flags - XFSMNT_ATTR2 -> XFS_MOUNT_ATTR2, XFSMNT_NOATTR2 -> XFS_MOUNT_NOATTR2 -> xfs_readsb -> xfs_finish_flags - checks sb for attr2 and if not noattr2, then sets XFS_MOUNT_ATTR2 ... -> xfs_mountfs - does the features2 correction which can set the sb with attr2 if not noattr2 mnt, for noattr2 and sb with attr2, it removes the attr2 from the sb and updates it ============================ I tried with just using XFS_MNTOPT_NOATTR2 and not XFS_MOUNT_NOATTR2 but then seemed to need it in the features2 correction code where I could no longer tell that not having XFS_MOUNT_ATTR2 meant that noattr2 had been used - I needed to know explicitly. The qa test checks that noattr2 works and does so when attr2 is the last features2 bit or there is more left (i.e. lazy sb) i.e. I want to know if we are still using features2/morebits or not. xfstests patch: b/xfstests/187 | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++ b/xfstests/187.out | 39 +++++++++++++++++ b/xfstests/group | 1 3 files changed, 161 insertions(+) kernel patch: 2.6.x-xfs-quilt/fs/xfs/linux-2.6/xfs_super.c | 1 + 2.6.x-xfs-quilt/fs/xfs/xfs_clnt.h | 1 + 2.6.x-xfs-quilt/fs/xfs/xfs_mount.c | 12 +++++++++++- 2.6.x-xfs-quilt/fs/xfs/xfs_mount.h | 1 + 2.6.x-xfs-quilt/fs/xfs/xfs_sb.h | 7 +++++++ 2.6.x-xfs-quilt/fs/xfs/xfs_vfsops.c | 9 ++++++++- 6 files changed, 29 insertions(+), 2 deletions(-) --Tim =========================================================================== Index: xfstests/187 =========================================================================== --- a/xfstests/187 2006-06-17 00:58:24.000000000 +1000 +++ b/xfstests/187 2008-04-23 16:20:01.271902400 +1000 @@ -0,0 +1,121 @@ +#! /bin/sh +# FS QA Test No. 187 +# +# To test out the noattr2 flag which is broken in pv#980021 +# Given an existing attr2 filesystem, we should be able to mount +# as noattr2 and go back to an attr1 filesystem. +# +# Test the case where there are no more features2 bits on and +# so the morebitsbit should be off. +# +#----------------------------------------------------------------------- +# Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. +#----------------------------------------------------------------------- +# +# creator +owner=tes@emu.melbourne.sgi.com + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +_filter_version() +{ + tee -a $seq.full | tr ',' '\n' | egrep 'ATTR|MORE|LAZY' +} + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here +_require_scratch +_supported_fs xfs +_supported_os Linux +rm -f $seq.full + +# lazysb and attr2 are in features2 and will require morebitsbit on +# So test with lazysb and without it to see if the morebitsbit is +# okay etc.... +# Reset the options so that we can control what is going on here +export MKFS_OPTIONS="" +export MOUNT_OPTIONS="" + +# Make sure that when we think we are testing with morebits off +# that we really are. +# Trying to future-proof in case mkfs defaults change. +_scratch_mkfs -i attr=1 >/dev/null 2>&1 +$XFS_DB_PROG -c version $SCRATCH_DEV 2>&1 >$tmp.db +if grep -i morebits $tmp.db +then + echo "" + echo "Need to update test $seq so that initial subtests do not use features2" + echo "" + exit +fi + +echo "" +echo "*** 1. test attr2 mkfs and then noattr2 mount ***" +echo "" +echo "attr2 fs" +echo "" +_scratch_mkfs -i attr=2 -l lazy-count=0 >/dev/null 2>&1 +$XFS_DB_PROG -c version $SCRATCH_DEV 2>&1 | _filter_version +echo "" +echo "noattr2 fs" +echo "" +_scratch_mount -o noattr2 +$UMOUNT_PROG $SCRATCH_MNT +$XFS_DB_PROG -c version $SCRATCH_DEV 2>&1 | _filter_version + +# adding an EA will ensure the ATTR1 flag is turned on +echo "" +echo "*** 2. test attr2 mkfs and then noattr2 mount with 1 EA ***" +echo "" +echo "attr2 fs" +echo "" +_scratch_mkfs -i attr=2 -l lazy-count=0 >/dev/null 2>&1 +$XFS_DB_PROG -c version $SCRATCH_DEV 2>&1 | _filter_version +echo "" +echo "noattr2 fs" +echo "" +_scratch_mount -o noattr2 +cd $SCRATCH_MNT +touch testfile +setfattr -n user.test -v 0xbabe testfile +getfattr testfile +cd $here +$UMOUNT_PROG $SCRATCH_MNT +$XFS_DB_PROG -c version $SCRATCH_DEV 2>&1 | _filter_version + +echo "" +echo "*** 3. test noattr2 mount and lazy sb ***" +echo "" +echo "" +echo "attr2 fs" +echo "" +_scratch_mkfs -i attr=2 -l lazy-count=1 >/dev/null 2>&1 +$XFS_DB_PROG -c version $SCRATCH_DEV 2>&1 | _filter_version +echo "" +echo "noattr2 fs" +echo "" +_scratch_mount -o noattr2 +cd $SCRATCH_MNT +touch testfile +cd $here +$UMOUNT_PROG $SCRATCH_MNT +$XFS_DB_PROG -c version $SCRATCH_DEV 2>&1 | _filter_version + +# success, all done +status=0 +exit =========================================================================== Index: xfstests/187.out =========================================================================== --- a/xfstests/187.out 2006-06-17 00:58:24.000000000 +1000 +++ b/xfstests/187.out 2008-04-23 16:20:43.087902450 +1000 @@ -0,0 +1,39 @@ +QA output created by 187 + +*** 1. test attr2 mkfs and then noattr2 mount *** + +attr2 fs + +MOREBITS +ATTR2 + +noattr2 fs + + +*** 2. test attr2 mkfs and then noattr2 mount with 1 EA *** + +attr2 fs + +MOREBITS +ATTR2 + +noattr2 fs + +# file: testfile +user.test + +ATTR + +*** 3. test noattr2 mount and lazy sb *** + + +attr2 fs + +MOREBITS +ATTR2 +LAZYSBCOUNT + +noattr2 fs + +MOREBITS +LAZYSBCOUNT =========================================================================== Index: xfstests/group =========================================================================== --- a/xfstests/group 2008-04-23 14:43:04.000000000 +1000 +++ b/xfstests/group 2008-04-22 16:35:47.844386650 +1000 @@ -274,3 +274,4 @@ filestreams dgc@sgi.com 184 metadata auto 185 dmapi auto 186 attr auto +187 attr auto Index: 2.6.x-xfs-quilt/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- 2.6.x-xfs-quilt.orig/fs/xfs/linux-2.6/xfs_super.c 2008-04-22 17:05:28.234900761 +1000 +++ 2.6.x-xfs-quilt/fs/xfs/linux-2.6/xfs_super.c 2008-04-22 17:05:39.477451936 +1000 @@ -314,6 +314,7 @@ xfs_parseargs( args->flags |= XFSMNT_ATTR2; } else if (!strcmp(this_char, MNTOPT_NOATTR2)) { args->flags &= ~XFSMNT_ATTR2; + args->flags |= XFSMNT_NOATTR2; } else if (!strcmp(this_char, MNTOPT_FILESTREAM)) { args->flags2 |= XFSMNT2_FILESTREAMS; } else if (!strcmp(this_char, MNTOPT_NOQUOTA)) { Index: 2.6.x-xfs-quilt/fs/xfs/xfs_clnt.h =================================================================== --- 2.6.x-xfs-quilt.orig/fs/xfs/xfs_clnt.h 2008-04-22 17:05:28.234900761 +1000 +++ 2.6.x-xfs-quilt/fs/xfs/xfs_clnt.h 2008-04-22 17:05:39.477451936 +1000 @@ -78,6 +78,7 @@ struct xfs_mount_args { #define XFSMNT_IOSIZE 0x00002000 /* optimize for I/O size */ #define XFSMNT_OSYNCISOSYNC 0x00004000 /* o_sync is REALLY o_sync */ /* (osyncisdsync is default) */ +#define XFSMNT_NOATTR2 0x00008000 /* turn off ATTR2 EA format */ #define XFSMNT_32BITINODES 0x00200000 /* restrict inodes to 32 * bits of address space */ #define XFSMNT_GQUOTA 0x00400000 /* group quota accounting */ Index: 2.6.x-xfs-quilt/fs/xfs/xfs_sb.h =================================================================== --- 2.6.x-xfs-quilt.orig/fs/xfs/xfs_sb.h 2008-04-22 17:05:28.238900245 +1000 +++ 2.6.x-xfs-quilt/fs/xfs/xfs_sb.h 2008-04-22 17:05:39.477451936 +1000 @@ -473,6 +473,13 @@ static inline void xfs_sb_version_addatt ((sbp)->sb_features2 | XFS_SB_VERSION2_ATTR2BIT))); } +static inline void xfs_sb_version_removeattr2(xfs_sb_t *sbp) +{ + sbp->sb_features2 &= ~XFS_SB_VERSION2_ATTR2BIT; + if (!sbp->sb_features2) + sbp->sb_versionnum &= ~XFS_SB_VERSION_MOREBITSBIT; +} + /* * end of superblock version macros */ Index: 2.6.x-xfs-quilt/fs/xfs/xfs_vfsops.c =================================================================== --- 2.6.x-xfs-quilt.orig/fs/xfs/xfs_vfsops.c 2008-04-22 17:05:28.238900245 +1000 +++ 2.6.x-xfs-quilt/fs/xfs/xfs_vfsops.c 2008-04-23 14:05:14.046729504 +1000 @@ -283,6 +283,8 @@ xfs_start_flags( mp->m_flags |= XFS_MOUNT_DIRSYNC; if (ap->flags & XFSMNT_ATTR2) mp->m_flags |= XFS_MOUNT_ATTR2; + if (ap->flags & XFSMNT_NOATTR2) + mp->m_flags |= XFS_MOUNT_NOATTR2; if (ap->flags2 & XFSMNT2_COMPAT_IOSIZE) mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE; @@ -345,7 +347,12 @@ xfs_finish_flags( } } - if (xfs_sb_version_hasattr2(&mp->m_sb)) + /* + * mkfs'ed attr2 will turn on attr2 mount unless explicitly + * told by noattr2 to turn it off + */ + if (xfs_sb_version_hasattr2(&mp->m_sb) && + !(ap->flags & XFSMNT_NOATTR2)) mp->m_flags |= XFS_MOUNT_ATTR2; /* Index: 2.6.x-xfs-quilt/fs/xfs/xfs_mount.c =================================================================== --- 2.6.x-xfs-quilt.orig/fs/xfs/xfs_mount.c 2008-04-22 17:05:18.000000000 +1000 +++ 2.6.x-xfs-quilt/fs/xfs/xfs_mount.c 2008-04-23 13:57:00.398272074 +1000 @@ -994,9 +994,19 @@ xfs_mountfs( * Re-check for ATTR2 in case it was found in bad_features2 * slot. */ - if (xfs_sb_version_hasattr2(&mp->m_sb)) + if (xfs_sb_version_hasattr2(&mp->m_sb) && + !(mp->m_flags & XFS_MOUNT_NOATTR2)) mp->m_flags |= XFS_MOUNT_ATTR2; + } + if (xfs_sb_version_hasattr2(&mp->m_sb) && + (mp->m_flags & XFS_MOUNT_NOATTR2)) { + xfs_sb_version_removeattr2(&mp->m_sb); + update_flags |= XFS_SB_FEATURES2; + + /* update sb_versionnum for the clearing of the morebits */ + if (!sbp->sb_features2) + update_flags |= XFS_SB_VERSIONNUM; } /* Index: 2.6.x-xfs-quilt/fs/xfs/xfs_mount.h =================================================================== --- 2.6.x-xfs-quilt.orig/fs/xfs/xfs_mount.h 2008-04-23 11:12:45.000000000 +1000 +++ 2.6.x-xfs-quilt/fs/xfs/xfs_mount.h 2008-04-23 13:58:13.480864956 +1000 @@ -377,6 +377,7 @@ typedef struct xfs_mount { counters */ #define XFS_MOUNT_FILESTREAMS (1ULL << 24) /* enable the filestreams allocator */ +#define XFS_MOUNT_NOATTR2 (1ULL << 25) /* disable use of attr2 format */ /* From owner-xfs@oss.sgi.com Tue Apr 22 23:20:28 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 23:20:46 -0700 (PDT) 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.0 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 m3N6KO32026652 for ; Tue, 22 Apr 2008 23:20: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 QAA14839 for ; Wed, 23 Apr 2008 16:21:04 +1000 Date: Wed, 23 Apr 2008 16:22:18 +1000 To: "xfs@oss.sgi.com" Subject: xfsprogs 2.9.8 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.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15559 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs ftp://oss.sgi.com/projects/xfs/cmd_tars/xfsprogs_2.9.8-1.tar.gz Changes since 2.9.7: - Add support for sb_features2 in wrong location in mkfs.xfs, xfs_repair and xfs_db. - Improve memory limits for libxfs cache in xfs_repair and added a -m option to manually limit usage of xfs_repair. - Add -c option to xfs_admin to turn lazy-counters on/off. - Added support for mdp in libdisk/mkfs.xfs, thanks to Hubert Verstraete. - Add -p option to fsck.xfs, thanks to Markus Rothe. - Cleanup sys v3 bzero/bcopy calls, thanks to Nigel Kukard. From owner-xfs@oss.sgi.com Tue Apr 22 23:57:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 22 Apr 2008 23:57:46 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_65 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 m3N6vY3U028763 for ; Tue, 22 Apr 2008 23:57:36 -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 QAA15526; Wed, 23 Apr 2008 16:58:12 +1000 Message-ID: <480EDE04.5080003@sgi.com> Date: Wed, 23 Apr 2008 16:58:12 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [PATCH, XFSQA] Don't run 175-177 if DMAPI is not supported References: <20080423013802.GJ103491721@sgi.com> In-Reply-To: <20080423013802.GJ103491721@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15560 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Hi, _test_punch already does a umount $SCRATCH_MNT. However, IMHO, it would probably be nicer if one could use a _require_dmapi or really it may be simpler if we could roll it into common.dmapi so one just needs to include common.dmapi and it would complain at that point if the kernel didn't support it. --Tim David Chinner wrote: > Don't run tests 175, 176 or 177 if dmapi is not supported by the > underlying kernel. > > Signed-off-by: Dave Chinner > --- > xfstests/175 | 5 +++++ > xfstests/176 | 5 +++++ > xfstests/177 | 5 +++++ > 3 files changed, 15 insertions(+) > > Index: xfs-cmds/xfstests/175 > =================================================================== > --- xfs-cmds.orig/xfstests/175 2007-08-24 14:19:48.000000000 +1000 > +++ xfs-cmds/xfstests/175 2008-04-23 11:33:33.727631991 +1000 > @@ -29,6 +29,7 @@ _cleanup() > # get standard environment, filters and checks > . ./common.rc > . ./common.filter > +. ./common.dmapi > . ./common.punch > > # real QA test starts here > @@ -37,6 +38,10 @@ _supported_os Linux > > _require_scratch > > +# test that we have DMAPI support > +_dmapi_scratch_mount > +unmount $SCRATCH_MNT > /dev/null 2>&1 > + > # _test_punch args: blksize extsize_hint filesize "pp1 pp2 pp3" \ > # "ps1 ps2 ps3" "pt1 pt2 pt3" "wp1 wp2" "ws1 ws2" \ > # "w p p w p" resvsp > Index: xfs-cmds/xfstests/176 > =================================================================== > --- xfs-cmds.orig/xfstests/176 2007-08-24 14:19:48.000000000 +1000 > +++ xfs-cmds/xfstests/176 2008-04-23 11:33:57.780529656 +1000 > @@ -27,6 +27,7 @@ _cleanup() > # get standard environment, filters and checks > . ./common.rc > . ./common.filter > +. ./common.dmapi > . ./common.punch > > # real QA test starts here > @@ -35,6 +36,10 @@ _supported_os Linux > > _require_scratch > > +# test that we have DMAPI support > +_dmapi_scratch_mount > +unmount $SCRATCH_MNT > /dev/null 2>&1 > + > # _test_punch args: blksize extsize_hint filesize "pp1 pp2 pp3" \ > # "ps1 ps2 ps3" "pt1 pt2 pt3" "wp1 wp2" "ws1 ws2" \ > # "w p p w p" resvsp > Index: xfs-cmds/xfstests/177 > =================================================================== > --- xfs-cmds.orig/xfstests/177 2007-10-12 13:50:14.000000000 +1000 > +++ xfs-cmds/xfstests/177 2008-04-23 11:34:38.991214401 +1000 > @@ -27,6 +27,7 @@ _cleanup() > # get standard environment, filters and checks > . ./common.rc > . ./common.filter > +. ./common.dmapi > > # real QA test starts here > > @@ -39,6 +40,10 @@ _require_scratch > _scratch_mkfs_xfs >/dev/null 2>&1 \ > || _fail "mkfs failed" > > +# test that we have DMAPI support > +_dmapi_scratch_mount > +unmount $SCRATCH_MNT > /dev/null 2>&1 > + > _scratch_mount \ > || _fail "mount failed" > From owner-xfs@oss.sgi.com Wed Apr 23 13:49:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 23 Apr 2008 13:49:33 -0700 (PDT) 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.7 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no 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 m3NKnAih005626 for ; Wed, 23 Apr 2008 13:49:13 -0700 X-ASG-Debug-ID: 1208983791-4a0c02cc0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx1.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C422C15C18B6; Wed, 23 Apr 2008 13:49:51 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id YSSiAgM5cF3KgWCC; Wed, 23 Apr 2008 13:49:51 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id m3NKnoUZ008451; Wed, 23 Apr 2008 16:49:50 -0400 Received: from file.rdu.redhat.com (file.rdu.redhat.com [10.11.255.147]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m3NKnoMA013014; Wed, 23 Apr 2008 16:49:50 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by file.rdu.redhat.com (8.13.1/8.13.1) with ESMTP id m3NKnn8F011177; Wed, 23 Apr 2008 16:49:49 -0400 Message-ID: <480FA0ED.90609@sandeen.net> Date: Wed, 23 Apr 2008 15:49:49 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (X11/20080226) MIME-Version: 1.0 To: Barry Naujok CC: "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: xfsprogs 2.9.8 source tarball released Subject: Re: xfsprogs 2.9.8 source tarball released References: In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 X-Barracuda-Connect: mx1.redhat.com[66.187.233.31] X-Barracuda-Start-Time: 1208983792 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15561 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Barry Naujok wrote: > ftp://oss.sgi.com/projects/xfs/cmd_tars/xfsprogs_2.9.8-1.tar.gz > > Changes since 2.9.7: > > - Add support for sb_features2 in wrong location in mkfs.xfs, > xfs_repair and xfs_db. > - Improve memory limits for libxfs cache in xfs_repair and added > a -m option to manually limit usage of xfs_repair. > - Add -c option to xfs_admin to turn lazy-counters on/off. > - Added support for mdp in libdisk/mkfs.xfs, thanks to > Hubert Verstraete. > - Add -p option to fsck.xfs, thanks to Markus Rothe. > - Cleanup sys v3 bzero/bcopy calls, thanks to Nigel Kukard. > > This is in Fedora Rawhide now too, for anyone interested. -Eric From owner-xfs@oss.sgi.com Wed Apr 23 14:16:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 23 Apr 2008 14:16:28 -0700 (PDT) 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.7 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 m3NLG0kG010042 for ; Wed, 23 Apr 2008 14:16:01 -0700 X-ASG-Debug-ID: 1208985402-645602b90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx1.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CB8CD15C522A for ; Wed, 23 Apr 2008 14:16:42 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id DuYj4Of3UWlmb1XR for ; Wed, 23 Apr 2008 14:16:42 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id m3NLGfh4018822 for ; Wed, 23 Apr 2008 17:16:41 -0400 Received: from file.rdu.redhat.com (file.rdu.redhat.com [10.11.255.147]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m3NLGe7R032176; Wed, 23 Apr 2008 17:16:40 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by file.rdu.redhat.com (8.13.1/8.13.1) with ESMTP id m3NLGegL016378; Wed, 23 Apr 2008 17:16:40 -0400 Message-ID: <480FA737.5030001@sandeen.net> Date: Wed, 23 Apr 2008 16:16:39 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (X11/20080226) MIME-Version: 1.0 To: xfs mailing list CC: David Howells X-ASG-Orig-Subj: [PATCH] convert xfs to use ERR_CAST Subject: [PATCH] convert xfs to use ERR_CAST Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 X-Barracuda-Connect: mx1.redhat.com[66.187.233.31] X-Barracuda-Start-Time: 1208985402 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15562 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Looks like somehow xfs got missed in the conversion that took place in e231c2ee64eb1c5cd3c63c31da9dac7d888dcf7f, "Convert ERR_PTR(PTR_ERR(p)) instances to ERR_CAST(p) " Signed-off-by: Eric Sandeen --- ndex: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_export.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_export.c +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_export.c @@ -167,7 +167,7 @@ xfs_fs_fh_to_dentry(struct super_block * if (!inode) return NULL; if (IS_ERR(inode)) - return ERR_PTR(PTR_ERR(inode)); + return ERR_CAST(inode); result = d_alloc_anon(inode); if (!result) { iput(inode); @@ -198,7 +198,7 @@ xfs_fs_fh_to_parent(struct super_block * if (!inode) return NULL; if (IS_ERR(inode)) - return ERR_PTR(PTR_ERR(inode)); + return ERR_CAST(inode); result = d_alloc_anon(inode); if (!result) { iput(inode); From owner-xfs@oss.sgi.com Wed Apr 23 14:26:31 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 23 Apr 2008 14:26:50 -0700 (PDT) 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.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 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 m3NLQVxY010847 for ; Wed, 23 Apr 2008 14:26:31 -0700 X-ASG-Debug-ID: 1208986030-6a9d023e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from lucidpixels.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5E683DD9FC for ; Wed, 23 Apr 2008 14:27:10 -0700 (PDT) Received: from lucidpixels.com (lucidpixels.com [75.144.35.66]) by cuda.sgi.com with ESMTP id LDRDxa68s0cu0wIZ for ; Wed, 23 Apr 2008 14:27:10 -0700 (PDT) Received: by lucidpixels.com (Postfix, from userid 1001) id 664BB1C0033D3; Wed, 23 Apr 2008 17:27:10 -0400 (EDT) Date: Wed, 23 Apr 2008 17:27:10 -0400 (EDT) From: Justin Piszcz To: Eric Sandeen cc: Barry Naujok , "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: xfsprogs 2.9.8 source tarball released Subject: Re: xfsprogs 2.9.8 source tarball released In-Reply-To: <480FA0ED.90609@sandeen.net> Message-ID: References: <480FA0ED.90609@sandeen.net> User-Agent: Alpine 1.10 (DEB 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Barracuda-Connect: lucidpixels.com[75.144.35.66] X-Barracuda-Start-Time: 1208986033 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.1, rules version 3.1.48638 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15563 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jpiszcz@lucidpixels.com Precedence: bulk X-list: xfs On Wed, 23 Apr 2008, Eric Sandeen wrote: > Barry Naujok wrote: >> ftp://oss.sgi.com/projects/xfs/cmd_tars/xfsprogs_2.9.8-1.tar.gz >> >> Changes since 2.9.7: >> >> - Add support for sb_features2 in wrong location in mkfs.xfs, >> xfs_repair and xfs_db. >> - Improve memory limits for libxfs cache in xfs_repair and added >> a -m option to manually limit usage of xfs_repair. >> - Add -c option to xfs_admin to turn lazy-counters on/off. >> - Added support for mdp in libdisk/mkfs.xfs, thanks to >> Hubert Verstraete. >> - Add -p option to fsck.xfs, thanks to Markus Rothe. >> - Cleanup sys v3 bzero/bcopy calls, thanks to Nigel Kukard. >> >> > > This is in Fedora Rawhide now too, for anyone interested. > > -Eric > > Does not compile on Debian Testing / x86_64: xfsprogs-2.9.8$ make === include === rm -f xfs disk ln -s . xfs ln -s . disk === libxfs === /usr/bin/libtool --mode=compile gcc -I. -g -O2 -DNDEBUG -DVERSION=\"2.9.8\" -DLOCALEDIR=\"/usr/local/share/locale\" -DPACKAGE=\"xfsprogs\" -I../include -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -funsigned-char -fno-strict-aliasing -Wall -c logitem.c gcc -I. -g -O2 -DNDEBUG -DVERSION=\"2.9.8\" -DLOCALEDIR=\"/usr/local/share/locale\" -DPACKAGE=\"xfsprogs\" -I../include -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -funsigned-char -fno-strict-aliasing -Wall -c logitem.c -fPIC -DPIC -o .libs/logitem.o logitem.c:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token logitem.c:22: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token logitem.c:33: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token logitem.c:132: error: expected ')' before '*' token logitem.c:178: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token logitem.c:197: error: expected ')' before '*' token logitem.c:239: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'xfs_buf_t' logitem.c:314: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'xfs_buf_t' logitem.c:398: error: expected ')' before '*' token logitem.c:451: error: expected ')' before '*' token logitem.c:467: error: expected ')' before '*' token make[1]: *** [logitem.lo] Error 1 make: *** [default] Error 2 Command exited with non-zero status 2 0.07user 0.07system 0:00.15elapsed 94%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+25010minor)pagefaults 0swaps From owner-xfs@oss.sgi.com Wed Apr 23 15:35:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 23 Apr 2008 15:35:52 -0700 (PDT) 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.0 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 m3NMZC51015196 for ; Wed, 23 Apr 2008 15:35:14 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id IAA05928; Thu, 24 Apr 2008 08:35:47 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3NMZjsT142551622; Thu, 24 Apr 2008 08:35:46 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3NMZfxU142766388; Thu, 24 Apr 2008 08:35:41 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 24 Apr 2008 08:35:41 +1000 From: David Chinner To: "Raoul Bhatia [IPAX]" Cc: xfs@oss.sgi.com, jens.axboe@oracle.com Subject: Re: call trace after >page allocation failure. order:0, mode:0x10000< Message-ID: <20080423223541.GQ103491721@sgi.com> References: <480DADD2.7060408@ipax.at> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <480DADD2.7060408@ipax.at> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15564 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Raoul, You've exhausted the bio mempool. That is not supposed to happen. This is a block layer or configuration issue, not an XFS problem. Jens, have you heard of anything like this recently? Cheers, Dave. On Tue, Apr 22, 2008 at 11:20:18AM +0200, Raoul Bhatia [IPAX] wrote: > hi, > > is the following calltrace related to xfs or something else? > it happended during "stress --hdd 20 --hdd-bytes 2g" on a > raid10 volume: > > > # cat /proc/mdstat > > Personalities : [raid1] [raid10] > > md0 : active raid10 sdd5[3] sdc5[2] sdb5[1] sda5[0] > > 39069824 blocks 64K chunks 2 near-copies [4/4] [UUUU] > > maybe this is xfs' way to tell "out of diskspace"? :) > > > db-ipax-164:~# uname -a > > Linux db-ipax-164.travian.info 2.6.25-rc8 #2 SMP Mon Apr 7 14:50:22 CEST 2008 x86_64 GNU/Linux > > * debian etch 64bit > * libc6 2.3.6.ds1-13etch5 > * xfsprogs 2.8.11-1 > > cheers, > raoul > > > > stress: page allocation failure. order:0, mode:0x10000 > > Pid: 12386, comm: stress Not tainted 2.6.25-rc8 #2 > > > > Call Trace: > > [] __alloc_pages+0x2ea/0x306 > > [] kmem_getpages+0xc6/0x194 > > [] kmem_getpages+0xc6/0x194 > > [] fallback_alloc+0x11a/0x18f > > [] kmem_cache_alloc_node+0xf1/0x122 > > [] cache_grow+0xd5/0x20c > > [] fallback_alloc+0x159/0x18f > > [] kmem_cache_alloc+0xad/0xdc > > [] mempool_alloc+0x24/0xda > > [] :xfs:xfs_cluster_write+0xcd/0xf8 > > [] bio_alloc_bioset+0x89/0xd9 > > [] bio_alloc+0x10/0x20 > > [] :xfs:xfs_alloc_ioend_bio+0x22/0x4e > > [] :xfs:xfs_submit_ioend+0x4d/0xc6 > > [] :xfs:xfs_page_state_convert+0x516/0x565 > > [] :xfs:xfs_vm_writepage+0xb4/0xeb > > [] __writepage+0xa/0x23 > > [] write_cache_pages+0x182/0x2b7 > > [] __writepage+0x0/0x23 > > [] do_writepages+0x20/0x2d > > [] __writeback_single_inode+0x144/0x29d > > [] sync_sb_inodes+0x1b1/0x285 > > [] :xfs:xfs_get_blocks+0x0/0xe > > [] writeback_inodes+0x62/0xb3 > > [] balance_dirty_pages_ratelimited_nr+0x155/0x2b3 > > [] generic_file_buffered_write+0x206/0x633 > > [] thread_return+0x3e/0x9d > > [] current_fs_time+0x1e/0x24 > > [] :xfs:xfs_write+0x52f/0x75a > > [] dummy_file_permission+0x0/0x3 > > [] do_sync_write+0xc9/0x10c > > [] autoremove_wake_function+0x0/0x2e > > [] set_next_entity+0x18/0x3a > > [] vfs_write+0xad/0x136 > > [] sys_write+0x45/0x6e > > [] system_call_after_swapgs+0x7b/0x80 > > > > Mem-info: > > Node 0 DMA per-cpu: > > CPU 0: hi: 0, btch: 1 usd: 0 > > CPU 1: hi: 0, btch: 1 usd: 0 > > CPU 2: hi: 0, btch: 1 usd: 0 > > CPU 3: hi: 0, btch: 1 usd: 0 > > Node 0 DMA32 per-cpu: > > CPU 0: hi: 186, btch: 31 usd: 153 > > CPU 1: hi: 186, btch: 31 usd: 185 > > CPU 2: hi: 186, btch: 31 usd: 141 > > CPU 3: hi: 186, btch: 31 usd: 190 > > Node 0 Normal per-cpu: > > CPU 0: hi: 186, btch: 31 usd: 169 > > CPU 1: hi: 186, btch: 31 usd: 185 > > CPU 2: hi: 186, btch: 31 usd: 44 > > CPU 3: hi: 186, btch: 31 usd: 116 > > Node 1 Normal per-cpu: > > CPU 0: hi: 186, btch: 31 usd: 175 > > CPU 1: hi: 186, btch: 31 usd: 156 > > CPU 2: hi: 186, btch: 31 usd: 33 > > CPU 3: hi: 186, btch: 31 usd: 160 > > Active:35627 inactive:1900080 dirty:48667 writeback:147697 unstable:0 > > free:8797 slab:112757 mapped:1726 pagetables:391 bounce:0 > > Node 0 DMA free:11996kB min:12kB low:12kB high:16kB active:0kB inactive:0kB present:11452kB pages_scanned:0 all_unreclaimable? yes > > lowmem_reserve[]: 0 3000 4010 4010 > > Node 0 DMA32 free:12336kB min:4276kB low:5344kB high:6412kB active:1592kB inactive:2834572kB present:3072160kB pages_scanned:0 all_unreclaimable? no > > lowmem_reserve[]: 0 0 1010 1010 > > Node 0 Normal free:2320kB min:1436kB low:1792kB high:2152kB active:14336kB inactive:973540kB present:1034240kB pages_scanned:0 all_unreclaimable? no > > lowmem_reserve[]: 0 0 0 0 > > Node 1 Normal free:8984kB min:5756kB low:7192kB high:8632kB active:126580kB inactive:3791952kB present:4136960kB pages_scanned:0 all_unreclaimable? no > > lowmem_reserve[]: 0 0 0 0 > > Node 0 DMA: 5*4kB 5*8kB 2*16kB 4*32kB 4*64kB 4*128kB 3*256kB 2*512kB 1*1024kB 0*2048kB 2*4096kB = 11996kB > > Node 0 DMA32: 1301*4kB 17*8kB 1*16kB 1*32kB 1*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 1*2048kB 1*4096kB = 12236kB > > Node 0 Normal: 311*4kB 0*8kB 1*16kB 3*32kB 1*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 0*2048kB 0*4096kB = 2060kB > > Node 1 Normal: 1210*4kB 0*8kB 0*16kB 0*32kB 1*64kB 1*128kB 2*256kB 1*512kB 1*1024kB 1*2048kB 0*4096kB = 9128kB > > 1901879 total pagecache pages > > Swap cache: add 526500, delete 526485, find 153749/161350 > > Free swap = 1999532kB > > Total swap = 2000084kB > > Free swap: 1999532kB > > 2097152 pages of RAM > > 29989 reserved pages > > 1902596 pages shared > > 15 pages swap cached > > -- > ____________________________________________________________________ > DI (FH) Raoul Bhatia M.Sc. email. r.bhatia@ipax.at > Technischer Leiter > > IPAX - Aloy Bhatia Hava OEG web. http://www.ipax.at > Barawitzkagasse 10/2/2/11 email. office@ipax.at > 1190 Wien tel. +43 1 3670030 > FN 277995t HG Wien fax. +43 1 3670030 15 > ____________________________________________________________________ > -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 23 16:34:32 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 23 Apr 2008 16:34:54 -0700 (PDT) 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.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 m3NNYTPM024452 for ; Wed, 23 Apr 2008 16:34:32 -0700 X-ASG-Debug-ID: 1208993709-619a01fd0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ext.agami.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id AED67AB7FD7 for ; Wed, 23 Apr 2008 16:35:09 -0700 (PDT) Received: from ext.agami.com (64.221.212.177.ptr.us.xo.net [64.221.212.177]) by cuda.sgi.com with ESMTP id ACl0Uegd3J26EtYC for ; Wed, 23 Apr 2008 16:35:09 -0700 (PDT) Received: from agami.com (mail [192.168.168.5]) by ext.agami.com (8.12.5/8.12.5) with ESMTP id m3NNYhUE029354 for ; Wed, 23 Apr 2008 16:34:45 -0700 Received: from mx1.agami.com (mx1.agami.com [10.123.10.30]) by agami.com (8.12.11/8.12.11) with ESMTP id m3NNYhsF017189 for ; Wed, 23 Apr 2008 16:34:43 -0700 Received: from [10.123.4.142] ([10.123.4.142]) by mx1.agami.com with Microsoft SMTPSVC(6.0.3790.1830); Wed, 23 Apr 2008 16:35:06 -0700 Message-ID: <480FC7AA.5060401@agami.com> Date: Wed, 23 Apr 2008 16:35:06 -0700 From: Michael Nishimoto User-Agent: Mail/News 1.5.0.4 (X11/20060629) MIME-Version: 1.0 To: XFS Mailing List X-ASG-Orig-Subj: [PATCH] fix xfs kernel so 2GiB logs work Subject: [PATCH] fix xfs kernel so 2GiB logs work Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 23 Apr 2008 23:35:06.0418 (UTC) FILETIME=[A94FB920:01C8A59A] X-Barracuda-Connect: 64.221.212.177.ptr.us.xo.net[64.221.212.177] X-Barracuda-Start-Time: 1208993711 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0208 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.92 X-Barracuda-Spam-Status: No, SCORE=-1.92 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_GENERIC_NO_PTR X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48645 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_GENERIC_NO_PTR Delivered to trusted network by host with generic-looking RDNS - indicates no PTR record X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15565 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: miken@agami.com Precedence: bulk X-list: xfs I hope that I've got everything now. Ensure that 2 GiB xfs logs work properly. We found this while experimenting with 2GiB xfs logs. The previous code never assumed that xfs logs would ever get so large. Signed-off-by: Michael Nishimoto =========================================================== --- xfs_log.2.c 2008-04-01 11:55:45.000000000 -0700 +++ xfs_log.3.c 2008-04-01 11:56:53.000000000 -0700 @@ -230,20 +230,24 @@ static void xlog_grant_add_space_write(struct log *log, int bytes) { - log->l_grant_write_bytes += bytes; - if (log->l_grant_write_bytes > log->l_logsize) { - log->l_grant_write_bytes -= log->l_logsize; - log->l_grant_write_cycle++; + int tmp = log->l_logsize - log->l_grant_write_bytes; + if (tmp > bytes) + log->l_grant_write_bytes += bytes; + else { + log->l_grant_write_cycle++; + log->l_grant_write_bytes = bytes - tmp; } } static void xlog_grant_add_space_reserve(struct log *log, int bytes) { - log->l_grant_reserve_bytes += bytes; - if (log->l_grant_reserve_bytes > log->l_logsize) { - log->l_grant_reserve_bytes -= log->l_logsize; - log->l_grant_reserve_cycle++; + int tmp = log->l_logsize - log->l_grant_reserve_bytes; + if (tmp > bytes) + log->l_grant_reserve_bytes += bytes; + else { + log->l_grant_reserve_cycle++; + log->l_grant_reserve_bytes = bytes - tmp; } } From owner-xfs@oss.sgi.com Wed Apr 23 17:45:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 23 Apr 2008 17:45:51 -0700 (PDT) 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.0 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 m3O0jMsQ029323 for ; Wed, 23 Apr 2008 17:45:24 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA08406; Thu, 24 Apr 2008 10:46:00 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3O0jxsT143220556; Thu, 24 Apr 2008 10:45:59 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3O0juXD144012263; Thu, 24 Apr 2008 10:45:56 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 24 Apr 2008 10:45:56 +1000 From: David Chinner To: Michael Nishimoto Cc: XFS Mailing List Subject: Re: [PATCH] fix xfs kernel so 2GiB logs work Message-ID: <20080424004556.GU103491721@sgi.com> References: <480FC7AA.5060401@agami.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <480FC7AA.5060401@agami.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15566 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 23, 2008 at 04:35:06PM -0700, Michael Nishimoto wrote: > I hope that I've got everything now. Almost ;) > Ensure that 2 GiB xfs logs work properly. > > We found this while experimenting with 2GiB xfs logs. > The previous code never assumed that xfs logs would > ever get so large. > > Signed-off-by: Michael Nishimoto > =========================================================== > --- xfs_log.2.c 2008-04-01 11:55:45.000000000 -0700 > +++ xfs_log.3.c 2008-04-01 11:56:53.000000000 -0700 We normally diff from the root of the kernel tree between a pristine tree and a modified tree such that: --- 2.6.x-xfs-new.orig/fs/xfs/xfs_log.c 2008-04-23 09:31:29.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_log.c 2008-04-24 10:39:15.696830268 +1000 @@ -226,20 +226,24 @@ xlog_grant_sub_space(struct log *log, in static void xlog_grant_add_space_write(struct log *log, int bytes) .... is the path in the patch and you apply it via 'patch -p1 < file' in the root of the kernel tree. > @@ -230,20 +230,24 @@ > static void > xlog_grant_add_space_write(struct log *log, int bytes) > { > - log->l_grant_write_bytes += bytes; > - if (log->l_grant_write_bytes > log->l_logsize) { ^^^^^^^ And it looks like your mailer has converted tabs to spaces. Don't worry about either of those things for this patch, I've fixed them up when applying them to my test tree. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 23 18:48:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 23 Apr 2008 18:49:07 -0700 (PDT) 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.5 required=5.0 tests=BAYES_00,HTML_MESSAGE, J_CHICKENPOX_43 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 m3O1mEXW000838 for ; Wed, 23 Apr 2008 18:48:48 -0700 X-ASG-Debug-ID: 1209001734-555803500000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from py-out-1112.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E4FC4DEDBD for ; Wed, 23 Apr 2008 18:48:55 -0700 (PDT) Received: from py-out-1112.google.com (py-out-1112.google.com [64.233.166.181]) by cuda.sgi.com with ESMTP id U1xisE5u0nVVI2D0 for ; Wed, 23 Apr 2008 18:48:55 -0700 (PDT) Received: by py-out-1112.google.com with SMTP id j37so3056902pyc.4 for ; Wed, 23 Apr 2008 18:48:54 -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:mime-version:content-type; bh=6aCe7nlJxAch2m7C+dpzJ2zyxlVE05BCciwHDIXG9UQ=; b=Imqssv8F1nO6H+N8/Jjjdj3ZyEf8xJUwphADgycoY6W0RC48EbunfmO3pLzhstNLgOukVSx34C/aTAHkUgW+cE1O/Xgmx/G/ZM6gmeJAYNnYUlLDA0g6NkAeyG5XzzvePdrgm1IhwRmYPODY6FInHqJzp/F+WkCEvUwpsaS/+nI= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:mime-version:content-type; b=ZgtlHsGHj2N9Rnnunw8yVeXh/+MWJFNzsQn5nC/3flWoJmU8n2QgNDd7kr03s7tZ9fnXDdH3yLcLTdR+BKLQ1EyoDlP02JZ6WlkHzf2f0x3vlZqGce6mhZUk1xZd3wltWocfb8srnDpOgW7K6TmsotWsrQB3Bjl719lJ+ReQ3s4= Received: by 10.140.165.21 with SMTP id n21mr335566rve.45.1209001733837; Wed, 23 Apr 2008 18:48:53 -0700 (PDT) Received: by 10.140.171.3 with HTTP; Wed, 23 Apr 2008 18:48:53 -0700 (PDT) Message-ID: Date: Wed, 23 Apr 2008 21:48:53 -0400 From: "Michael Darling" To: xfs@oss.sgi.com X-ASG-Orig-Subj: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) Subject: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) MIME-Version: 1.0 X-Barracuda-Connect: py-out-1112.google.com[64.233.166.181] X-Barracuda-Start-Time: 1209001735 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=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48656 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 6263 X-archive-position: 15567 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: darlingm@gmail.com Precedence: bulk X-list: xfs I am preparing a new server, and benchmarking EXT3 against XFS, both using software RAID and hardware RAID using a 3ware 9650SE-4LPML. Using bonnie++ as a benchmark, I am seeing significant performance boosts in my block sequential reads and writes moving from EXT3 to XFS. I am aware that XFS won't create and delete files as quickly as EXT3, however I am seeing drops from 29455/second to 1957/second using software RAID, and from 32524/second to 189/second using hardware RAID. I'm not sure if when using software raid, if creating and deleting files should drop to 6.6% of EXT3. But, what I'm pretty sure of, is when using hardware raid, that creating and deleting files shouldn't drop to 0.6% of EXT3. When using the 3ware card, mkfs.xfs defaulted to "data sunit=0 swidth=0 blks", which made me think that might be the problem, so I tried "-d sunit=128,swidth=384" with no effect. My 3ware card is using 64k stripes, so I calculated 64k stripes / 512 bytes = sunit 128, and multiplied by 3 drives (3 usable in a 4 drive raid 5) to get swidth 384. This is my first time calculating these values, so I'm not sure if I did this right. Unfortunately, these settings had no performance change. If anyone could give me some pointers, I would much appreciate it! BONNIE++ - SOFTWARE RAID 5 - 4 DRIVES - SETRA 16384 - EXT3 ----------------------------------------------------------------------------------------------------- "/sbin/mdadm --create /dev/md0 --verbose --level=raid5 --raid-devices=4 /dev/sd{b,c,d,e}" "/sbin/mke2fs -j /dev/md0" "mount /dev/md0 /newraid" "chmod 777 /newraid" "bonnie++ -d /newraid" (as non-root) Version 1.03 ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP servo.runtimecc. 8G 54852 96 116904 37 52572 15 63851 96 189073 25 352.8 1 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 29455 89 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ BONNIE++ - SOFTWARE RAID 5 - 4 DRIVES - SETRA 16384 - XFS --------------------------------------------------------------------------------------------------- "/sbin/mdadm --create /dev/md0 --verbose --level=raid5 --raid-devices=4 /dev/sd{b,c,d,e}" "/sbin/mkfs.xfs -i size=512 /dev/md0" "mount /dev/md0 /newraid" "chmod 777 /newraid" "bonnie++ -d /newraid" (as non-root) Version 1.03 ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP servo.runtimecc. 8G 61281 97 146610 32 48509 17 57977 89 180168 26 479.4 0 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 1597 11 +++++ +++ 1348 7 1398 10 +++++ +++ 954 5 BONNIE++ - 9650SE HARDWARE RAID 5 - 4 DRIVES - SETRA 16384 - EXT3 ------------------------------------------------------------------------------------------------------------------ (Using default 9650SE values, except turning write cache on and setting StorSave to balance) (I tried max_sectors_kb=64 and nr_requests=512 alone and together, and performance went down) "/sbin/mke2fs -j /dev/sdb1" "mount /dev/sdb1 /newraid" "chmod 777 /newraid" "bonnie++ -d /newraid" (as non-root) Version 1.03 ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP servo.runtimecc. 8G 53483 93 108314 31 57674 12 62134 91 227582 19 329.9 0 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 32524 95 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ BONNIE++ - 9650SE HARDWARE RAID 5 - 4 DRIVES - SETRA 16384 - XFS ----------------------------------------------------------------------------------------------------------------- (Using default 9650SE values, except turning write cache on and setting StorSave to balance) (I tried max_sectors_kb=64 and nr_requests=512 alone and together, and performance went down) "/sbin/mkfs.xfs -i size=512 /dev/sdb1" meta-data=/dev/sdb1 isize=512 agcount=32, agsize=11443802 blks = sectsz=512 attr=0 data = bsize=4096 blocks=366201664, imaxpct=25 = sunit=0 swidth=0 blks, unwritten=1 naming =version 2 bsize=4096 log =internal log bsize=4096 blocks=32768, version=1 = sectsz=512 sunit=0 blks, lazy-count=0 realtime =none extsz=4096 blocks=0, rtextents=0 sunit=swidth=0 worried me, so I tried "/sbin/mkfs.xfs -i size=512 -d sunit=128,swidth=384 /dev/sdb1" and got within 1-2% of the results below. "mount /dev/sdb1 /newraid" "chmod 777 /newraid" "bonnie++ -d /newraid" (as non-root) Version 1.03 ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP servo.runtimecc. 8G 62518 99 211622 33 78473 12 68182 99 214218 15 484.6 0 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 189 1 +++++ +++ 172 0 186 1 +++++ +++ 122 0 [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Wed Apr 23 21:01:06 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 23 Apr 2008 21:01:42 -0700 (PDT) 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 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 m3O415Gp013034 for ; Wed, 23 Apr 2008 21:01:06 -0700 X-ASG-Debug-ID: 1209009706-11e201580000-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 05E14DF178 for ; Wed, 23 Apr 2008 21:01:46 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id tgDYVlo2YIsXTCXy for ; Wed, 23 Apr 2008 21:01:46 -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 5EBF618004B6B; Wed, 23 Apr 2008 23:01:45 -0500 (CDT) Message-ID: <4810062F.50100@sandeen.net> Date: Wed, 23 Apr 2008 23:01:51 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Michael Darling CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) Subject: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1209009708 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.1, rules version 3.1.48664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15568 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Michael Darling wrote: > I am preparing a new server, and benchmarking EXT3 against XFS, both using > software RAID and hardware RAID using a 3ware 9650SE-4LPML. > > Using bonnie++ as a benchmark, I am seeing significant performance boosts in > my block sequential reads and writes moving from EXT3 to XFS. I am aware > that XFS won't create and delete files as quickly as EXT3, however I am > seeing drops from 29455/second to 1957/second using software RAID, and from > 32524/second to 189/second using hardware RAID. I'm not sure if when using > software raid, if creating and deleting files should drop to 6.6% of EXT3. > But, what I'm pretty sure of, is when using hardware raid, that creating and > deleting files shouldn't drop to 0.6% of EXT3. So I played with this a little on 2.6.25, on plain partitions. I saw similar numbers; for example, sequential creates: ext3: 23698/s xfs: 319/s xfs,nobarrier: 4478/s then on a whim I tried an external log on a devicemapper zero target :) xfs,fakelog: 15156/s Others can probably wax eloquent as to why xfs is slower on this test, but it's not unique to your setup, at least. -Eric From owner-xfs@oss.sgi.com Wed Apr 23 22:33:32 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 23 Apr 2008 22:33:49 -0700 (PDT) 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.0 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 m3O5XTHE018652 for ; Wed, 23 Apr 2008 22:33:31 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA13320; Thu, 24 Apr 2008 15:34:03 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3O5Y1sT144109284; Thu, 24 Apr 2008 15:34:02 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3O5XwRf139752613; Thu, 24 Apr 2008 15:33:58 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 24 Apr 2008 15:33:58 +1000 From: David Chinner To: Eric Sandeen Cc: Michael Darling , xfs@oss.sgi.com Subject: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) Message-ID: <20080424053358.GW103491721@sgi.com> References: <4810062F.50100@sandeen.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4810062F.50100@sandeen.net> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15569 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 23, 2008 at 11:01:51PM -0500, Eric Sandeen wrote: > Michael Darling wrote: > > I am preparing a new server, and benchmarking EXT3 against XFS, both using > > software RAID and hardware RAID using a 3ware 9650SE-4LPML. > > > > Using bonnie++ as a benchmark, I am seeing significant performance boosts in > > my block sequential reads and writes moving from EXT3 to XFS. I am aware > > that XFS won't create and delete files as quickly as EXT3, however I am > > seeing drops from 29455/second to 1957/second using software RAID, and from > > 32524/second to 189/second using hardware RAID. I'm not sure if when using > > software raid, if creating and deleting files should drop to 6.6% of EXT3. > > But, what I'm pretty sure of, is when using hardware raid, that creating and > > deleting files shouldn't drop to 0.6% of EXT3. > > So I played with this a little on 2.6.25, on plain partitions. > > I saw similar numbers; for example, sequential creates: > > ext3: 23698/s > xfs: 319/s > xfs,nobarrier: 4478/s And with logbsize=256k? Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 23 23:23:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 23 Apr 2008 23:23:26 -0700 (PDT) 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_00,HTML_MESSAGE 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 m3O6N6dj020816 for ; Wed, 23 Apr 2008 23:23:07 -0700 X-ASG-Debug-ID: 1209018226-1b4d00ad0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from rv-out-0506.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A2E42DF8E5 for ; Wed, 23 Apr 2008 23:23:46 -0700 (PDT) Received: from rv-out-0506.google.com (rv-out-0506.google.com [209.85.198.230]) by cuda.sgi.com with ESMTP id qBnhPzulBcwJLDbX for ; Wed, 23 Apr 2008 23:23:46 -0700 (PDT) Received: by rv-out-0506.google.com with SMTP id g37so1450188rvb.32 for ; Wed, 23 Apr 2008 23:23:46 -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=gK/h3oSIR1Q9Pw22nmo2y7sBRj1Y0oBwzOB0p57vNdk=; b=IEU51Nr034JzDljwgQpEzj91qe12lgTBTIWv9ZdPW+93H/TmaemfeTPqH8Nclc/7+uAhrzgA1pdHf+wsdOA9GDQGrLZmRVHGhtR3C3w3PJ04YkSWLkKmdWOKQsozQi9JeUW1FFFTc5Tf3BFY6I2o3sA36GJa8GAei9RZsBndpQk= 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=iHIiQeVqq9tvKzMmqtl1vjuI1KWSCqV6o70Y+7ZuyP6HM0o6/tse3fo2Uvg5P3lvq6iPhrEMVTrKnBkdOGF/5dWfJI0ykB6pywrxQv7s7xRxUkf60HiCJt6H8exkFNN2S3MjJSl30HrU3mxKORucZztngOqQ4cCy4FrALs9hYFM= Received: by 10.140.157.1 with SMTP id f1mr982307rve.220.1209018226006; Wed, 23 Apr 2008 23:23:46 -0700 (PDT) Received: by 10.140.171.3 with HTTP; Wed, 23 Apr 2008 23:23:45 -0700 (PDT) Message-ID: Date: Thu, 24 Apr 2008 02:23:45 -0400 From: "Michael Darling" To: "David Chinner" , "Eric Sandeen" , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) Subject: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) In-Reply-To: <20080424053358.GW103491721@sgi.com> MIME-Version: 1.0 References: <4810062F.50100@sandeen.net> <20080424053358.GW103491721@sgi.com> X-Barracuda-Connect: rv-out-0506.google.com[209.85.198.230] X-Barracuda-Start-Time: 1209018228 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=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48674 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 2211 X-archive-position: 15570 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: darlingm@gmail.com Precedence: bulk X-list: xfs Eric, for the numbers you provided, are you using a single drive, software raid, or hardware raid? If a hardware raid, is it a 3ware card? I hadn't seen the nobarrier mount option before. Using that changes sequential creates from about 190/second to about 2500/second, and changes sequential deletes from about 170/second to about 3700/second. I don't yet have a BBU for the 3ware card, but would certainly get one if we go with the 3ware card before we start putting real data on the raid. Am I right that with a BBU unit and a battery backup for the server as a whole, that nobarrier would be safe to use? Not using nobarrier, but using logbsize 256k changes sequential creates from about 190/second to about 270/second. So, it's an improvement, but no where near where a software raid performs (1600/second) or where the hardware raid performs with nobarrier. On Thu, Apr 24, 2008 at 1:33 AM, David Chinner wrote: > On Wed, Apr 23, 2008 at 11:01:51PM -0500, Eric Sandeen wrote: > > Michael Darling wrote: > > > I am preparing a new server, and benchmarking EXT3 against XFS, both > using > > > software RAID and hardware RAID using a 3ware 9650SE-4LPML. > > > > > > Using bonnie++ as a benchmark, I am seeing significant performance > boosts in > > > my block sequential reads and writes moving from EXT3 to XFS. I am > aware > > > that XFS won't create and delete files as quickly as EXT3, however I > am > > > seeing drops from 29455/second to 1957/second using software RAID, and > from > > > 32524/second to 189/second using hardware RAID. I'm not sure if when > using > > > software raid, if creating and deleting files should drop to 6.6% of > EXT3. > > > But, what I'm pretty sure of, is when using hardware raid, that > creating and > > > deleting files shouldn't drop to 0.6% of EXT3. > > > > So I played with this a little on 2.6.25, on plain partitions. > > > > I saw similar numbers; for example, sequential creates: > > > > ext3: 23698/s > > xfs: 319/s > > xfs,nobarrier: 4478/s > > And with logbsize=256k? > > Cheers, > > Dave. > -- > Dave Chinner > Principal Engineer > SGI Australian Software Group > [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Wed Apr 23 23:30:31 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 23 Apr 2008 23:30:38 -0700 (PDT) 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.0 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 m3O6URRB021460 for ; Wed, 23 Apr 2008 23:30:29 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA14203; Thu, 24 Apr 2008 16:31:07 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3O6V4sT144049963; Thu, 24 Apr 2008 16:31:05 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3O6V2bI144087685; Thu, 24 Apr 2008 16:31:02 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 24 Apr 2008 16:31:02 +1000 From: David Chinner To: Michael Darling Cc: David Chinner , Eric Sandeen , xfs@oss.sgi.com Subject: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) Message-ID: <20080424063102.GX103491721@sgi.com> References: <4810062F.50100@sandeen.net> <20080424053358.GW103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15571 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, Apr 24, 2008 at 02:23:45AM -0400, Michael Darling wrote: > Eric, for the numbers you provided, are you using a single drive, software > raid, or hardware raid? If a hardware raid, is it a 3ware card? > > I hadn't seen the nobarrier mount option before. Using that changes > sequential creates from about 190/second to about 2500/second, and changes > sequential deletes from about 170/second to about 3700/second. > > I don't yet have a BBU for the 3ware card, but would certainly get one if we > go with the 3ware card before we start putting real data on the raid. Am I > right that with a BBU unit and a battery backup for the server as a whole, > that nobarrier would be safe to use? Are you using write caching on the RAID card? If yes, then you need a BBU for the card if you want to enable the write cache safely. > Not using nobarrier, but using logbsize 256k changes sequential creates from > about 190/second to about 270/second. So, it's an improvement, but no where > near where a software raid performs (1600/second) or where the hardware raid > performs with nobarrier. Sounds like the hardware RAID is doing a full cache flush on barrier I/Os which will cause lots and lots RMW cycles in the back end. i.e. slow. Software raid ignores barriers, so is unsafe with any write cache turned on (and that goes for any filesystem, not just XFS). Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 23 23:57:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 23 Apr 2008 23:58:03 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_65 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 m3O6vg96022638 for ; Wed, 23 Apr 2008 23:57:44 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA14602; Thu, 24 Apr 2008 16:58:24 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3O6wNsT135291642; Thu, 24 Apr 2008 16:58:23 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3O6wMbe144098646; Thu, 24 Apr 2008 16:58:22 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 24 Apr 2008 16:58:22 +1000 From: David Chinner To: Timothy Shimmin Cc: David Chinner , xfs-dev , xfs-oss Subject: Re: [PATCH, XFSQA] Don't run 175-177 if DMAPI is not supported Message-ID: <20080424065822.GY103491721@sgi.com> References: <20080423013802.GJ103491721@sgi.com> <480EDE04.5080003@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <480EDE04.5080003@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15572 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 23, 2008 at 04:58:12PM +1000, Timothy Shimmin wrote: > Hi, > > _test_punch already does a umount $SCRATCH_MNT. > However, IMHO, it would probably be nicer if one could > use a _require_dmapi or really it may be simpler if > we could roll it into common.dmapi > so one just needs to include common.dmapi and > it would complain at that point if the kernel > didn't support it. Sure, but we don't have that, and I'm not about to spend the time to convert >20 tests to something like this. Right now I just want to remove all the bloody silly test failures on mainline kernels. All the other dmapi tests "not run" just fine, I want these to do the same thing. Is that good enough to check in right now? Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Thu Apr 24 01:04:21 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 24 Apr 2008 01:04:40 -0700 (PDT) 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.2 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 m3O84JpS000388 for ; Thu, 24 Apr 2008 01:04:21 -0700 X-ASG-Debug-ID: 1209024300-470e01b10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from lucidpixels.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 564B110AA632 for ; Thu, 24 Apr 2008 01:05:00 -0700 (PDT) Received: from lucidpixels.com (lucidpixels.com [75.144.35.66]) by cuda.sgi.com with ESMTP id 5MWkiD2nhzzDei5E for ; Thu, 24 Apr 2008 01:05:00 -0700 (PDT) Received: by lucidpixels.com (Postfix, from userid 1001) id 3B4DE1C000E96; Thu, 24 Apr 2008 04:05:00 -0400 (EDT) Date: Thu, 24 Apr 2008 04:05:00 -0400 (EDT) From: Justin Piszcz To: Barry Naujok cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfsprogs 2.9.8 source tarball released Subject: Re: xfsprogs 2.9.8 source tarball released In-Reply-To: Message-ID: References: <480FA0ED.90609@sandeen.net> User-Agent: Alpine 1.10 (DEB 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Barracuda-Connect: lucidpixels.com[75.144.35.66] X-Barracuda-Start-Time: 1209024301 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.1, rules version 3.1.48677 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15573 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jpiszcz@lucidpixels.com Precedence: bulk X-list: xfs On Thu, 24 Apr 2008, Barry Naujok wrote: > On Thu, 24 Apr 2008 07:27:10 +1000, Justin Piszcz > wrote: > >> >> >> On Wed, 23 Apr 2008, Eric Sandeen wrote: >> >>> Barry Naujok wrote: >>>> ftp://oss.sgi.com/projects/xfs/cmd_tars/xfsprogs_2.9.8-1.tar.gz >>>> >>>> Changes since 2.9.7: >>>> >>>> - Add support for sb_features2 in wrong location in mkfs.xfs, >>>> xfs_repair and xfs_db. >>>> - Improve memory limits for libxfs cache in xfs_repair and added >>>> a -m option to manually limit usage of xfs_repair. >>>> - Add -c option to xfs_admin to turn lazy-counters on/off. >>>> - Added support for mdp in libdisk/mkfs.xfs, thanks to >>>> Hubert Verstraete. >>>> - Add -p option to fsck.xfs, thanks to Markus Rothe. >>>> - Cleanup sys v3 bzero/bcopy calls, thanks to Nigel Kukard. >>>> >>>> >>> >>> This is in Fedora Rawhide now too, for anyone interested. >>> >>> -Eric >>> >>> >> >> Does not compile on Debian Testing / x86_64: >> >> xfsprogs-2.9.8$ make >> === include === >> rm -f xfs disk >> ln -s . xfs >> ln -s . disk >> === libxfs === >> /usr/bin/libtool --mode=compile gcc -I. -g -O2 -DNDEBUG -DVERSION=\"2.9.8\" >> -DLOCALEDIR=\"/usr/local/share/locale\" -DPACKAGE=\"xfsprogs\" -I../include >> -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -funsigned-char -fno-strict-aliasing >> -Wall -c logitem.c >> gcc -I. -g -O2 -DNDEBUG -DVERSION=\"2.9.8\" >> -DLOCALEDIR=\"/usr/local/share/locale\" -DPACKAGE=\"xfsprogs\" -I../include >> -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -funsigned-char -fno-strict-aliasing >> -Wall -c logitem.c -fPIC -DPIC -o .libs/logitem.o >> logitem.c:21: error: expected '=', ',', ';', 'asm' or '__attribute__' >> before '*' token >> logitem.c:22: error: expected '=', ',', ';', 'asm' or '__attribute__' >> before '*' token >> logitem.c:33: error: expected '=', ',', ';', 'asm' or '__attribute__' >> before '*' token >> logitem.c:132: error: expected ')' before '*' token >> logitem.c:178: error: expected '=', ',', ';', 'asm' or '__attribute__' >> before '*' token >> logitem.c:197: error: expected ')' before '*' token >> logitem.c:239: error: expected '=', ',', ';', 'asm' or '__attribute__' >> before 'xfs_buf_t' >> logitem.c:314: error: expected '=', ',', ';', 'asm' or '__attribute__' >> before 'xfs_buf_t' >> logitem.c:398: error: expected ')' before '*' token >> logitem.c:451: error: expected ')' before '*' token >> logitem.c:467: error: expected ')' before '*' token >> make[1]: *** [logitem.lo] Error 1 >> make: *** [default] Error 2 >> Command exited with non-zero status 2 >> 0.07user 0.07system 0:00.15elapsed 94%CPU (0avgtext+0avgdata 0maxresident)k >> 0inputs+0outputs (0major+25010minor)pagefaults 0swaps >> >> > > > How bizarre, I'm using Debian testing, downloaded and extracted > the tarball and ran "make" and it worked fine. > Maybe try "make distclean" first? Problem was on my side, it compiles OK, a bad C_INCLUDE/CPLUS_INCLUDE environmental variable setting. Thanks.. Justin. From owner-xfs@oss.sgi.com Thu Apr 24 03:47:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 24 Apr 2008 03:48:20 -0700 (PDT) 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=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 m3OAlqV3009451 for ; Thu, 24 Apr 2008 03:47:57 -0700 X-ASG-Debug-ID: 1209034111-12f7032a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from kernel.dk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 221C610AB035 for ; Thu, 24 Apr 2008 03:48:31 -0700 (PDT) Received: from kernel.dk (brick.kernel.dk [87.55.233.238]) by cuda.sgi.com with ESMTP id CGycpfr89ldyQMAf for ; Thu, 24 Apr 2008 03:48:31 -0700 (PDT) Received: by kernel.dk (Postfix, from userid 500) id AE7B7256F56; Thu, 24 Apr 2008 12:48:19 +0200 (CEST) Date: Thu, 24 Apr 2008 12:48:19 +0200 From: Jens Axboe To: David Chinner Cc: "Raoul Bhatia [IPAX]" , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: call trace after >page allocation failure. order:0, mode:0x10000< Subject: Re: call trace after >page allocation failure. order:0, mode:0x10000< Message-ID: <20080424104818.GT12774@kernel.dk> References: <480DADD2.7060408@ipax.at> <20080423223541.GQ103491721@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080423223541.GQ103491721@sgi.com> X-Barracuda-Connect: brick.kernel.dk[87.55.233.238] X-Barracuda-Start-Time: 1209034114 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=INFO_TLD X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48691 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 INFO_TLD URI: Contains an URL in the INFO top-level domain X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15574 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jens.axboe@oracle.com Precedence: bulk X-list: xfs On Thu, Apr 24 2008, David Chinner wrote: > Raoul, > > You've exhausted the bio mempool. That is not supposed to happen. > > This is a block layer or configuration issue, not an XFS problem. > > Jens, have you heard of anything like this recently? Nope, haven't heard of anything like this. But I don't think your analysis is quite right - if you call into mempool_alloc(), it may rightfully try to allocate outside of the pool only to fallback to pre-allocated entries. So the page allocation failure message isn't a bug as such, just the vm running complete OOM. Now, if mempool_alloc() returned NULL with __GFP_WAIT set, THAT would be a bug. > > Cheers, > > Dave. > > On Tue, Apr 22, 2008 at 11:20:18AM +0200, Raoul Bhatia [IPAX] wrote: > > hi, > > > > is the following calltrace related to xfs or something else? > > it happended during "stress --hdd 20 --hdd-bytes 2g" on a > > raid10 volume: > > > > > # cat /proc/mdstat > > > Personalities : [raid1] [raid10] > > > md0 : active raid10 sdd5[3] sdc5[2] sdb5[1] sda5[0] > > > 39069824 blocks 64K chunks 2 near-copies [4/4] [UUUU] > > > > maybe this is xfs' way to tell "out of diskspace"? :) > > > > > db-ipax-164:~# uname -a > > > Linux db-ipax-164.travian.info 2.6.25-rc8 #2 SMP Mon Apr 7 14:50:22 CEST 2008 x86_64 GNU/Linux > > > > * debian etch 64bit > > * libc6 2.3.6.ds1-13etch5 > > * xfsprogs 2.8.11-1 > > > > cheers, > > raoul > > > > > > > stress: page allocation failure. order:0, mode:0x10000 > > > Pid: 12386, comm: stress Not tainted 2.6.25-rc8 #2 > > > > > > Call Trace: > > > [] __alloc_pages+0x2ea/0x306 > > > [] kmem_getpages+0xc6/0x194 > > > [] kmem_getpages+0xc6/0x194 > > > [] fallback_alloc+0x11a/0x18f > > > [] kmem_cache_alloc_node+0xf1/0x122 > > > [] cache_grow+0xd5/0x20c > > > [] fallback_alloc+0x159/0x18f > > > [] kmem_cache_alloc+0xad/0xdc > > > [] mempool_alloc+0x24/0xda > > > [] :xfs:xfs_cluster_write+0xcd/0xf8 > > > [] bio_alloc_bioset+0x89/0xd9 > > > [] bio_alloc+0x10/0x20 > > > [] :xfs:xfs_alloc_ioend_bio+0x22/0x4e > > > [] :xfs:xfs_submit_ioend+0x4d/0xc6 > > > [] :xfs:xfs_page_state_convert+0x516/0x565 > > > [] :xfs:xfs_vm_writepage+0xb4/0xeb > > > [] __writepage+0xa/0x23 > > > [] write_cache_pages+0x182/0x2b7 > > > [] __writepage+0x0/0x23 > > > [] do_writepages+0x20/0x2d > > > [] __writeback_single_inode+0x144/0x29d > > > [] sync_sb_inodes+0x1b1/0x285 > > > [] :xfs:xfs_get_blocks+0x0/0xe > > > [] writeback_inodes+0x62/0xb3 > > > [] balance_dirty_pages_ratelimited_nr+0x155/0x2b3 > > > [] generic_file_buffered_write+0x206/0x633 > > > [] thread_return+0x3e/0x9d > > > [] current_fs_time+0x1e/0x24 > > > [] :xfs:xfs_write+0x52f/0x75a > > > [] dummy_file_permission+0x0/0x3 > > > [] do_sync_write+0xc9/0x10c > > > [] autoremove_wake_function+0x0/0x2e > > > [] set_next_entity+0x18/0x3a > > > [] vfs_write+0xad/0x136 > > > [] sys_write+0x45/0x6e > > > [] system_call_after_swapgs+0x7b/0x80 > > > > > > Mem-info: > > > Node 0 DMA per-cpu: > > > CPU 0: hi: 0, btch: 1 usd: 0 > > > CPU 1: hi: 0, btch: 1 usd: 0 > > > CPU 2: hi: 0, btch: 1 usd: 0 > > > CPU 3: hi: 0, btch: 1 usd: 0 > > > Node 0 DMA32 per-cpu: > > > CPU 0: hi: 186, btch: 31 usd: 153 > > > CPU 1: hi: 186, btch: 31 usd: 185 > > > CPU 2: hi: 186, btch: 31 usd: 141 > > > CPU 3: hi: 186, btch: 31 usd: 190 > > > Node 0 Normal per-cpu: > > > CPU 0: hi: 186, btch: 31 usd: 169 > > > CPU 1: hi: 186, btch: 31 usd: 185 > > > CPU 2: hi: 186, btch: 31 usd: 44 > > > CPU 3: hi: 186, btch: 31 usd: 116 > > > Node 1 Normal per-cpu: > > > CPU 0: hi: 186, btch: 31 usd: 175 > > > CPU 1: hi: 186, btch: 31 usd: 156 > > > CPU 2: hi: 186, btch: 31 usd: 33 > > > CPU 3: hi: 186, btch: 31 usd: 160 > > > Active:35627 inactive:1900080 dirty:48667 writeback:147697 unstable:0 > > > free:8797 slab:112757 mapped:1726 pagetables:391 bounce:0 > > > Node 0 DMA free:11996kB min:12kB low:12kB high:16kB active:0kB inactive:0kB present:11452kB pages_scanned:0 all_unreclaimable? yes > > > lowmem_reserve[]: 0 3000 4010 4010 > > > Node 0 DMA32 free:12336kB min:4276kB low:5344kB high:6412kB active:1592kB inactive:2834572kB present:3072160kB pages_scanned:0 all_unreclaimable? no > > > lowmem_reserve[]: 0 0 1010 1010 > > > Node 0 Normal free:2320kB min:1436kB low:1792kB high:2152kB active:14336kB inactive:973540kB present:1034240kB pages_scanned:0 all_unreclaimable? no > > > lowmem_reserve[]: 0 0 0 0 > > > Node 1 Normal free:8984kB min:5756kB low:7192kB high:8632kB active:126580kB inactive:3791952kB present:4136960kB pages_scanned:0 all_unreclaimable? no > > > lowmem_reserve[]: 0 0 0 0 > > > Node 0 DMA: 5*4kB 5*8kB 2*16kB 4*32kB 4*64kB 4*128kB 3*256kB 2*512kB 1*1024kB 0*2048kB 2*4096kB = 11996kB > > > Node 0 DMA32: 1301*4kB 17*8kB 1*16kB 1*32kB 1*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 1*2048kB 1*4096kB = 12236kB > > > Node 0 Normal: 311*4kB 0*8kB 1*16kB 3*32kB 1*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 0*2048kB 0*4096kB = 2060kB > > > Node 1 Normal: 1210*4kB 0*8kB 0*16kB 0*32kB 1*64kB 1*128kB 2*256kB 1*512kB 1*1024kB 1*2048kB 0*4096kB = 9128kB > > > 1901879 total pagecache pages > > > Swap cache: add 526500, delete 526485, find 153749/161350 > > > Free swap = 1999532kB > > > Total swap = 2000084kB > > > Free swap: 1999532kB > > > 2097152 pages of RAM > > > 29989 reserved pages > > > 1902596 pages shared > > > 15 pages swap cached > > > > -- > > ____________________________________________________________________ > > DI (FH) Raoul Bhatia M.Sc. email. r.bhatia@ipax.at > > Technischer Leiter > > > > IPAX - Aloy Bhatia Hava OEG web. http://www.ipax.at > > Barawitzkagasse 10/2/2/11 email. office@ipax.at > > 1190 Wien tel. +43 1 3670030 > > FN 277995t HG Wien fax. +43 1 3670030 15 > > ____________________________________________________________________ > > > > -- > Dave Chinner > Principal Engineer > SGI Australian Software Group -- Jens Axboe From owner-xfs@oss.sgi.com Thu Apr 24 05:48:34 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 24 Apr 2008 05:48:52 -0700 (PDT) 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 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 m3OCmWxe020677 for ; Thu, 24 Apr 2008 05:48:34 -0700 X-ASG-Debug-ID: 1209041353-0c98016f0000-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 EB0A8E123B for ; Thu, 24 Apr 2008 05:49:13 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id mZ21GULk1BlVDW3x for ; Thu, 24 Apr 2008 05:49:13 -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 2A39218004B6B; Thu, 24 Apr 2008 07:49:12 -0500 (CDT) Message-ID: <481081CE.1080500@sandeen.net> Date: Thu, 24 Apr 2008 07:49:18 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Michael Darling CC: David Chinner , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) Subject: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) References: <4810062F.50100@sandeen.net> <20080424053358.GW103491721@sgi.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1209041354 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.1, rules version 3.1.48700 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15575 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Michael Darling wrote: > Eric, for the numbers you provided, are you using a single drive, > software raid, or hardware raid? If a hardware raid, is it a 3ware card? it's a simple partition on a sata drive. > I hadn't seen the nobarrier mount option before. Using that changes > sequential creates from about 190/second to about 2500/second, and > changes sequential deletes from about 170/second to about 3700/second. I wasn't recommending, necessarily, that you use it, but was just looking for bottlenecks... > I don't yet have a BBU for the 3ware card, but would certainly get one > if we go with the 3ware card before we start putting real data on the > raid. Am I right that with a BBU unit and a battery backup for the > server as a whole, that nobarrier would be safe to use? > > Not using nobarrier, but using logbsize 256k changes sequential creates > from about 190/second to about 270/second. So, it's an improvement, but > no where near where a software raid performs (1600/second) or where the > hardware raid performs with nobarrier. Default mkfs & mount w/ 256k logbufs: xfs,256k logbuf: 1353/s > On Thu, Apr 24, 2008 at 1:33 AM, David Chinner > wrote: > > So I played with this a little on 2.6.25, on plain partitions. > > > > I saw similar numbers; for example, sequential creates: > > > > ext3: 23698/s > > xfs: 319/s > > xfs,nobarrier: 4478/s > > And with logbsize=256k? > > Cheers, > > Dave. From owner-xfs@oss.sgi.com Thu Apr 24 07:20:06 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 24 Apr 2008 07:20:24 -0700 (PDT) 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 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 m3OEK3Ol025067 for ; Thu, 24 Apr 2008 07:20:06 -0700 X-ASG-Debug-ID: 1209046845-5f18023f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from lucidpixels.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1C63815CCDE7 for ; Thu, 24 Apr 2008 07:20:45 -0700 (PDT) Received: from lucidpixels.com (lucidpixels.com [75.144.35.66]) by cuda.sgi.com with ESMTP id fkVkfgvwXQaAUPTg for ; Thu, 24 Apr 2008 07:20:45 -0700 (PDT) Received: by lucidpixels.com (Postfix, from userid 1001) id 750FA1C00026E; Thu, 24 Apr 2008 10:20:45 -0400 (EDT) Date: Thu, 24 Apr 2008 10:20:45 -0400 (EDT) From: Justin Piszcz To: Eric Sandeen cc: Michael Darling , David Chinner , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) Subject: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) In-Reply-To: <481081CE.1080500@sandeen.net> Message-ID: References: <4810062F.50100@sandeen.net> <20080424053358.GW103491721@sgi.com> <481081CE.1080500@sandeen.net> User-Agent: Alpine 1.10 (DEB 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Barracuda-Connect: lucidpixels.com[75.144.35.66] X-Barracuda-Start-Time: 1209046846 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.1, rules version 3.1.48706 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15576 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jpiszcz@lucidpixels.com Precedence: bulk X-list: xfs On Thu, 24 Apr 2008, Eric Sandeen wrote: > Michael Darling wrote: >> Eric, for the numbers you provided, are you using a single drive, >> software raid, or hardware raid? If a hardware raid, is it a 3ware card? > > it's a simple partition on a sata drive. > >> I hadn't seen the nobarrier mount option before. Using that changes >> sequential creates from about 190/second to about 2500/second, and >> changes sequential deletes from about 170/second to about 3700/second. > > I wasn't recommending, necessarily, that you use it, but was just > looking for bottlenecks... > >> I don't yet have a BBU for the 3ware card, but would certainly get one >> if we go with the 3ware card before we start putting real data on the >> raid. Am I right that with a BBU unit and a battery backup for the >> server as a whole, that nobarrier would be safe to use? >> >> Not using nobarrier, but using logbsize 256k changes sequential creates >> from about 190/second to about 270/second. So, it's an improvement, but >> no where near where a software raid performs (1600/second) or where the >> hardware raid performs with nobarrier. > > Default mkfs & mount w/ 256k logbufs: > > xfs,256k logbuf: 1353/s > >> On Thu, Apr 24, 2008 at 1:33 AM, David Chinner > > wrote: >> > So I played with this a little on 2.6.25, on plain partitions. >> > >> > I saw similar numbers; for example, sequential creates: >> > >> > ext3: 23698/s >> > xfs: 319/s >> > xfs,nobarrier: 4478/s >> >> And with logbsize=256k? >> >> Cheers, >> >> Dave. > > Which program is this that you are using to measure this, bonnie++, or? From owner-xfs@oss.sgi.com Thu Apr 24 07:56:28 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 24 Apr 2008 07:56:46 -0700 (PDT) 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 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 m3OEuQ1x026952 for ; Thu, 24 Apr 2008 07:56:28 -0700 X-ASG-Debug-ID: 1209049028-01eb038c0000-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 DE334ABFA3B for ; Thu, 24 Apr 2008 07:57:08 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id FAhX5q6F8cEF2L2p for ; Thu, 24 Apr 2008 07:57:08 -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 3E5E218004B6C; Thu, 24 Apr 2008 09:57:07 -0500 (CDT) Message-ID: <48109FC9.9010708@sandeen.net> Date: Thu, 24 Apr 2008 09:57:13 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Justin Piszcz CC: Michael Darling , David Chinner , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) Subject: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) References: <4810062F.50100@sandeen.net> <20080424053358.GW103491721@sgi.com> <481081CE.1080500@sandeen.net> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1209049028 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.1, rules version 3.1.48707 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15577 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Justin Piszcz wrote: > Which program is this that you are using to measure this, bonnie++, or? yes, bonnie++ -Eric From owner-xfs@oss.sgi.com Thu Apr 24 08:39:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 24 Apr 2008 08:39:12 -0700 (PDT) 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.0 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 m3OFd34c001755 for ; Thu, 24 Apr 2008 08:39:04 -0700 X-ASG-Debug-ID: 1209051580-4c7a032e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from rn-out-0910.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C035D15CDF64 for ; Thu, 24 Apr 2008 08:39:40 -0700 (PDT) Received: from rn-out-0910.google.com (rn-out-0910.google.com [64.233.170.184]) by cuda.sgi.com with ESMTP id BfZo3afZS8n9ROS5 for ; Thu, 24 Apr 2008 08:39:40 -0700 (PDT) Received: by rn-out-0910.google.com with SMTP id e24so1499976rng.8 for ; Thu, 24 Apr 2008 08:39:39 -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:content-transfer-encoding:content-disposition:references; bh=GKzaIvBGcRurTbZxZt3gmfjHycoj2+Na50SGrHkHJmw=; b=yG0s1LEBzJbFBn1KsDQQVitCXvKDjn+8VIIs7lt8DUxL8q26jenre4ID4MEKEQzgbRFDgvGoWgBYdk+JJ465sH6imMT8yyR/wI/6dFCSqBYZ/ndiU72nWFuKsDZIEEpm7u3ShCdJ8iZQEbEqohr7YiDW7tNSaNkmmbyJsgDQeX0= 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:content-transfer-encoding:content-disposition:references; b=BFt4aMNTLiQirpob3WB+FwK59d0X/MCnzepU9o5cZtsobAkG6UDp9HKxQr9QYuqHG6AVjHd5NSdkiKZY1r/5ilDkmkXanC8KyniCHpqBh4UFPtwV+2GzZHO7BTf5iYVznt0MOxftnDdbemaVy/PZzkguIvzVIxQ6UgnrFezNJCQ= Received: by 10.140.193.16 with SMTP id q16mr1342254rvf.173.1209051579313; Thu, 24 Apr 2008 08:39:39 -0700 (PDT) Received: by 10.140.171.3 with HTTP; Thu, 24 Apr 2008 08:39:39 -0700 (PDT) Message-ID: Date: Thu, 24 Apr 2008 11:39:39 -0400 From: "Michael Darling" To: "David Chinner" , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) Subject: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) In-Reply-To: <20080424063102.GX103491721@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <4810062F.50100@sandeen.net> <20080424053358.GW103491721@sgi.com> <20080424063102.GX103491721@sgi.com> X-Barracuda-Connect: rn-out-0910.google.com[64.233.170.184] X-Barracuda-Start-Time: 1209051583 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.1, rules version 3.1.48710 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15578 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: darlingm@gmail.com Precedence: bulk X-list: xfs On Thu, Apr 24, 2008 at 2:31 AM, David Chinner wrote: > Are you using write caching on the RAID card? If yes, then you need a BBU > for the card if you want to enable the write cache safely. I am using write caching. Without write caching, the 3ware 9650SE-4LMPL crawls along at 5MB/sec writing. 3ware tech support said awful write performance without write caching to a RAID 5 was typical, that write caching really needs to be on for a RAID 5. Is nobarrier safe to use, as long as before putting real data on the RAID I obtain a BBU for the 3ware card, in addition to the existing battery backup for the server as a whole? On Thu, Apr 24, 2008 at 10:20 AM, Justin Piszcz wrote: > Which program is this that you are using to measure this, bonnie++, or? I'm also using bonnie++, v1.03 from http://www.coker.com.au/bonnie++/ From owner-xfs@oss.sgi.com Thu Apr 24 10:17:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 24 Apr 2008 10:17:44 -0700 (PDT) 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 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 m3OHHO4Z007956 for ; Thu, 24 Apr 2008 10:17:26 -0700 X-ASG-Debug-ID: 1209057485-0854038f0000-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 64D4AE3324 for ; Thu, 24 Apr 2008 10:18:05 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id j7deiZIpJEQfeWal for ; Thu, 24 Apr 2008 10:18:05 -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 4510218004B6C; Thu, 24 Apr 2008 12:18:05 -0500 (CDT) Message-ID: <4810C0D3.1070107@sandeen.net> Date: Thu, 24 Apr 2008 12:18:11 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Michael Darling CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) Subject: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1209057486 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.1, rules version 3.1.48718 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15579 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Michael Darling wrote: > I am preparing a new server, and benchmarking EXT3 against XFS, both using > software RAID and hardware RAID using a 3ware 9650SE-4LPML. > > Using bonnie++ as a benchmark, I am seeing significant performance boosts in > my block sequential reads and writes moving from EXT3 to XFS. I am aware > that XFS won't create and delete files as quickly as EXT3, however I am > seeing drops from 29455/second to 1957/second using software RAID, and from > 32524/second to 189/second using hardware RAID. I'm not sure if when using > software raid, if creating and deleting files should drop to 6.6% of EXT3. > But, what I'm pretty sure of, is when using hardware raid, that creating and > deleting files shouldn't drop to 0.6% of EXT3. Chris Mason reminded me that bonnie++ may not be creating enough files to actually cause much if any IO on ext3; you might play with the -n option to get it to the point where it's actually doing a significant number of creates (I don't know what the default is offhand... checks source... it's 16k maybe?) but more sustained creation might be interesting. -Eric From owner-xfs@oss.sgi.com Thu Apr 24 12:39:47 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 24 Apr 2008 12:40:09 -0700 (PDT) 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=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 m3OJddJE022393 for ; Thu, 24 Apr 2008 12:39:47 -0700 X-ASG-Debug-ID: 1209066017-133801b80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from wilson.telenet-ops.be (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F2B27AC492E for ; Thu, 24 Apr 2008 12:40:18 -0700 (PDT) Received: from wilson.telenet-ops.be (wilson.telenet-ops.be [195.130.132.42]) by cuda.sgi.com with ESMTP id dE7WSBnXIHAsv8Rh for ; Thu, 24 Apr 2008 12:40:18 -0700 (PDT) Received: from localhost (localhost.localdomain [127.0.0.1]) by wilson.telenet-ops.be (Postfix) with SMTP id 58E5834072; Thu, 24 Apr 2008 21:40:17 +0200 (CEST) Received: from anakin.of.borg (78-21-204-88.access.telenet.be [78.21.204.88]) by wilson.telenet-ops.be (Postfix) with ESMTP id 2DDEB34057; Thu, 24 Apr 2008 21:40:17 +0200 (CEST) Received: from anakin.of.borg (localhost [127.0.0.1]) by anakin.of.borg (8.14.2/8.14.2/Debian-3) with ESMTP id m3OJeG8g028075 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 24 Apr 2008 21:40:16 +0200 Received: from localhost (geert@localhost) by anakin.of.borg (8.14.2/8.14.2/Submit) with ESMTP id m3OJeF3g028057; Thu, 24 Apr 2008 21:40:15 +0200 X-Authentication-Warning: anakin.of.borg: geert owned process doing -bs Date: Thu, 24 Apr 2008 21:40:15 +0200 (CEST) From: Geert Uytterhoeven To: Christoph Hellwig cc: linux-next@vger.kernel.org, LKML , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: linux-next: Tree for April 24 Subject: Re: linux-next: Tree for April 24 In-Reply-To: <20080424173626.bcd088e7.sfr@canb.auug.org.au> Message-ID: References: <20080424173626.bcd088e7.sfr@canb.auug.org.au> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Barracuda-Connect: wilson.telenet-ops.be[195.130.132.42] X-Barracuda-Start-Time: 1209066020 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.1, rules version 3.1.48725 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15580 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: geert@linux-m68k.org Precedence: bulk X-list: xfs On Thu, 24 Apr 2008, Stephen Rothwell wrote: > Status of my local build tests will be at > http://kisskb.ellerman.id.au/linux-next. If maintainers want to give > advice about cross compilers/configs that work, we are always open to add > more builds. For the second day in a row, m68k builds failed because of fs/xfs/xfs_fsops.c:527: error: implicit declaration of function 'xfs_icsb_sync_counters_locked' make[3]: *** [fs/xfs/xfs_fsops.o] Error 1 According to http://www.linux.sgi.com/archives/xfs/2008-03/msg00202.html, there's a forward declaration for xfs_icsb_sync_counters_locked() only if HAVE_PERCPU_SB is defined, i.e. for CONFIG_SMP. This break UP architectures. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds From owner-xfs@oss.sgi.com Thu Apr 24 12:44:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 24 Apr 2008 12:44:37 -0700 (PDT) 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 m3OJiHhC022795 for ; Thu, 24 Apr 2008 12:44:25 -0700 X-ASG-Debug-ID: 1209066298-7628011f0000-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 38E2615D37AD for ; Thu, 24 Apr 2008 12:44:58 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id w7z6tqgrzaZPrBP8 for ; Thu, 24 Apr 2008 12:44:58 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jp7NJ-0005yR-Np; Thu, 24 Apr 2008 19:44:57 +0000 Date: Thu, 24 Apr 2008 15:44:57 -0400 From: Christoph Hellwig To: Geert Uytterhoeven Cc: Christoph Hellwig , linux-next@vger.kernel.org, LKML , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: linux-next: Tree for April 24 Subject: Re: linux-next: Tree for April 24 Message-ID: <20080424194457.GA22805@infradead.org> References: <20080424173626.bcd088e7.sfr@canb.auug.org.au> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209066299 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.1, rules version 3.1.48726 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15581 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, Apr 24, 2008 at 09:40:15PM +0200, Geert Uytterhoeven wrote: > On Thu, 24 Apr 2008, Stephen Rothwell wrote: > > Status of my local build tests will be at > > http://kisskb.ellerman.id.au/linux-next. If maintainers want to give > > advice about cross compilers/configs that work, we are always open to add > > more builds. > > For the second day in a row, m68k builds failed because of > > fs/xfs/xfs_fsops.c:527: error: implicit declaration of function 'xfs_icsb_sync_counters_locked' > make[3]: *** [fs/xfs/xfs_fsops.o] Error 1 Eric already submitted a patch on the xfs list, that should make it to the tree ASAP. From owner-xfs@oss.sgi.com Thu Apr 24 12:55:24 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 24 Apr 2008 12:55:40 -0700 (PDT) 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 m3OJtHE9023974 for ; Thu, 24 Apr 2008 12:55:23 -0700 X-ASG-Debug-ID: 1209066959-77d501980000-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 C496F15D364A for ; Thu, 24 Apr 2008 12:55:59 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id v8CjjBDAlZeNeQBZ for ; Thu, 24 Apr 2008 12:55:59 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jp7Xz-0007Mq-Bx; Thu, 24 Apr 2008 19:55:59 +0000 Date: Thu, 24 Apr 2008 15:55:59 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs-oss X-ASG-Orig-Subj: Re: [PATCH] fix non-smp xfs build Subject: Re: [PATCH] fix non-smp xfs build Message-ID: <20080424195559.GA28280@infradead.org> References: <480EB291.5030205@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <480EB291.5030205@sandeen.net> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209066959 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.1, rules version 3.1.48728 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15582 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Tue, Apr 22, 2008 at 10:52:49PM -0500, Eric Sandeen wrote: > xfs_reserve_blocks() calls xfs_icsb_sync_counters_locked(), > which is not defined if !CONFIG_SMP/!HAVE_PERCPU_SB Looks good. Thanks for fixing this up! From owner-xfs@oss.sgi.com Thu Apr 24 14:57:24 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 24 Apr 2008 14:58:02 -0700 (PDT) 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.0 required=5.0 tests=BAYES_50,HTML_MESSAGE autolearn=no 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 m3OLvKEh030679 for ; Thu, 24 Apr 2008 14:57:24 -0700 X-ASG-Debug-ID: 1209074280-2e0f02640000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail1.allegisgroup.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1FCB115D4017 for ; Thu, 24 Apr 2008 14:58:00 -0700 (PDT) Received: from mail1.allegisgroup.com (mail1.allegisgroup.com [216.152.100.65]) by cuda.sgi.com with ESMTP id uAYq6OHl1Vn4OjXF for ; Thu, 24 Apr 2008 14:58:00 -0700 (PDT) Received: from ag00-exmbx01.allegisgroup.com ([10.0.38.67]) by mail1.allegisgroup.com with Microsoft SMTPSVC(6.0.3790.1830); Thu, 24 Apr 2008 17:57:59 -0400 Content-Transfer-Encoding: 7bit X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.1830 Content-Class: urn:content-classes:message Importance: normal Priority: normal MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C8A656.428F07AD" X-ASG-Orig-Subj: Aerotek Subject: Aerotek Date: Thu, 24 Apr 2008 17:57:52 -0400 Message-ID: <66C349CAA42D054AB1F2AA71B1A4FE555C04B8@AG00-EXMBX01.allegisgroup.com> X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Thread-Topic: Aerotek thread-index: AcimVj4WWYdn+d37QYWXp+oo7X8Ktg== From: "Bracy, Caron" To: , , , , , , , , , X-OriginalArrivalTime: 24 Apr 2008 21:57:59.0969 (UTC) FILETIME=[42E3E910:01C8A656] X-Barracuda-Connect: mail1.allegisgroup.com[216.152.100.65] X-Barracuda-Start-Time: 1209074283 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.76 X-Barracuda-Spam-Status: No, SCORE=-1.76 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_FONT_BIG, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48736 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.26 HTML_FONT_BIG BODY: HTML tag for a big font size X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15583 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: cbracy@aerotek.com Precedence: bulk X-list: xfs This is a multi-part message in MIME format. ------_=_NextPart_001_01C8A656.428F07AD Content-Type: multipart/alternative; boundary="----_=_NextPart_002_01C8A656.428F07AD" ------_=_NextPart_002_01C8A656.428F07AD Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hello, =20 My name is Caron Bracy and I'm a recruiter for Aerotek Companies, the country's largest privately held staffing service. We are constantly networking with people in the technical markets and right now I am looking to hire a Verification Engineer/Manager for my client site in Bangalore, India. After reviewing your profile, I wanted to know if you could possibly refer me someone who you think might be interested in hearing about an opportunity like this. I can be reached at (408)367-6926 or by email at cbracy@aerotek.com , please feel free to contact me directly if you have any questions as well. I appreciate any assistance you can provide!=20=20=20 =20 Best regards,=20 =20 =20 Caron Bracy Recruiter Aerotek Inc. 2099 Gateway Place Suite 750 San Jose, CA 95110 =20 * Work: 408-367-6926 Fax: 408-367-6890 * E-mail: cbracy@aerotek.com=20=20 People. Fit. Perfectly. (r)=20 =20 ___________________________________________________________________________= _________________________ This electronic mail (including any attachments) may contain information th= at is privileged, confidential, and/or otherwise protected from disclosure = to anyone other than its intended recipient(s). Any dissemination or use of= this electronic email or its contents (including any attachments) by perso= ns other than the intended recipient(s) is strictly prohibited. If you have= received this message in error, please notify us immediately by reply emai= l so that we may correct our internal records. Please then delete the origi= nal message (including any attachments) in its entirety. Thank you. ------_=_NextPart_002_01C8A656.428F07AD Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Hello,

 

My name is Caron Bracy and I’m a recruiter for Aerotek Compan= ies, the country’s largest privately held staffing service.  We are constantly networking with people in the technical markets and right now I = am looking to hire a Verification Engineer/Manager for my client site in Bangalore, India.  After reviewing your profile, I wanted to know if you could possibly refer = me someone who you think might be interested in hearing about an opportunity like this.  I can be reached at (408)367-6926 or by email at cbracy@aerotek.com , please feel fre= e to contact me directly if you have any questions as well. I appreciate any assistance you can provide!  

 

Best regards,

 

 

Caron Bracy

Recruiter

Aerotek Inc.

2099 Gateway Place= Suite 750

San Jose, CA 95110

 

( Work: 408-367-6926

Fax: 408-367-6890

* <= /span>E-mail: cbracy@aerotek.com  <= o:p>

P= eople. Fit. Perfectly. ®

 



This electronic mail (including any attachments) may cont= ain information that is privileged, confidential, and/or otherwise protecte= d from disclosure to anyone other than its intended recipient(s). Any disse= mination or use of this electronic email or its contents (including any att= achments) by persons other than the intended recipient(s) is strictly prohi= bited. If you have received this message in error, please notify us immedia= tely by reply email so that we may correct our internal records. Please the= n delete the original message (including any attachments) in its entirety. = Thank you. ------_=_NextPart_002_01C8A656.428F07AD-- ------_=_NextPart_001_01C8A656.428F07AD Content-Type: application/msword; name="Verification engineer.doc" Content-Transfer-Encoding: base64 Content-Description: Verification engineer.doc Content-Disposition: attachment; filename="Verification engineer.doc" 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAAB AAAANAAAAAAAAAAAEAAANgAAAAEAAAD+////AAAAADUAAAD///////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// ///////////////////////spcEAI2AJBAAA8BK/AAAAAAAAEAAAAAAABgAA tQ4AAA4AYmpiam2lbaUAAAAAAAAAAAAAAAAAAAAAAAAJBBYALhwAAA/PAAAP zwAAtQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//w8AAAAAAAAA AAD//w8AAAAAAAAAAAD//w8AAAAAAAAAAAAAAAAAAAAAAKQAAAAAAKQDAAAA AAAApAMAAKQDAAAAAAAApAMAAAAAAACkAwAAAAAAAKQDAAAAAAAApAMAABQA AAAAAAAAAAAAALgDAAAAAAAAwAgAAAAAAADACAAAAAAAAMAIAAAAAAAAwAgA AAwAAADMCAAAJAAAALgDAAAAAAAArwsAALYAAAD8CAAAAAAAAPwIAAAAAAAA /AgAAAAAAAD8CAAAAAAAAPwIAAAAAAAA/AgAAAAAAAD8CAAAAAAAAPwIAAAA AAAALgsAAAIAAAAwCwAAAAAAADALAAAAAAAAMAsAAAAAAAAwCwAAAAAAADAL AAAAAAAAMAsAACQAAABlDAAAaAIAAM0OAACWAAAAVAsAABUAAAAAAAAAAAAA AAAAAAAAAAAApAMAAAAAAAD8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8CAAA AAAAAPwIAAAAAAAA/AgAAAAAAAD8CAAAAAAAAFQLAAAAAAAAAAAAAAAAAACk AwAAAAAAAKQDAAAAAAAA/AgAAAAAAAAAAAAAAAAAAPwIAAAAAAAAaQsAABYA AABaCQAAAAAAAFoJAAAAAAAAWgkAAAAAAAD8CAAACgAAAKQDAAAAAAAA/AgA AAAAAACkAwAAAAAAAPwIAAAAAAAALgsAAAAAAAAAAAAAAAAAAFoJAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAA/AgAAAAAAAAuCwAAAAAAAAAAAAAAAAAAWgkAAAAAAAAAAAAAAAAAAFoJ AAAAAAAApAMAAAAAAACkAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWgkAAAAAAAD8CAAA AAAAAPAIAAAMAAAAcK1ui6qgyAEAAAAAAAAAAMAIAAAAAAAABgkAAAoAAABa CQAAAAAAAAAAAAAAAAAAkgoAAJwAAAB/CwAAMAAAAK8LAAAAAAAAWgkAAAAA AABjDwAAAAAAABAJAABAAAAAYw8AAAAAAABaCQAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAABaCQAAFAAAAGMPAAAAAAAAAAAAAAAAAACkAwAAAAAAAG4JAAAk AQAA/AgAAAAAAAD8CAAAAAAAAFoJAAAAAAAA/AgAAAAAAAD8CAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AgAAAAAAAD8CAAAAAAA APwIAAAAAAAAVAsAAAAAAABUCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAUAkAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAPwIAAAAAAAA/AgAAAAAAAD8CAAAAAAAAK8LAAAAAAAA/AgAAAAA AAD8CAAAAAAAAPwIAAAAAAAA/AgAAAAAAAAAAAAAAAAAALgDAAAAAAAAuAMA AAAAAAC4AwAAhAIAADwGAACEAgAAuAMAAAAAAAC4AwAAAAAAALgDAAAAAAAA PAYAAAAAAAC4AwAAAAAAALgDAAAAAAAAuAMAAAAAAACkAwAAAAAAAKQDAAAA AAAApAMAAAAAAACkAwAAAAAAAKQDAAAAAAAApAMAAAAAAAD/////AAAAAAIA DAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFZlcmlm aWNhdGlvbiBlbmdpbmVlcnMvTWFuYWdlcgcHSm9iIERlc2NyaXB0aW9uOgcH QXMgYSBWZXJpZmljYXRpb24gTWFuYWdlciB5b3Ugd2lsbCBiZSBjb250cmli dXRpbmcvbGVhZGluZyB0byB0aGUgdmVyaWZpY2F0aW9uIGVmZm9ydCBvZiBh IGNvbXBsZXggY2hpcCwgY29yZSBhbmQvb3IgYmxvY2tzLiBZb3Ugd2lsbCBk ZWZpbmUgY2hpcCBsZXZlbCB2ZXJpZmljYXRpb24gc3RyYXRlZ2llcywgdGVz dCBwbGFubmluZywgYW5kIGRldmVsb3AgYWxsIG5lY2Vzc2FyeSB0b29scyBh bmQgc2NyaXB0cyB0byBlbmFibGUgc3lzdGVtLWxldmVsIHRlc3RpbmcgaW4g YW4gYXV0b21hdGVkIGZhc2hpb24uIFlvdSB3aWxsIGRyaXZlIHRoZSBibG9j ay9jb3JlIHRocm91Z2ggY292ZXJhZ2UgYW5hbHlzaXMgYW5kIGNvdmVyYWdl IG9wdGltaXphdGlvbiB1bnRpbCBjb3ZlcmFnZSBnb2FscyBhcmUgbWV0L2V4 Y2VlZGVkLiBZb3Ugd2lsbCB2ZXJpZnkgZm9yIGludGVyYWN0aW9ucywgY29u bmVjdGl2aXR5LCBidXMgY2VydGlmaWNhdGlvbiBldGMgZm9yIHJvYnVzdCB2 ZXJpZmljYXRpb24uIFlvdSB3aWxsIHdvcmsgd2l0aCB0aGUgU3lzdGVtcy9Q b3N0IFNpL0RyaXZlciBkZXZlbG9wbWVudCB0ZWFtIHRvIGxldmVyYWdlIHNv ZnR3YXJlIGRldmVsb3BtZW50IG9uIHN5c3RlbSBsZXZlbCB2ZXJpZmljYXRp b24uIAsLRXhwZXJpZW5jZSB3aXRoIHZlcmlmeWluZyBTb0Mgd2l0aCBlbWJl ZGRlZCBSSVNDL0FSTS9EU1AgcHJvY2Vzc29yIHZlcmlmaWNhdGlvbiwgY29t bXVuaWNhdGlvbnMvIG5ldHdvcmtpbmcgQVNJQ3MgaXMgYSBwbHVzLiBSVEwg ZGVzaWduIGV4cGVyaWVuY2UgaXMgYWxzbyBhIHBsdXMuIEtub3dsZWRnZSBv ZiB3aXJlbGVzcy93aXJlZCBjb21tdW5pY2F0aW9ucyBhbmQgcHJvdG9jb2xz IG9yIGdyYXBoaWNzL3ZpZGVvIG11bHRpLW1lZGlhIGEgcGx1cy4gQXMgYW4g aW5kaXZpZHVhbCBjb250cmlidXRvci9tYW5hZ2VyLCB5b3Ugc2hvdWxkIHRh a2UgbG90IG9mIGluaXRpYXRpdmUgdG8gdGFrZSB0aGUgdmVyaWZpY2F0aW9u IGF1dG9tYXRpb24gdG8gdGhlIG5leHQgbGV2ZWwuIENhbmRpZGF0ZSBtdXN0 IGhhdmUgZ29vZCBvcmdhbml6YXRpb24gYW5kIHRpbWUgYW5kIHByb2plY3Qg bWFuYWdlbWVudCBza2lsbHMgd2l0aCBleGNlbGxlbnQgd3JpdHRlbiBhbmQg b3JhbCBjb21tdW5pY2F0aW9ucyBza2lsbHMuBwdTa2lsbHMvRXhwZXJpZW5j ZToHB1F1YWxpZmljYXRpb25zIGFuZCBleHBlcmllbmNlOiALTWluaW11bSAx MCsgeWVhcnMgZXhwZXJpZW5jZSBpbiBBU0lDL1N5c3RlbSB2ZXJpZmljYXRp b24gC0V4cGVydGlzZSBpbiB2ZXJpZnlpbmcgY29tcGxleCBkZXNpZ25zIGZy b20gc3lzdGVtIGFzIHdlbGwgYXMgYmxvY2sgbGV2ZWwsIHRocm91Z2ggZGVz aWduIGZsb3cuC0RvbWFpbiBleHBlcmllbmNlIGluIGNvbW11bmljYXRpb25z IG1vZGVtcywgbXVsdGktbWVkaWEsIHBlcmlwaGVyYWxzLCBzZWN1cml0eSBk ZXNpcmVkLgtTdHJvbmcga25vd2xlZGdlIG9mIEhWTHMgKFZFUkEvZSksIEhE THMgKFZlcmlsb2cvVkhETC9TeXN0ZW1WZXJpbG9nKSwgQy9DKysuBwdBZGRp dGlvbmFsIFNraWxsczoHB6AHB0VkdWNhdGlvbiBSZXF1aXJlbWVudHM6BwdS ZXF1aXJlZDogQmFjaGVsb3IncywgRWxlY3RyaWNhbCBFbmdpbmVlcmluZwtQ cmVmZXJyZWQ6IE1hc3RlcidzLCBFbGVjdHJpY2FsIEVuZ2luZWVyaW5nBweg DQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAYAAB8IAAAgCAAAMQgAADIIAADjCAAA8AgA AM0LAADUCwAAswwAALQMAADHDAAAyAwAAO4NAAD0DQAA/Q0AAAMOAAAnDgAA KA4AADsOAAA8DgAAPg4AAD8OAABXDgAAWA4AALEOAACyDgAAsw4AALQOAAC1 DgAA/PT89Pzw/PD89Pz0/PD88Pz0/PT89Pz0/PTi/N4AAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAABhZonGqfAAAaFmgZUAEAQ0oUAE9KAgBRSgIAXkoCAGFK FAAABhZo8E+SAAAOFmgZUAEAQ0oUAGFKFAAABhZoGVABAB0ABgAAHwgAACAI AAAxCAAAMggAALMMAAC0DAAA+QAAAAAAAAAAAAAAALsAAAAAAAAAAAAAAAD5 AAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAHUAAAAAAAAAAAAAAAA3AAAAAAAA AAAAAAAAAAAAAD4AAGtkzAAAABYkARckAUlmAQAAAAjWGgAB0//pJYACAAAA AAAAAAAAAAAAAAAAAAAAFPYDFiYVNgEa1gQAAAD/G9YEAAAA/xzWBAAAAP8d 1gQAAAD/MtYGAAEPAy0AM9YGAAEPAwAANNYGAAEPAwAAYfYDAAB5dPBPkgAI AAAUpPAAFiQBSWYBAAAAPgAAa2RmAAAAFiQBFyQBSWYBAAAACNYaAAHT/+kl gAIAAAAAAAAAAAAAAAAAAAAAAAAU9gMWJhU2ARrWBAAAAP8b1gQAAAD/HNYE AAAA/x3WBAAAAP8y1gYAAQ8DLQAz1gYAAQ8DAAA01gYAAQ8DAABh9gMAAHl0 8E+SAD4AAGtkAAAAABYkARckAUlmAQAAAAjWGgAB0//pJYACAAAAAAAAAAAA AAAAAAAAAAAAFPYDFiYVNgEa1gQAAAD/G9YEAAAA/xzWBAAAAP8d1gQAAAD/ MtYGAAEPAy0AM9YGAAEPAwAANNYGAAEPAwAAYfYDAAB5dPBPkgAGAAAWJAFJ ZgEAAAAABgAGAAC1DgAA/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAABAQAAQEBtAwAAMcMAADIDAAAJw4AACgOAAA7 DgAAPA4AAD4OAAD5AAAAAAAAAAAAAAAAuwAAAAAAAAAAAAAAAPkAAAAAAAAA AAAAAAB9AAAAAAAAAAAAAAAA+QAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAD5 AAAAAAAAAAAAAAAAAAAAPgAAa2T+AQAAFiQBFyQBSWYBAAAACNYaAAHT/+kl gAIAAAAAAAAAAAAAAAAAAAAAAAAU9gMWJhU2ARrWBAAAAP8b1gQAAAD/HNYE AAAA/x3WBAAAAP8y1gYAAQ8DLQAz1gYAAQ8DAAA01gYAAQ8DAABh9gMAAHl0 8E+SAD4AAGtkmAEAABYkARckAUlmAQAAAAjWGgAB0//pJYACAAAAAAAAAAAA AAAAAAAAAAAAFPYDFiYVNgEa1gQAAAD/G9YEAAAA/xzWBAAAAP8d1gQAAAD/ MtYGAAEPAy0AM9YGAAEPAwAANNYGAAEPAwAAYfYDAAB5dPBPkgA+AABrZDIB AAAWJAEXJAFJZgEAAAAI1hoAAdP/6SWAAgAAAAAAAAAAAAAAAAAAAAAAABT2 AxYmFTYBGtYEAAAA/xvWBAAAAP8c1gQAAAD/HdYEAAAA/zLWBgABDwMtADPW BgABDwMAADTWBgABDwMAAGH2AwAAeXTwT5IABgAAFiQBSWYBAAAAAAc+DgAA Pw4AAFcOAABYDgAAsQ4AALIOAAC0DgAAwQAAAAAAAAAAAAAAALsAAAAAAAAA AAAAAAB9AAAAAAAAAAAAAAAAuwAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAA6 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAABnZBlQAQA+AABrZDADAAAWJAEX JAFJZgEAAAAI1hoAAdP/6SWAAgAAAAAAAAAAAAAAAAAAAAAAABT2AxYmFTYB GtYEAAAA/xvWBAAAAP8c1gQAAAD/HdYEAAAA/zLWBgABDwMtADPWBgABDwMA ADTWBgABDwMAAGH2AwAAeXTwT5IAPgAAa2TKAgAAFiQBFyQBSWYBAAAACNYa AAHT/+klgAIAAAAAAAAAAAAAAAAAAAAAAAAU9gMWJhU2ARrWBAAAAP8b1gQA AAD/HNYEAAAA/x3WBAAAAP8y1gYAAQ8DLQAz1gYAAQ8DAAA01gYAAQ8DAABh 9gMAAHl08E+SAAYAABYkAUlmAQAAAD4AAGtkZAIAABYkARckAUlmAQAAAAjW GgAB0//pJYACAAAAAAAAAAAAAAAAAAAAAAAAFPYDFiYVNgEa1gQAAAD/G9YE AAAA/xzWBAAAAP8d1gQAAAD/MtYGAAEPAy0AM9YGAAEPAwAANNYGAAEPAwAA YfYDAAB5dPBPkgAABrQOAAC1DgAA/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABLAAxkGgBH7DQLyCw4D0h sAgHIrAIByOQoAUkkKAFJbAAABew0AIYsNACDJDQAgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AABkABYkARckAUlmAQAAAAGW0/8hdgABaAE11gUAAQMWJiN2AAEWJjpWCwAU 9gMWJhU2ARf2AAAALNYDAAEBNdYFAAEBAAAy1gYAAQ8DLQAz1gYAAQ8DAAA0 1gYAAQoDAAB5dPBPkgBkABYkARckAUlmAQAAAAGW0/8hdgABaAE11gUAAQMW JiN2AAEWJjpWCwAU9gMWJhU2ARf2AAAALNYDAAEBNdYFAAEBAAAy1gYAAQ8D LQAz1gYAAQ8DAAA01gYAAQoDAAB5dPBPkgBkABYkARckAUlmAQAAAAGW0/8h dgABaAE11gUAAQMWJiN2AAEWJjpWCwAU9gMWJhU2ARf2AAAALNYDAAEBNdYF AAEBAAAy1gYAAQ8DLQAz1gYAAQ8DAAA01gYAAQoDAAB5dPBPkgBkABYkARck AUlmAQAAAAGW0/8hdgABaAE11gUAAQMWJiN2AAEWJjpWCwAU9gMWJhU2ARf2 AAAALNYDAAEBNdYFAAEBAAAy1gYAAQ8DLQAz1gYAAQ8DAAA01gYAAQoDAAB5 dPBPkgBkABYkARckAUlmAQAAAAGW0/8hdgABaAE11gUAAQMWJiN2AAEWJjpW CwAU9gMWJhU2ARf2AAAALNYDAAEBNdYFAAEBAAAy1gYAAQ8DLQAz1gYAAQ8D AAA01gYAAQoDAAB5dPBPkgBkABYkARckAUlmAQAAAAGW0/8hdgABaAE11gUA AQMWJiN2AAEWJjpWCwAU9gMWJhU2ARf2AAAALNYDAAEBNdYFAAEBAAAy1gYA AQ8DLQAz1gYAAQ8DAAA01gYAAQoDAAB5dPBPkgBkABYkARckAUlmAQAAAAGW 0/8hdgABaAE11gUAAQMWJiN2AAEWJjpWCwAU9gMWJhU2ARf2AAAALNYDAAEB NdYFAAEBAAAy1gYAAQ8DLQAz1gYAAQ8DAAA01gYAAQoDAAB5dPBPkgBkABYk ARckAUlmAQAAAAGW0/8hdgABaAE11gUAAQMWJiN2AAEWJjpWCwAU9gMWJhU2 ARf2AAAALNYDAAEBNdYFAAEBAAAy1gYAAQ8DLQAz1gYAAQ8DAAA01gYAAQoD AAB5dPBPkgBkABYkARckAUlmAQAAAAGW0/8hdgABaAE11gUAAQMWJiN2AAEW JjpWCwAU9gMWJhU2ARf2AAAALNYDAAEBNdYFAAEBAAAy1gYAAQ8DLQAz1gYA AQ8DAAA01gYAAQoDAAB5dPBPkgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAhgIPABIAAQCcAA8ABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQPH/AgBAAAwEAAAAAAAAAAAGAE4A bwByAG0AYQBsAAAAAgAAABgAQ0oYAF9IAQRhShgAbUgJBHNICQR0SAkEAAAA AAAAAAAAAAAAAAAAAAAARABBQPL/oQBEAAwFAAAAAAAAAAAWAEQAZQBmAGEA dQBsAHQAIABQAGEAcgBhAGcAcgBhAHAAaAAgAEYAbwBuAHQAAAAAAFIAaUDz /7MAUgAMBQAAAAAAAAAADABUAGEAYgBsAGUAIABOAG8AcgBtAGEAbAAAABwA F/YDAAA01gYAAQoDbAA01gYAAQUDAABh9gMAAAIACwAAACgAa0D0/8EAKAAA BQAAAAAAAAAABwBOAG8AIABMAGkAcwB0AAAAAgAAAAAAAAAAAAAAtQYAAAYA ABwAAAUA/////wAAAAAfAAAAIAAAADEAAAAyAAAAswQAALQEAADHBAAAyAQA ACcGAAAoBgAAOwYAADwGAAA+BgAAPwYAAFcGAABYBgAAsQYAALIGAAC0BgAA twYAAKkAAAAAMAAAAAAAAACAAAAAgAEAAMAAAAAAIACZAAAAADAAAAAAAAAA gAAAAIABAADEAAAAACAAqQAAAAAwAAAAAAAAAIAAAACAAQAAwAAAAAAgAJkA AAAAMAAAAAAAAACAAAAAgAEAAMQAAAAAIACpAAAAADAAAAAAAAAAgAAAAIAB AADQAAAAACAAmQAAAAAwAAAAAAAAAIAAAACAAQAA1AAAAAAgAKkAAAAAMAAA AAAAAACAAAAAgAEAAMAAAAAAIACZAAAAADAAAAAAAAAAgAAAAIABAADEAAAA ACAAqQAAAAAwAAAAAAAAAIAAAACAAQAAuAAAAAAgAJkAAAAAMAAAAAAAAACA AAAAgAEAALwAAAAAIACpAAAAADAAAAAAAAAAgAAAAIABAADAAAAAACAAmQAA AAAwAAAAAAAAAIAAAACAAQAAxAAAAAAgAKkAAAAAMAAAAAAAAACAAAAAgAEA AMAAAAAAIACZAAAAADAAAAAAAAAAgAAAAIABAADEAAAAACAAqQAAAAAwAAAA AAAAAIAAAACAAQAAwAAAAAAgAJkAAAAAMAAAAAAAAACAAAAAgAEAAMQAAAAA IACpAAAAADAAAAAAAAAAgAAAAIABAADAAAAAACAAmQAAAAAwAAAAAAAAAIAA AACAAQAAxAAAAAAgAJgAAAAAMAAAAAAAAACAAAAAgAAAAAAAAAAAAACYAAAA ADAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAB8AAAAgAAAAMQAAADIAAACz BAAAtAQAAMcEAADIBAAAJwYAACgGAAA7BgAAPAYAAD4GAAA/BgAAVwYAAFgG AACxBgAAsgYAALQGAAC3BgAA6tAAMAAAAAAAAAAAAgAAAAEAAQAAAAAAAABj AwBAAAAAAL0AAAA3AwAAUQEAAAEAAAQAAAAAIAHo0AAwAgAAAAAAAAACAAAA AQABAAAAAAAAAGMDUfgYADQAAAAQCAAAAAAAAAAAAQAABAAAAACgAerQADAE AAAAAAAAAAIAAAABAAEAAAAAAAAAYwcAQAAAAwAAAEoAAAABAAAAAAABAAAE AAAAAKAB6NAAMAYAAAAAAAAAAgAAAAEAAQAAAAAAAABjAwBAAAAAAOABAADp BQAALBAAAAEAAAQAAAAAoAHq0AAwCAAAAAAAAAACAAAAAQABAAAAAAAAAGMH AEAAAAAAAAAAAAAA/////wAAAQAABAAAAACgAejQADAKAAAAAAAAAAIAAAAB AAEAAAAAAAAAYwMAQAAAAADgAQAA+AEAACwQAAABAAAEAAAAAKAB6NAAMAwA AAAAAAAAAgAAAAEAAQAAAAAAAABjAwBAAQAAAAAAAAAAAAAAAAAAAAEAAPwA AAAAoAHo0AAwDgAAAAAAAAACAAAAAQABAAAAAAAAACABAEAAAJgACiAAMAAA AAAAAACAAQAAhAAAAACgAejQADAQAAAAAAAAAAIAAAABAAEAAAAAAAAAoAH9 //////////////////////8BAAD8AAAAAKAB6NAAMAAAAAAAAAAAAQAAAAAA AAAAAAAAAACAAQoAAAAAAAAAAAAAAAAAAAAAAAYwsgYAAAAAAAcABgAAtQ4A AAgAAAAABgAAtAwAAD4OAAC0DgAAtQ4AAAkAAAALAAAADAAAAA0AAAAABgAA tQ4AAAoAAAAAAAAAtwYAAAcAAAAAALcGAAAHAAAAAADjAAAA8AAAAM0DAADU AwAA7gUAAPQFAAD9BQAAAwYAALQGAAC3BgAAAwAHAAMABwADAAcAAwAHAAMA BwAAAAAAtwYAAAcAAQDqA94zAAAAAAAAAAAAAQIAAgBDAAAABAAAAAgAAADl AAAAAAAAAEIAAAAZUAEAoF4DAIl5BQByEAcA6UoJAOMxCwBbRxwAsj8eAFFp IAACCiEAhXUiAFMrKQCZJioAJEsqACYqLAAhDjoAaRQ6ABFnOgCEDEAAsyFD ABsCRAA2bkoAJipSAG1JUwCMe1oA5wldAI9gXgCLal4A2HFeAIVuZQD9S2gA QCZuAJUWcgAwanIA43p5AGtefAArRn8AmCmCAP11jgBJcZAA8E+SAHNalQA3 cZkAUBicAD10nQCcap8AxWioAMAdsADNe7QA0FHBAI9bwgCWXsIA8VPDAABB xQDqSMYAJ3rGAN5uzgDiKdQAp1fVAEcD4gAvb+MAgnfsAB9Q7QBWPu4AEgD0 AOwZ+QCIe/sAAAAAAB8AAAAgAAAAMQAAADIAAACzBAAAtAQAAMcEAADIBAAA JwYAACgGAAA7BgAAPAYAAD4GAAA/BgAAVwYAAFgGAACxBgAAsgYAALcGAAAA AAAAAgEAAJ4BAAACAQAAngEAAAIBAACeAQAAAgEAAJ4BAAACAQAAngEAAAIB AACeAQAAAgEAAJ4BAAACAQAAngEAAAIBAACWAQAA/0APgAEAswQAALMEAAAQ ABcBAQAAALMEAAAAAAAAswQAANP/6SUCEAAAAAAAAAC1BgAAYAAAEABAAAD/ /wEAAAAHAFUAbgBrAG4AbwB3AG4A//8BAAgAAAAAAAAAAAAAAP//AQAAAAAA //8AAAIA//8AAAAA//8AAAIA//8AAAAAAwAAAEcWkAEAAAICBgMFBAUCAwSH egAgAAAAgAgAAAAAAAAA/wEAAAAAAABUAGkAbQBlAHMAIABOAGUAdwAgAFIA bwBtAGEAbgAAADUWkAECAAUFAQIBBwYCBQcAAAAAAAAAEAAAAAAAAAAAAAAA gAAAAABTAHkAbQBiAG8AbAAAADMmkAEAAAILBgQCAgICAgSHegAgAAAAgAgA AAAAAAAA/wEAAAAAAABBAHIAaQBhAGwAAAAiAAQA8QiIGADw0AIAAGgBAAAA ADCKxIZuisSGAAAAAAIAKgAAAAABAAC1BQAAAQADAAAABAADEAwAAAAAAQAA tQUAAAEAAwAAAAwAAAAAAAAAJQMA8BAAAAABAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAACAegBbQAtACBgXI0AAAAAAAAAAAAAAAA AACyBgAAsgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAMoMRAPAQAAgA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExYAAAAACnw/w8BAAE/AADk BAAA////f////3////9/////f////3////9/////fxlQAQAAAAAAMgAAAAAA AAAAAAAAAAAAAAAA//8SAAAAAAAAAB4AVgBlAHIAaQBmAGkAYwBhAHQAaQBv AG4AIABlAG4AZwBpAG4AZQBlAHIAcwAvAE0AYQBuAGEAZwBlAHIAAAAAAAAA DABBAGwAbABlAGcAaQBzACAAVQBzAGUAcgAMAEEAbABsAGUAZwBpAHMAIABV AHMAZQByAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAP7/AAAFAQIAAAAAAAAAAAAAAAAAAAAAAAEAAADghZ/y+U9oEKuRCAAr J7PZMAAAAJgBAAARAAAAAQAAAJAAAAACAAAAmAAAAAMAAADAAAAABAAAAMwA AAAFAAAA5AAAAAYAAADwAAAABwAAAPwAAAAIAAAAEAEAAAkAAAAoAQAAEgAA ADQBAAAKAAAAVAEAAAwAAABgAQAADQAAAGwBAAAOAAAAeAEAAA8AAACAAQAA EAAAAIgBAAATAAAAkAEAAAIAAADkBAAAHgAAACAAAABWZXJpZmljYXRpb24g ZW5naW5lZXJzL01hbmFnZXIAAB4AAAAEAAAAAAAAAB4AAAAQAAAAQWxsZWdp cyBVc2VyAAAAAB4AAAAEAAAAAAAAAB4AAAAEAAAAAAAAAB4AAAAMAAAATm9y bWFsLmRvdAAAHgAAABAAAABBbGxlZ2lzIFVzZXIAAAAAHgAAAAQAAAAyAAAA HgAAABgAAABNaWNyb3NvZnQgT2ZmaWNlIFdvcmQAAABAAAAAAHwJ3gUAAABA AAAAADjJaaKgyAFAAAAAABQHhKqgyAEDAAAAAQAAAAMAAAAAAQAAAwAAALUF AAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAD+/wAABQECAAAAAAAAAAAAAAAAAAAAAAABAAAAAtXN1ZwuGxCTlwgA Kyz5rjAAAAAYAQAADAAAAAEAAABoAAAADwAAAHAAAAAFAAAAjAAAAAYAAACU AAAAEQAAAJwAAAAXAAAApAAAAAsAAACsAAAAEAAAALQAAAATAAAAvAAAABYA AADEAAAADQAAAMwAAAAMAAAA9wAAAAIAAADkBAAAHgAAABQAAABBbGxlZ2lz IEdyb3VwLCBJbmMuAAMAAAAMAAAAAwAAAAMAAAADAAAAsgYAAAMAAAAPJwsA CwAAAAAAAAALAAAAAAAAAAsAAAAAAAAACwAAAAAAAAAeEAAAAQAAAB8AAABW ZXJpZmljYXRpb24gZW5naW5lZXJzL01hbmFnZXIADBAAAAIAAAAeAAAABgAA AFRpdGxlAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAA AAsAAAAMAAAADQAAAA4AAAD+////EAAAABEAAAASAAAAEwAAABQAAAAVAAAA FgAAAP7///8YAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAA/v///yAAAAAh AAAAIgAAACMAAAAkAAAAJQAAACYAAAD+////KAAAACkAAAAqAAAAKwAAACwA AAAtAAAALgAAAP7////9////MQAAAP7////+/////v////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////9SAG8AbwB0ACAARQBuAHQAcgB5AAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAF Af//////////AwAAAAYJAgAAAAAAwAAAAAAAAEYAAAAAAAAAAAAAAABAm5yL qqDIATMAAACAAAAAAAAAAEQAYQB0AGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAIB//////// ////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAA AAAQAAAAAAAAMQBUAGEAYgBsAGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAgEBAAAABgAAAP////8A AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAABAAAAAA AABXAG8AcgBkAEQAbwBjAHUAbQBlAG4AdAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAGgACAQIAAAAFAAAA/////wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuHAAAAAAAAAUAUwB1 AG0AbQBhAHIAeQBJAG4AZgBvAHIAbQBhAHQAaQBvAG4AAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAoAAIB////////////////AAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAQAAAAAAAABQBEAG8AYwB1AG0A ZQBuAHQAUwB1AG0AbQBhAHIAeQBJAG4AZgBvAHIAbQBhAHQAaQBvAG4AAAAA AAAAAAAAADgAAgEEAAAA//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAnAAAAABAAAAAAAAABAEMAbwBtAHAATwBiAGoAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA EgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//// ////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAQAAAP7///////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////8BAP7/AwoAAP////8GCQIA AAAAAMAAAAAAAABGHwAAAE1pY3Jvc29mdCBPZmZpY2UgV29yZCBEb2N1bWVu dAAKAAAATVNXb3JkRG9jABAAAABXb3JkLkRvY3VtZW50LjgA9DmycQAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AFIAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUB//////////8DAAAABgkCAAAAAADA AAAAAAAARgAAAAAAAAAAAAAAAFANFj5WpsgBOQAAAEACAAAAAAAARABhAHQA YQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAoAAgH///////////////8AAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAABAAAAAAAAAxAFQAYQBiAGwAZQAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAADgACAQEAAAAGAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAABcAAAAAEAAAAAAAAFcAbwByAGQARABvAGMAdQBtAGUA bgB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa AAIBAgAAAAUAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAC4cAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAA AAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAD+////EAAAABEAAAASAAAA EwAAABQAAAAVAAAAFgAAAP7///8YAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAe AAAA/v///yAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAD+//////////// //////////////////////////////////////////////////////////// /zgAAAD9/////v////7////+////NwAAAP////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////8BAAAA/v///wMA AAAEAAAABQAAAAYAAAAHAAAACAAAAP7///////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// /////////wIAAACwBAAAEwAAAAkEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQBTAHUAbQBtAGEAcgB5AEkAbgBm AG8AcgBtAGEAdABpAG8AbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA AgH///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAfAAAAABAAAAAAAAAFAEQAbwBjAHUAbQBlAG4AdABTAHUAbQBtAGEA cgB5AEkAbgBmAG8AcgBtAGEAdABpAG8AbgAAAAAAAAAAAAAAOAACAQQAAAD/ /////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA AACQAQAAAAAAAAEAQwBvAG0AcABPAGIAagAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAIA//////////////// AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAP7/ AwoAAP////8GCQIAAAAAAMAAAAAAAABGHwAAAE1pY3Jvc29mdCBPZmZpY2Ug V29yZCBEb2N1bWVudAAKAAAATVNXb3JkRG9jABAAAABXb3JkLkRvY3VtZW50 LjgA9DmycQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7/AAAFAQIAAAAA AAAAAAAAAAAAAAAAAAIAAAAC1c3VnC4bEJOXCAArLPmuRAAAAAXVzdWcLhsQ k5cIACss+a5cAQAAGAEAAAwAAAABAAAAaAAAAA8AAABwAAAABQAAAIwAAAAG AAAAlAAAABEAAACcAAAAFwAAAKQAAAALAAAArAAAABAAAAC0AAAAEwAAALwA AAAWAAAAxAAAAA0AAADMAAAADAAAAPcAAAACAAAA5AQAAB4AAAAUAAAAQWxs ZWdpcyBHcm91cCwgSW5jLgADAAAADAAAAAMAAAADAAAAAwAAALIGAAADAAAA DycLAAsAAAAAAAAACwAAAAAAAAALAAAAAAAAAAsAAAAAAAAAHhAAAAEAAAAf AAAAVmVyaWZpY2F0aW9uIGVuZ2luZWVycy9NYW5hZ2VyAAwQAAACAAAAHgAA AAYAAABUaXRsZQADAAAAAQAAAAAAADQAAAADAAAAAAAAACAAAAABAAAAJAAA AAAAAIAsAAAAAAAAAA== ------_=_NextPart_001_01C8A656.428F07AD-- From owner-xfs@oss.sgi.com Thu Apr 24 15:49:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 24 Apr 2008 15:49:25 -0700 (PDT) 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.0 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 m3OMn24H032697 for ; Thu, 24 Apr 2008 15:49:04 -0700 X-ASG-Debug-ID: 1209077381-478800f00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from main.carme.maven.pl (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0B320E84B6 for ; Thu, 24 Apr 2008 15:49:42 -0700 (PDT) Received: from main.carme.maven.pl (main.carme.maven.pl [193.239.45.138]) by cuda.sgi.com with ESMTP id BZ3oH6VuHWGH8lcR for ; Thu, 24 Apr 2008 15:49:42 -0700 (PDT) Received: from chello089076023161.chello.pl ([89.76.23.161]:1545 helo=[192.168.0.124]) by main.carme.maven.pl with esmtpa (Exim 4.69) (envelope-from ) id 1JpAAj-0006zo-Dc for xfs@oss.sgi.com; Fri, 25 Apr 2008 00:44:09 +0200 From: Arkadiusz Miskiewicz Organization: SelfOrganizing To: xfs@oss.sgi.com X-ASG-Orig-Subj: xfs_quota report Subject: xfs_quota report Date: Fri, 25 Apr 2008 00:49:34 +0200 User-Agent: PLD Linux KMail/1.9.9 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-2" Content-Disposition: inline Message-Id: <200804250049.34740.arekm@maven.pl> X-Barracuda-Connect: main.carme.maven.pl[193.239.45.138] X-Barracuda-Start-Time: 1209077384 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4861 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 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.1, rules version 3.1.48738 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m3OMn44H032700 X-archive-position: 15584 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: arekm@maven.pl Precedence: bulk X-list: xfs Hello, xfs_quota -x -c "report" by default walks passwd and displays quota only for users found there. I wonder if there is a better way to get information about uid/gids that have any files on xfs filesystem? So report command could be enhanced to display such "users", too. Right now the only option is to use report -L0 -Usome_very_high_number with a hope that the number will always be high enough. -- Arkadiusz Mi¶kiewicz PLD/Linux Team arekm / maven.pl http://ftp.pld-linux.org/ From owner-xfs@oss.sgi.com Thu Apr 24 16:13:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 24 Apr 2008 16:13:50 -0700 (PDT) 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=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 m3ONDNcd001597 for ; Thu, 24 Apr 2008 16:13:27 -0700 X-ASG-Debug-ID: 1209078845-477a01690000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from QMTA06.emeryville.ca.mail.comcast.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E4B27E874A for ; Thu, 24 Apr 2008 16:14:05 -0700 (PDT) Received: from QMTA06.emeryville.ca.mail.comcast.net (qmta06.emeryville.ca.mail.comcast.net [76.96.30.56]) by cuda.sgi.com with ESMTP id 1CPYGkcXKVywuMRx for ; Thu, 24 Apr 2008 16:14:05 -0700 (PDT) Received: from OMTA10.emeryville.ca.mail.comcast.net ([76.96.30.28]) by QMTA06.emeryville.ca.mail.comcast.net with comcast id HYEZ1Z0010cQ2SLA60RD00; Thu, 24 Apr 2008 23:13:58 +0000 Received: from stupidest.org ([67.169.95.103]) by OMTA10.emeryville.ca.mail.comcast.net with comcast id HbDe1Z0042DpGEz8W00000; Thu, 24 Apr 2008 23:13:39 +0000 X-Authority-Analysis: v=1.0 c=1 a=pNWMoayQ7RPuO_XelUEA:9 a=H5xNCdUwCZcToPWH6aoA:7 a=9MyrddDn1iLa3HLOFJOLrD1VIn4A:4 a=LY0hPdMaydYA:10 Received: by tuatara.stupidest.org (Postfix, from userid 10000) id C413F2822EA1; Thu, 24 Apr 2008 16:13:37 -0700 (PDT) Date: Thu, 24 Apr 2008 16:13:37 -0700 From: Chris Wedgwood To: Arkadiusz Miskiewicz Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_quota report Subject: Re: xfs_quota report Message-ID: <20080424231337.GA4479@puku.stupidest.org> References: <200804250049.34740.arekm@maven.pl> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200804250049.34740.arekm@maven.pl> X-Barracuda-Connect: qmta06.emeryville.ca.mail.comcast.net[76.96.30.56] X-Barracuda-Start-Time: 1209078845 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.1, rules version 3.1.48738 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15585 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: cw@f00f.org Precedence: bulk X-list: xfs On Fri, Apr 25, 2008 at 12:49:34AM +0200, Arkadiusz Miskiewicz wrote: > I wonder if there is a better way to get information about uid/gids > that have any files on xfs filesystem? So report command could be > enhanced to display such "users", too. bulkstat would be one way to get a list of all uid/gids in use, it could be very large though (i know of installations where uid/gid values are used outside of /etc/passwd and NIS/ldap that number in the millions, though, well, that's not such a large number these days) From owner-xfs@oss.sgi.com Thu Apr 24 17:14:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 24 Apr 2008 17:14:45 -0700 (PDT) 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.0 required=5.0 tests=BAYES_60 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 m3P0EL1V009089 for ; Thu, 24 Apr 2008 17:14:26 -0700 X-ASG-Debug-ID: 1209082503-4c34023b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mars.select-servers.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D08A9E8B8E for ; Thu, 24 Apr 2008 17:15:03 -0700 (PDT) Received: from mars.select-servers.com (mars.select-servers.com [74.86.90.154]) by cuda.sgi.com with ESMTP id 9dxKJO7wpFI4gljW for ; Thu, 24 Apr 2008 17:15:03 -0700 (PDT) Received: from ussinati by mars.select-servers.com with local (Exim 4.68) (envelope-from ) id 1JpBah-00081u-4T for xfs@oss.sgi.com; Thu, 24 Apr 2008 20:15:03 -0400 To: xfs@oss.sgi.com X-ASG-Orig-Subj: Job Opportunity Subject: Job Opportunity From: Wintage Global Electronics Reply-To: kelvindgreat.tyrant@gmail.com MIME-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 8bit Message-Id: Date: Thu, 24 Apr 2008 20:15:03 -0400 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - mars.select-servers.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [32230 32232] / [47 12] X-AntiAbuse: Sender Address Domain - mars.select-servers.com X-Barracuda-Connect: mars.select-servers.com[74.86.90.154] X-Barracuda-Start-Time: 1209082503 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5991 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= X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48744 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15586 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: kelvindgreat.tyrant@gmail.com Precedence: bulk X-list: xfs Good Day I'm Kelvin U Li, i work as an online representative for Wintage Global Electronics, we deal on sales of electronics ( Laptops, Irons, Computer, TV, DVD, ...etc) in large quantities. Well to advert our company is not what i'm here I believe it will be of a great news for you to hear that we need a work from home assistance based in Australia. We have cashiers in Uk, USA and France and that is making our company name bigger but we have come to a meeting to at least accept business offers from Australia since we mostly have clients messaging us from Australia for interest in our goods. Right about now we are turning down international offers from Australia due to lack of cashier. So we believe maybe sending an email job offer will fetch us a cashier and we can proceed with the acceptance of offers from australia. For more information and Interest CONTACT: Name: Wintage Global Electronics Address: Plot 992 Betlay Rd City: Akure State: Ondo Country: Nigeria email to: davisrep.kelvinli@yahoo.com Phone: 08051898178 USA Address: 51773 Grape Rd Granger IN 46530 USA 574-272-8878 Email to: davisrep.kelvinli@yahoo.com From owner-xfs@oss.sgi.com Thu Apr 24 21:10:19 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 24 Apr 2008 21:10:57 -0700 (PDT) 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.7 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 m3P4AGQu027268 for ; Thu, 24 Apr 2008 21:10:19 -0700 X-ASG-Debug-ID: 1209096657-5eb303360000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from postoffice2.aconex.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 21177E424D for ; Thu, 24 Apr 2008 21:10:57 -0700 (PDT) Received: from postoffice2.aconex.com (prod.aconex.com [203.89.192.138]) by cuda.sgi.com with ESMTP id 2Zp1okWTAxWxO6gy for ; Thu, 24 Apr 2008 21:10:57 -0700 (PDT) Received: from postoffice.aconex.com (localhost [127.0.0.1]) by postoffice2.aconex.com (Spam Firewall) with ESMTP id 563AA5A6163; Fri, 25 Apr 2008 14:10:49 +1000 (EST) Received: from postoffice.aconex.com (postoffice.yarra.acx [192.168.3.1]) by postoffice2.aconex.com with ESMTP id d3hHPHNKNYuwXOKN; Fri, 25 Apr 2008 14:10:49 +1000 (EST) Received: from mail.aconex.com (castle.yarra.acx [192.168.3.3]) by postoffice.aconex.com (Postfix) with ESMTP id 03A1592C0E3; Fri, 25 Apr 2008 14:10:55 +1000 (EST) Received: from 192.168.3.1 (proxying for 58.107.42.33) (SquirrelMail authenticated user nscott) by mail.aconex.com with HTTP; Fri, 25 Apr 2008 14:10:55 +1000 (EST) Message-ID: <34168.192.168.3.1.1209096655.squirrel@mail.aconex.com> In-Reply-To: <200804250049.34740.arekm@maven.pl> References: <200804250049.34740.arekm@maven.pl> Date: Fri, 25 Apr 2008 14:10:55 +1000 (EST) X-ASG-Orig-Subj: Re: xfs_quota report Subject: Re: xfs_quota report From: nscott@aconex.com To: "Arkadiusz Miskiewicz" Cc: xfs@oss.sgi.com User-Agent: SquirrelMail/1.4.8-4.el4.centos MIME-Version: 1.0 Content-Type: text/plain;charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Priority: 3 (Normal) Importance: Normal X-Barracuda-Connect: prod.aconex.com[203.89.192.138] X-Barracuda-Start-Time: 1209096659 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.47 X-Barracuda-Spam-Status: No, SCORE=-1.47 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48760 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.55 NO_REAL_NAME From: does not include a real name X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15587 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: nscott@aconex.com Precedence: bulk X-list: xfs > Hello, > > xfs_quota -x -c "report" by default walks passwd and displays quota only > for > users found there. Yep. Its quite lame really (all quota implementations I'm aware of do this). > I wonder if there is a better way to get information about uid/gids that > have > any files on xfs filesystem? So report command could be enhanced to > display > such "users", too. There is a better way. No code exists to do it, but its been a long-standing RFE that a new quotactl command be implement to do this - it would be a bit like the XFS bulkstat interface, but instead of passing out the-next-big- bunch-of-inode-stat-data-in-bulk-from-some-arbitary-inode, it would pass out the next-big-bunch-of-dquot-data-in-bulk-from-some-id. The idea being you would call it iteratively from userspace starting from id zero, until it tells you you've reached the end, and the kernel would pass out all valid dquots. > Right now the only option is to use report -L0 -Usome_very_high_number > with a > hope that the number will always be high enough. Heh, yeah, thats pretty ordinary. Your mission, should you choose to accept it... cheers. -- Nathan From owner-xfs@oss.sgi.com Fri Apr 25 01:58:29 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 25 Apr 2008 01:58:54 -0700 (PDT) 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 m3P8wNkx019766 for ; Fri, 25 Apr 2008 01:58:29 -0700 X-ASG-Debug-ID: 1209113944-1b59024e0000-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 C772C15D73B3 for ; Fri, 25 Apr 2008 01:59:04 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id EeuPTuwCK5ZaeCOc for ; Fri, 25 Apr 2008 01:59:04 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JpJlo-0006dm-15; Fri, 25 Apr 2008 08:59:04 +0000 Date: Fri, 25 Apr 2008 04:59:04 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs mailing list , David Howells X-ASG-Orig-Subj: Re: [PATCH] convert xfs to use ERR_CAST Subject: Re: [PATCH] convert xfs to use ERR_CAST Message-ID: <20080425085904.GB6395@infradead.org> References: <480FA737.5030001@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <480FA737.5030001@sandeen.net> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209113945 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: -0.97 X-Barracuda-Spam-Status: No, SCORE=-0.97 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE_7582B X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48780 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.05 BSF_RULE_7582B BODY: Custom Rule 7582B X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15589 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Wed, Apr 23, 2008 at 04:16:39PM -0500, Eric Sandeen wrote: > Looks like somehow xfs got missed in the conversion that > took place in e231c2ee64eb1c5cd3c63c31da9dac7d888dcf7f, > "Convert ERR_PTR(PTR_ERR(p)) instances to ERR_CAST(p) " Looks good. From owner-xfs@oss.sgi.com Fri Apr 25 01:57:17 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 25 Apr 2008 01:57:47 -0700 (PDT) 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 m3P8v9l0019704 for ; Fri, 25 Apr 2008 01:57:17 -0700 X-ASG-Debug-ID: 1209113870-6f3c02450000-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 A6104ACDFB8; Fri, 25 Apr 2008 01:57:50 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 0COuBmakbGvA5p03; Fri, 25 Apr 2008 01:57:50 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JpJkc-00050O-8B; Fri, 25 Apr 2008 08:57:50 +0000 Date: Fri, 25 Apr 2008 04:57:50 -0400 From: Christoph Hellwig To: David Chinner Cc: Greg Banks , xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] Don't initialise new inode generation numbers to zero V2 Subject: Re: [PATCH] Don't initialise new inode generation numbers to zero V2 Message-ID: <20080425085750.GA6395@infradead.org> References: <20080422015806.GU108924158@sgi.com> <480D641B.8060301@melbourne.sgi.com> <20080422050447.GV103491721@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080422050447.GV103491721@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209113871 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.1, rules version 3.1.48779 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15588 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Tue, Apr 22, 2008 at 03:04:48PM +1000, David Chinner wrote: > > I'm confused, why would an NFS client be trying to guess the generation > > number? AFAICS the important thing is to ensure that the (inode,gen) > > tuple isn't reused for a long time to prevent accidental filehandle > > identity issues on clients; whether the gen is predictable or not > > doesn't matter at all. > > Yeah, that's exactly what I said to Christoph, but that's the issue he > raised w.r.t a malicious client triggering inode/gen collisions > intentionally. If that's not a problem, then I can just use random32() > for the inode number. If it is a real problem, then it needs to be > a cryptographically secure random number. Personally, I don't care > either way - I just want to get the issue fixed. > > Christoph, care to explain how and why this is a problem to everyone? XFS has some heuristics for inode placement and of course for removing the inode cluster and re-allocting it. I have a gut feeling that there is a small chance to trigger a re-use via nfs operations. Making the initial generation number random means we remove one of the major user-triggerable inputs from the equation. From owner-xfs@oss.sgi.com Fri Apr 25 02:55:06 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 25 Apr 2008 02:55:32 -0700 (PDT) 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=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 m3P9t0fO024641 for ; Fri, 25 Apr 2008 02:55:06 -0700 X-ASG-Debug-ID: 1209117341-66ef007f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx1.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C482AE9A1D for ; Fri, 25 Apr 2008 02:55:41 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id sDFS5vSMwTRaD9n7 for ; Fri, 25 Apr 2008 02:55:41 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id m3P9teqX012686; Fri, 25 Apr 2008 05:55:40 -0400 Received: from pobox.devel.redhat.com (pobox.devel.redhat.com [10.11.255.8]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m3P9tdv3026069; Fri, 25 Apr 2008 05:55:39 -0400 Received: from warthog.cambridge.redhat.com (devserv.devel.redhat.com [10.10.36.72]) by pobox.devel.redhat.com (8.13.1/8.13.1) with ESMTP id m3P9tdT3018920; Fri, 25 Apr 2008 05:55:39 -0400 Received: from [127.0.0.1] (helo=redhat.com) by warthog.cambridge.redhat.com with esmtp (Exim 4.68 #1 (Red Hat Linux)) id 1JpKeZ-00045H-7g; Fri, 25 Apr 2008 10:55:39 +0100 Organization: Red Hat UK Ltd. Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod Street, Windsor, Berkshire, SI4 1TE, United Kingdom. Registered in England and Wales under Company Registration No. 3798903 From: David Howells In-Reply-To: <480FA737.5030001@sandeen.net> References: <480FA737.5030001@sandeen.net> To: Eric Sandeen Cc: dhowells@redhat.com, xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] convert xfs to use ERR_CAST Subject: Re: [PATCH] convert xfs to use ERR_CAST X-Mailer: MH-E 8.0.3+cvs; nmh 1.2-20070115cvs; GNU Emacs 23.0.50 Date: Fri, 25 Apr 2008 10:55:39 +0100 Message-ID: <15702.1209117339@redhat.com> X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 X-Barracuda-Connect: mx1.redhat.com[66.187.233.31] X-Barracuda-Start-Time: 1209117343 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15590 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dhowells@redhat.com Precedence: bulk X-list: xfs Eric Sandeen wrote: > Looks like somehow xfs got missed in the conversion that > took place in e231c2ee64eb1c5cd3c63c31da9dac7d888dcf7f, > "Convert ERR_PTR(PTR_ERR(p)) instances to ERR_CAST(p) " > > Signed-off-by: Eric Sandeen Acked-by: David Howells From owner-xfs@oss.sgi.com Fri Apr 25 07:53:56 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 25 Apr 2008 07:54:17 -0700 (PDT) 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_00,HTML_MESSAGE 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 m3PEro3R017823 for ; Fri, 25 Apr 2008 07:53:56 -0700 X-ASG-Debug-ID: 1209135271-1eba01940000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from rv-out-0506.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C702FEB4BD for ; Fri, 25 Apr 2008 07:54:31 -0700 (PDT) Received: from rv-out-0506.google.com (rv-out-0506.google.com [209.85.198.233]) by cuda.sgi.com with ESMTP id JjUa3l0nuPfrsLaQ for ; Fri, 25 Apr 2008 07:54:31 -0700 (PDT) Received: by rv-out-0506.google.com with SMTP id g37so1771745rvb.32 for ; Fri, 25 Apr 2008 07:54:31 -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=J1Q2nrntmMn0Mv7X+gy3INCZZglGh4eTT65FOJfU2mg=; b=OViKb0j4c/nadZ++u1pUdPlX9BL91nMi7jLA+nU8b5ycGKXmGb+nmSkK57x6hRRZbtuevMGfLgFEke8+63X8pD0wt4mKboDFRmAYR24gzjMjBkdEArKYxxSUgguVNu8dFoLWLPLnfVpVilWIuRicnmma5gFSUBs+TagFplQ2Y3Q= 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=Zre8DFp3HYrQBV2M2NwPafOfPkwQ1Y/0WCy3qfTym3sXoiIRfO0vTJsa3aA77N67xr2UfjgQmTWId9uEEduYNbWYfzJvABZCF2se/J7sk4hS0JpoLNEivTYUuHaDjNr2dmS94+Khub4qG3VHYxLUrFzXpgfAjX8nVNtYWiqnQvw= Received: by 10.140.193.16 with SMTP id q16mr1894777rvf.173.1209135270941; Fri, 25 Apr 2008 07:54:30 -0700 (PDT) Received: by 10.140.171.3 with HTTP; Fri, 25 Apr 2008 07:54:30 -0700 (PDT) Message-ID: Date: Fri, 25 Apr 2008 10:54:30 -0400 From: "Michael Darling" To: "Eric Sandeen" , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) Subject: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) In-Reply-To: <4810C0D3.1070107@sandeen.net> MIME-Version: 1.0 References: <4810C0D3.1070107@sandeen.net> X-Barracuda-Connect: rv-out-0506.google.com[209.85.198.233] X-Barracuda-Start-Time: 1209135272 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0001 1.0000 -2.0207 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=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48804 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 1729 X-archive-position: 15591 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: darlingm@gmail.com Precedence: bulk X-list: xfs On Thu, Apr 24, 2008 at 1:18 PM, Eric Sandeen wrote: > Chris Mason reminded me that bonnie++ may not be creating enough files > to actually cause much if any IO on ext3; you might play with the -n > option to get it to the point where it's actually doing a significant > number of creates (I don't know what the default is offhand... checks > source... it's 16k maybe?) but more sustained creation might be interesting. > > -Eric > That's definately a good point worth testing, the default 16k option completes extremely quickly. Increasing the number of files affected the ext3 benchmarks by only a little bit below 256k. I think the 128k benchmark can be treated as representative especially since it puts the ext3 filesystem through a load for 23.67 seconds. I think the 256k benchmark is hitting a problem in the ext3 filesystem, because CPU usage is bottoming out and correspondingly so the transactions per second is bottoming out as well. Regardless, no matter which benchmark below is representative of the ext3 filesystem, it's still substantially faster than xfs on my 3ware 9650SE-4LPML (at least with barriers on.) _______------Sequential Create------ --------Random Create-------- _______-Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP ___16 31771_ 95 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ (2.09 seconds) ___64 31544_ 97 +++++ +++ 52547_ 99 17424_ 53 +++++ +++ 53954 100 (8.76 seconds) __128 30287_ 97 +++++ +++ 48493_ 95_ 9987_ 32 +++++ +++ 49988_ 99 (23.67 seconds) __256 14709_ 49 323792 99_ 4211__ 8 14866_ 49 416920 99_ 1580__ 3 (4 minutes 27.46 seconds) [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Fri Apr 25 09:01:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 25 Apr 2008 09:02:22 -0700 (PDT) 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=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 m3PG1nhL028804 for ; Fri, 25 Apr 2008 09:01:57 -0700 X-ASG-Debug-ID: 1209139349-5acc03d40000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.ipax.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 05D2C15E4AF5 for ; Fri, 25 Apr 2008 09:02:30 -0700 (PDT) Received: from mail.ipax.at (mail.ipax.at [80.64.143.40]) by cuda.sgi.com with ESMTP id wxN75g1wxG3pwtEg for ; Fri, 25 Apr 2008 09:02:30 -0700 (PDT) Received: from [192.168.1.110] (vie-078-142-128-152.dsl.sil.at [78.142.128.152]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.ipax.at (Postfix) with ESMTP id 310EC477455; Fri, 25 Apr 2008 18:02:31 +0200 (CEST) Message-ID: <48120094.9070906@ipax.at> Date: Fri, 25 Apr 2008 18:02:28 +0200 From: "Raoul Bhatia [IPAX]" User-Agent: Thunderbird 2.0.0.12 (X11/20080227) MIME-Version: 1.0 To: Jens Axboe Cc: David Chinner , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: call trace after >page allocation failure. order:0, mode:0x10000< Subject: Re: call trace after >page allocation failure. order:0, mode:0x10000< References: <480DADD2.7060408@ipax.at> <20080423223541.GQ103491721@sgi.com> <20080424104818.GT12774@kernel.dk> In-Reply-To: <20080424104818.GT12774@kernel.dk> X-Enigmail-Version: 0.95.6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail.ipax.at[80.64.143.40] X-Barracuda-Start-Time: 1209139352 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=INFO_TLD X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48808 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 INFO_TLD URI: Contains an URL in the INFO top-level domain X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15592 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: r.bhatia@ipax.at Precedence: bulk X-list: xfs hi, so what do you suggest? i will have access to this machine for another couple of days. then it is handed over to a customer. for me, it's not a very important issue, i just meant to report ;) cheers, raoul Jens Axboe wrote: > On Thu, Apr 24 2008, David Chinner wrote: >> Raoul, >> >> You've exhausted the bio mempool. That is not supposed to happen. >> >> This is a block layer or configuration issue, not an XFS problem. >> >> Jens, have you heard of anything like this recently? > > Nope, haven't heard of anything like this. But I don't think your > analysis is quite right - if you call into mempool_alloc(), it may > rightfully try to allocate outside of the pool only to fallback to > pre-allocated entries. So the page allocation failure message isn't a > bug as such, just the vm running complete OOM. > > Now, if mempool_alloc() returned NULL with __GFP_WAIT set, THAT would be > a bug. > >> Cheers, >> >> Dave. >> >> On Tue, Apr 22, 2008 at 11:20:18AM +0200, Raoul Bhatia [IPAX] wrote: >>> hi, >>> >>> is the following calltrace related to xfs or something else? >>> it happended during "stress --hdd 20 --hdd-bytes 2g" on a >>> raid10 volume: >>> >>>> # cat /proc/mdstat >>>> Personalities : [raid1] [raid10] >>>> md0 : active raid10 sdd5[3] sdc5[2] sdb5[1] sda5[0] >>>> 39069824 blocks 64K chunks 2 near-copies [4/4] [UUUU] >>> maybe this is xfs' way to tell "out of diskspace"? :) >>> >>>> db-ipax-164:~# uname -a >>>> Linux db-ipax-164.travian.info 2.6.25-rc8 #2 SMP Mon Apr 7 14:50:22 CEST 2008 x86_64 GNU/Linux >>> * debian etch 64bit >>> * libc6 2.3.6.ds1-13etch5 >>> * xfsprogs 2.8.11-1 >>> >>> cheers, >>> raoul >>> >>> >>>> stress: page allocation failure. order:0, mode:0x10000 >>>> Pid: 12386, comm: stress Not tainted 2.6.25-rc8 #2 >>>> >>>> Call Trace: >>>> [] __alloc_pages+0x2ea/0x306 >>>> [] kmem_getpages+0xc6/0x194 >>>> [] kmem_getpages+0xc6/0x194 >>>> [] fallback_alloc+0x11a/0x18f >>>> [] kmem_cache_alloc_node+0xf1/0x122 >>>> [] cache_grow+0xd5/0x20c >>>> [] fallback_alloc+0x159/0x18f >>>> [] kmem_cache_alloc+0xad/0xdc >>>> [] mempool_alloc+0x24/0xda >>>> [] :xfs:xfs_cluster_write+0xcd/0xf8 >>>> [] bio_alloc_bioset+0x89/0xd9 >>>> [] bio_alloc+0x10/0x20 >>>> [] :xfs:xfs_alloc_ioend_bio+0x22/0x4e >>>> [] :xfs:xfs_submit_ioend+0x4d/0xc6 >>>> [] :xfs:xfs_page_state_convert+0x516/0x565 >>>> [] :xfs:xfs_vm_writepage+0xb4/0xeb >>>> [] __writepage+0xa/0x23 >>>> [] write_cache_pages+0x182/0x2b7 >>>> [] __writepage+0x0/0x23 >>>> [] do_writepages+0x20/0x2d >>>> [] __writeback_single_inode+0x144/0x29d >>>> [] sync_sb_inodes+0x1b1/0x285 >>>> [] :xfs:xfs_get_blocks+0x0/0xe >>>> [] writeback_inodes+0x62/0xb3 >>>> [] balance_dirty_pages_ratelimited_nr+0x155/0x2b3 >>>> [] generic_file_buffered_write+0x206/0x633 >>>> [] thread_return+0x3e/0x9d >>>> [] current_fs_time+0x1e/0x24 >>>> [] :xfs:xfs_write+0x52f/0x75a >>>> [] dummy_file_permission+0x0/0x3 >>>> [] do_sync_write+0xc9/0x10c >>>> [] autoremove_wake_function+0x0/0x2e >>>> [] set_next_entity+0x18/0x3a >>>> [] vfs_write+0xad/0x136 >>>> [] sys_write+0x45/0x6e >>>> [] system_call_after_swapgs+0x7b/0x80 >>>> >>>> Mem-info: >>>> Node 0 DMA per-cpu: >>>> CPU 0: hi: 0, btch: 1 usd: 0 >>>> CPU 1: hi: 0, btch: 1 usd: 0 >>>> CPU 2: hi: 0, btch: 1 usd: 0 >>>> CPU 3: hi: 0, btch: 1 usd: 0 >>>> Node 0 DMA32 per-cpu: >>>> CPU 0: hi: 186, btch: 31 usd: 153 >>>> CPU 1: hi: 186, btch: 31 usd: 185 >>>> CPU 2: hi: 186, btch: 31 usd: 141 >>>> CPU 3: hi: 186, btch: 31 usd: 190 >>>> Node 0 Normal per-cpu: >>>> CPU 0: hi: 186, btch: 31 usd: 169 >>>> CPU 1: hi: 186, btch: 31 usd: 185 >>>> CPU 2: hi: 186, btch: 31 usd: 44 >>>> CPU 3: hi: 186, btch: 31 usd: 116 >>>> Node 1 Normal per-cpu: >>>> CPU 0: hi: 186, btch: 31 usd: 175 >>>> CPU 1: hi: 186, btch: 31 usd: 156 >>>> CPU 2: hi: 186, btch: 31 usd: 33 >>>> CPU 3: hi: 186, btch: 31 usd: 160 >>>> Active:35627 inactive:1900080 dirty:48667 writeback:147697 unstable:0 >>>> free:8797 slab:112757 mapped:1726 pagetables:391 bounce:0 >>>> Node 0 DMA free:11996kB min:12kB low:12kB high:16kB active:0kB inactive:0kB present:11452kB pages_scanned:0 all_unreclaimable? yes >>>> lowmem_reserve[]: 0 3000 4010 4010 >>>> Node 0 DMA32 free:12336kB min:4276kB low:5344kB high:6412kB active:1592kB inactive:2834572kB present:3072160kB pages_scanned:0 all_unreclaimable? no >>>> lowmem_reserve[]: 0 0 1010 1010 >>>> Node 0 Normal free:2320kB min:1436kB low:1792kB high:2152kB active:14336kB inactive:973540kB present:1034240kB pages_scanned:0 all_unreclaimable? no >>>> lowmem_reserve[]: 0 0 0 0 >>>> Node 1 Normal free:8984kB min:5756kB low:7192kB high:8632kB active:126580kB inactive:3791952kB present:4136960kB pages_scanned:0 all_unreclaimable? no >>>> lowmem_reserve[]: 0 0 0 0 >>>> Node 0 DMA: 5*4kB 5*8kB 2*16kB 4*32kB 4*64kB 4*128kB 3*256kB 2*512kB 1*1024kB 0*2048kB 2*4096kB = 11996kB >>>> Node 0 DMA32: 1301*4kB 17*8kB 1*16kB 1*32kB 1*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 1*2048kB 1*4096kB = 12236kB >>>> Node 0 Normal: 311*4kB 0*8kB 1*16kB 3*32kB 1*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 0*2048kB 0*4096kB = 2060kB >>>> Node 1 Normal: 1210*4kB 0*8kB 0*16kB 0*32kB 1*64kB 1*128kB 2*256kB 1*512kB 1*1024kB 1*2048kB 0*4096kB = 9128kB >>>> 1901879 total pagecache pages >>>> Swap cache: add 526500, delete 526485, find 153749/161350 >>>> Free swap = 1999532kB >>>> Total swap = 2000084kB >>>> Free swap: 1999532kB >>>> 2097152 pages of RAM >>>> 29989 reserved pages >>>> 1902596 pages shared >>>> 15 pages swap cached >>> -- >>> ____________________________________________________________________ >>> DI (FH) Raoul Bhatia M.Sc. email. r.bhatia@ipax.at >>> Technischer Leiter >>> >>> IPAX - Aloy Bhatia Hava OEG web. http://www.ipax.at >>> Barawitzkagasse 10/2/2/11 email. office@ipax.at >>> 1190 Wien tel. +43 1 3670030 >>> FN 277995t HG Wien fax. +43 1 3670030 15 >>> ____________________________________________________________________ >>> >> -- >> Dave Chinner >> Principal Engineer >> SGI Australian Software Group > -- ____________________________________________________________________ DI (FH) Raoul Bhatia M.Sc. email. r.bhatia@ipax.at Technischer Leiter IPAX - Aloy Bhatia Hava OEG web. http://www.ipax.at Barawitzkagasse 10/2/2/11 email. office@ipax.at 1190 Wien tel. +43 1 3670030 FN 277995t HG Wien fax. +43 1 3670030 15 ____________________________________________________________________ From owner-xfs@oss.sgi.com Fri Apr 25 10:03:58 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 25 Apr 2008 10:04:16 -0700 (PDT) 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=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 m3PH3miW000625 for ; Fri, 25 Apr 2008 10:03:58 -0700 X-ASG-Debug-ID: 1209143071-194903350000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from eurekanv.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B138C10B187C for ; Fri, 25 Apr 2008 10:04:31 -0700 (PDT) Received: from eurekanv.org (ns.eurekanv.org [207.212.113.130]) by cuda.sgi.com with ESMTP id Kj99G3KQGJUB6LUJ for ; Fri, 25 Apr 2008 10:04:31 -0700 (PDT) Date: Fri, 25 Apr 2008 10:04:35 -0700 Message-Id: <10804251004.AA07712@eurekanv.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 From: "Economic Development" Reply-To: To: X-ASG-Orig-Subj: I am out of the office until Monday 5/5/08. If you need immediate assistance please call Subject: I am out of the office until Monday 5/5/08. If you need immediate assistance please call X-Mailer: Precedence: bulk X-Barracuda-Connect: ns.eurekanv.org[207.212.113.130] X-Barracuda-Start-Time: 1209143071 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4609 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 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.1, rules version 3.1.48811 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m3PH3wiW000631 X-archive-position: 15593 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: econdev@eurekanv.org Precedence: bulk X-list: xfs I am out of the office until Monday 5/5/08. If you need immediate assistance please call 775-237-6006 From owner-xfs@oss.sgi.com Fri Apr 25 23:35:19 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 25 Apr 2008 23:35:46 -0700 (PDT) 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 m3Q6ZB63001709 for ; Fri, 25 Apr 2008 23:35:19 -0700 X-ASG-Debug-ID: 1209191752-71fd01990000-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 D800910BB030; Fri, 25 Apr 2008 23:35:52 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 25ZtdpaBBgosHC7s; Fri, 25 Apr 2008 23:35:52 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jpe0l-0002Y5-Ab; Sat, 26 Apr 2008 06:35:51 +0000 Date: Sat, 26 Apr 2008 02:35:51 -0400 From: Christoph Hellwig To: Timothy Shimmin Cc: xfs-oss , xfs-dev X-ASG-Orig-Subj: Re: REVIEW: 980021 - fix up noattr2 mount option Subject: Re: REVIEW: 980021 - fix up noattr2 mount option Message-ID: <20080426063551.GA7193@infradead.org> References: <480EC93D.9090103@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <480EC93D.9090103@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209191753 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.1, rules version 3.1.48867 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15594 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Wed, Apr 23, 2008 at 03:29:33PM +1000, Timothy Shimmin wrote: > Hi there, > > Mounting noattr2 in xfs fails to achieve anything AFAICT - > and it certainly doesn't do anything useful. The patch looks correct in that it turns off attr2 when using the mount option now. But the real question is why do we even need this option at all? From owner-xfs@oss.sgi.com Sat Apr 26 07:51:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 26 Apr 2008 07:51:49 -0700 (PDT) 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=BAYES_00,J_CHICKENPOX_42, J_CHICKENPOX_43,J_CHICKENPOX_44,J_CHICKENPOX_45 autolearn=no 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 m3QEpOZY027164 for ; Sat, 26 Apr 2008 07:51:26 -0700 X-ASG-Debug-ID: 1209221526-7eda02d00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fg-out-1718.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8178B15ED44B for ; Sat, 26 Apr 2008 07:52:06 -0700 (PDT) Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.156]) by cuda.sgi.com with ESMTP id lPpdHRQeuElYOCch for ; Sat, 26 Apr 2008 07:52:06 -0700 (PDT) Received: by fg-out-1718.google.com with SMTP id e12so3528068fga.8 for ; Sat, 26 Apr 2008 07:52:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:received:received:from:to:subject:date:user-agent:cc:mime-version:content-type:message-id; bh=5SdU8wqbtLvdvQIq3rbQ40gnafP88O8z2JYdmOI5QT8=; b=QCa/RGpWYFAsbrTq34Sml/sAa+W7Z8kzD6jtFjckDGJedF8paqc/slrwOlm8fEo+oEn0tiEjww5phZYW/uJLa9GvZh9TPkq/vOhYvxb4t/d2hZfPKsBDRO/372gXd7t3Q39tiBM/yx5rs5IHcNgWg30coUUNvK/lpg2uYc0EWnk= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=from:to:subject:date:user-agent:cc:mime-version:content-type:message-id; b=JurhA4H3/QqpohKXDgoV01M/6oCjywC4vmtBS9eAU33DLc32RF/DTBLOYqW7eLwwbTyzvLvdH+9B/pwgYKQeo3+N5JS8xaCuUSpqWKFhU0yU/XL2Mfk0r2Se4NGCuDzEZN3qKNdEZntHd1L8OveBg/Epsv632IPSfmqAom4riqg= Received: by 10.86.68.1 with SMTP id q1mr3734935fga.27.1209221526016; Sat, 26 Apr 2008 07:52:06 -0700 (PDT) Received: from shadow ( [89.102.207.196]) by mx.google.com with ESMTPS id o11sm6125745fkf.9.2008.04.26.07.52.03 (version=SSLv3 cipher=RC4-MD5); Sat, 26 Apr 2008 07:52:04 -0700 (PDT) From: Denys Vlasenko To: David Chinner X-ASG-Orig-Subj: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Subject: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Date: Sat, 26 Apr 2008 16:51:02 +0200 User-Agent: KMail/1.8.2 Cc: xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_WF0EIOQeTE8UKE+" Message-Id: <200804261651.02078.vda.linux@googlemail.com> X-Barracuda-Connect: fg-out-1718.google.com[72.14.220.156] X-Barracuda-Start-Time: 1209221527 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.1, rules version 3.1.48900 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15595 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: vda.linux@googlemail.com Precedence: bulk X-list: xfs --Boundary-00=_WF0EIOQeTE8UKE+ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi David, This patch reduces xfs_bmap_btalloc() stack usage by 50 bytes by moving part of its body into a helper function. This results in some variables not taking stack space in xfs_bmap_btalloc() anymore. The helper itself does not call anything stack-deep. Stack-deep call to xfs_alloc_vextent() happen in xfs_bmap_btalloc(), as before. Compile tested only. Signed-off-by: Denys Vlasenko -- vda --Boundary-00=_WF0EIOQeTE8UKE+ Content-Type: text/x-diff; charset="us-ascii"; name="stk1.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="stk1.diff" diff -urpN linux-2.6-xfs1/fs/xfs/xfs_bmap.c linux-2.6-xfs1.stk1/fs/xfs/xfs_bmap.c --- linux-2.6-xfs1/fs/xfs/xfs_bmap.c 2008-04-22 04:16:25.000000000 +0200 +++ linux-2.6-xfs1.stk1/fs/xfs/xfs_bmap.c 2008-04-26 16:23:26.000000000 +0200 @@ -2648,26 +2648,18 @@ xfs_bmap_rtalloc( } STATIC int -xfs_bmap_btalloc( - xfs_bmalloca_t *ap) /* bmap alloc argument struct */ +xfs_bmap_btalloc_helper( + xfs_bmalloca_t *ap, /* bmap alloc argument struct */ + xfs_alloc_arg_t *argsp, + xfs_extlen_t *blenp) { +#define args (*argsp) +#define blen (*blenp) xfs_mount_t *mp; /* mount point structure */ - xfs_alloctype_t atype = 0; /* type for allocation routines */ xfs_extlen_t align; /* minimum allocation alignment */ xfs_agnumber_t ag; xfs_agnumber_t fb_agno; /* ag number of ap->firstblock */ - xfs_agnumber_t startag; - xfs_alloc_arg_t args; - xfs_extlen_t blen; - xfs_extlen_t delta; - xfs_extlen_t longest; - xfs_extlen_t need; - xfs_extlen_t nextminlen = 0; - xfs_perag_t *pag; int nullfb; /* true if ap->firstblock isn't set */ - int isaligned; - int notinit; - int tryagain; int error; mp = ap->ip->i_mount; @@ -2705,7 +2697,6 @@ xfs_bmap_btalloc( /* * Normal allocation, done through xfs_alloc_vextent. */ - tryagain = isaligned = 0; args.tp = ap->tp; args.mp = mp; args.fsbno = ap->rval; @@ -2713,6 +2704,9 @@ xfs_bmap_btalloc( args.firstblock = ap->firstblock; blen = 0; if (nullfb) { + xfs_agnumber_t startag; + int notinit; + if (ap->userdata && xfs_inode_is_filestream(ap->ip)) args.type = XFS_ALLOCTYPE_NEAR_BNO; else @@ -2732,6 +2726,8 @@ xfs_bmap_btalloc( notinit = 0; down_read(&mp->m_peraglock); while (blen < ap->alen) { + xfs_perag_t *pag; + pag = &mp->m_perag[ag]; if (!pag->pagf_init && (error = xfs_alloc_pagf_init(mp, args.tp, @@ -2743,6 +2739,10 @@ xfs_bmap_btalloc( * See xfs_alloc_fix_freelist... */ if (pag->pagf_init) { + xfs_extlen_t need; + xfs_extlen_t delta; + xfs_extlen_t longest; + need = XFS_MIN_FREELIST_PAG(pag, mp); delta = need > pag->pagf_flcount ? need - pag->pagf_flcount : 0; @@ -2838,6 +2838,33 @@ xfs_bmap_btalloc( if ((args.mod = (xfs_extlen_t)(do_mod(ap->off, args.prod)))) args.mod = (xfs_extlen_t)(args.prod - args.mod); } + + return 0; /* no error */ +#undef args +#undef blen +} + +STATIC int +xfs_bmap_btalloc( + xfs_bmalloca_t *ap) /* bmap alloc argument struct */ +{ + xfs_mount_t *mp; /* mount point structure */ + xfs_alloctype_t atype; /* type for allocation routines */ + xfs_alloc_arg_t args; + xfs_extlen_t blen; + xfs_extlen_t nextminlen; + int nullfb; /* true if ap->firstblock isn't set */ + int isaligned; + int tryagain; + int error; + + error = xfs_bmap_btalloc_helper(ap, &args, &blen); + if (error) + return error; + + mp = ap->ip->i_mount; + nullfb = ap->firstblock == NULLFSBLOCK; + /* * If we are not low on available data blocks, and the * underlying logical volume manager is a stripe, and @@ -2847,10 +2874,13 @@ xfs_bmap_btalloc( * is >= the stripe unit and the allocation offset is * at the end of file. */ + atype = 0; + nextminlen = 0; + tryagain = isaligned = 0; if (!ap->low && ap->aeof) { + atype = args.type; if (!ap->off) { args.alignment = mp->m_dalign; - atype = args.type; isaligned = 1; /* * Adjust for alignment @@ -2864,7 +2894,6 @@ xfs_bmap_btalloc( * If it fails then do a near or start bno * allocation with alignment turned on. */ - atype = args.type; tryagain = 1; args.type = XFS_ALLOCTYPE_THIS_BNO; args.alignment = 1; --Boundary-00=_WF0EIOQeTE8UKE+-- From owner-xfs@oss.sgi.com Sat Apr 26 08:23:10 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 26 Apr 2008 08:23:32 -0700 (PDT) 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.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42 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 m3QFN3ql002006 for ; Sat, 26 Apr 2008 08:23:10 -0700 X-ASG-Debug-ID: 1209223425-47b101c70000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 47805F4E94 for ; Sat, 26 Apr 2008 08:23:45 -0700 (PDT) Received: from smtp7-g19.free.fr (smtp7-g19.free.fr [212.27.42.64]) by cuda.sgi.com with ESMTP id 1Ruhq44OhPRA6W60 for ; Sat, 26 Apr 2008 08:23:45 -0700 (PDT) Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by smtp7-g19.free.fr (Postfix) with ESMTP id 1A03732282F; Sat, 26 Apr 2008 17:23:45 +0200 (CEST) Received: from galadriel.home (pla78-1-82-235-234-79.fbx.proxad.net [82.235.234.79]) by smtp7-g19.free.fr (Postfix) with ESMTP id C7049322805; Sat, 26 Apr 2008 17:23:44 +0200 (CEST) Date: Sat, 26 Apr 2008 17:23:21 +0200 From: Emmanuel Florac To: "Michael Darling" Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) Subject: Re: XFS drops create/delete files to 6.6% of EXT3 (software raid) and to 0.6% of EXT3 (3ware hardware raid) Message-ID: <20080426172321.1096faf5@galadriel.home> In-Reply-To: References: Organization: Intellique X-Mailer: Claws Mail 2.9.1 (GTK+ 2.8.20; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp7-g19.free.fr[212.27.42.64] X-Barracuda-Start-Time: 1209223426 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0001 1.0000 -2.0206 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.1, rules version 3.1.48902 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m3QFNAql002021 X-archive-position: 15596 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Wed, 23 Apr 2008 21:48:53 -0400 vous écriviez: > If anyone could give me some pointers, I would much appreciate it! You may greatly enhance performance on hardware RAID by using the "nobarrier" mount option. However in this case you must have proper power and/or optional 3Ware BBU (Battery backup unit). The BBU costs around 60 euros so I'd take it anyway ;) XFS is very (and sanely) touchy about the atomicity of logging operations. Each delete action implies several small seeks and writes ( at the very least one to the data volume and one to the log) and that hinders performance. "nobarrier" removes the enforcement to sync'ed disk writes to the log, however this is dangerous if you're having power supply problems. Another option wich gave very satisfactory results to me is to use an ultra-fast small SSD drive to store the filesystem log. However a single professional SSD is as expensive as a 3Ware 9650 + several high capacity SATA drives, but the combination is mostly comparable in performance to a SAS array of lesser capacity and much higher power consumption. -- -------------------------------------------------- Emmanuel Florac www.intellique.com -------------------------------------------------- From owner-xfs@oss.sgi.com Sat Apr 26 11:54:23 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 26 Apr 2008 11:54:41 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_44, J_CHICKENPOX_66 autolearn=no 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 m3QIsG8r015579 for ; Sat, 26 Apr 2008 11:54:23 -0700 X-ASG-Debug-ID: 1209236096-05d300760000-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 8451315EDBB0 for ; Sat, 26 Apr 2008 11:54:57 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id uEi7Mt5eowWenSby for ; Sat, 26 Apr 2008 11:54:57 -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 3035318004B63; Sat, 26 Apr 2008 13:54:55 -0500 (CDT) Message-ID: <48137A7E.4000202@sandeen.net> Date: Sat, 26 Apr 2008 13:54:54 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Denys Vlasenko CC: David Chinner , xfs@oss.sgi.com, Adrian Bunk , linux-kernel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Subject: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() References: <200804261651.02078.vda.linux@googlemail.com> In-Reply-To: <200804261651.02078.vda.linux@googlemail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1209236099 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.1, rules version 3.1.48916 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15597 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Denys Vlasenko wrote: > Hi David, > > This patch reduces xfs_bmap_btalloc() stack usage by 50 bytes > by moving part of its body into a helper function. > > This results in some variables not taking stack space in > xfs_bmap_btalloc() anymore. > > The helper itself does not call anything stack-deep. > Stack-deep call to xfs_alloc_vextent() happen > in xfs_bmap_btalloc(), as before. > > Compile tested only. > > Signed-off-by: Denys Vlasenko > -- > vda > Looks like a very good approach, it pushes a lot of large local vars off into the helper. There is one build-time problem if DEBUG is turned on: if (args.fsbno != NULLFSBLOCK) { ap->firstblock = ap->rval = args.fsbno; ASSERT(nullfb || fb_agno == args.agno || (ap->low && fb_agno < args.agno)); in xfs_bmap_btalloc, which no longer has an fb_agno variable which the ASSERT macro uses. Thanks, -Eric From owner-xfs@oss.sgi.com Sat Apr 26 12:47:22 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 26 Apr 2008 12:47:39 -0700 (PDT) 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=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 m3QJlL3E023615 for ; Sat, 26 Apr 2008 12:47:22 -0700 X-ASG-Debug-ID: 1209239283-05c101700000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from vorlon.fourfold.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2261615EDFF8 for ; Sat, 26 Apr 2008 12:48:03 -0700 (PDT) Received: from vorlon.fourfold.org (cpu2095.adsl.bellglobal.com [207.236.3.72]) by cuda.sgi.com with ESMTP id jzFrKEHmsfqoiW9H for ; Sat, 26 Apr 2008 12:48:03 -0700 (PDT) Received: from [127.0.0.1] (list@vorlon [127.0.0.1]) by vorlon.fourfold.org (8.13.4/8.13.4/Debian-3sarge3) with ESMTP id m3QJvlrY017503 for ; Sat, 26 Apr 2008 15:57:47 -0400 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-ASG-Orig-Subj: Your message to Mendo_recce awaits moderator approval Subject: Your message to Mendo_recce awaits moderator approval From: mendo_recce-bounces@fourfold.org To: xfs@oss.sgi.com Message-ID: Date: Sat, 26 Apr 2008 15:57:45 -0400 Precedence: bulk X-BeenThere: mendo_recce@fourfold.org X-Mailman-Version: 2.1.9 X-Barracuda-Connect: cpu2095.adsl.bellglobal.com[207.236.3.72] X-Barracuda-Start-Time: 1209239284 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0025 1.0000 -2.0047 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.45 X-Barracuda-Spam-Status: No, SCORE=-1.45 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.48918 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.55 NO_REAL_NAME From: does not include a real name X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15598 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: mendo_recce-bounces@fourfold.org Precedence: bulk X-list: xfs Your mail to 'Mendo_recce' with the subject Delivery failed Is being held until the list moderator can review it for approval. The reason it is being held: Post by non-member to a members-only list Either the message will get posted to the list, or you will receive notification of the moderator's decision. If you would like to cancel this posting, please visit the following URL: http://www.fourfold.org/cgi-bin/mailman/confirm/mendo_recce/5746252a364234070e5d467f1ea87bf2cadec03d From owner-xfs@oss.sgi.com Sat Apr 26 13:01:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 26 Apr 2008 13:01:55 -0700 (PDT) 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=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 m3QK1a0D024892 for ; Sat, 26 Apr 2008 13:01:37 -0700 X-ASG-Debug-ID: 1209240138-05c101c70000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp-out04.alice-dsl.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8013815EDC54 for ; Sat, 26 Apr 2008 13:02:18 -0700 (PDT) Received: from smtp-out04.alice-dsl.net (smtp-out04.alice-dsl.net [88.44.63.6]) by cuda.sgi.com with ESMTP id nbSJHCsyXqSZiYnH for ; Sat, 26 Apr 2008 13:02:18 -0700 (PDT) Received: from out.alice-dsl.de ([192.168.125.60]) by smtp-out04.alice-dsl.net with Microsoft SMTPSVC(6.0.3790.1830); Sat, 26 Apr 2008 21:55:26 +0200 Received: from basil.firstfloor.org ([92.224.153.175]) by out.alice-dsl.de with Microsoft SMTPSVC(6.0.3790.1830); Sat, 26 Apr 2008 21:55:25 +0200 Received: by basil.firstfloor.org (Postfix, from userid 1000) id 0B99B1B454E; Sat, 26 Apr 2008 22:02:17 +0200 (CEST) To: Denys Vlasenko Cc: David Chinner , xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Subject: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() From: Andi Kleen References: <200804261651.02078.vda.linux__2040.04651536724$1209223026$gmane$org@googlemail.com> Date: Sat, 26 Apr 2008 22:02:17 +0200 In-Reply-To: <200804261651.02078.vda.linux__2040.04651536724$1209223026$gmane$org@googlemail.com> (Denys Vlasenko's message of "Sat, 26 Apr 2008 16:51:02 +0200") Message-ID: <87iqy4wfjq.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-OriginalArrivalTime: 26 Apr 2008 19:55:25.0844 (UTC) FILETIME=[7850FD40:01C8A7D7] X-Barracuda-Connect: smtp-out04.alice-dsl.net[88.44.63.6] X-Barracuda-Start-Time: 1209240139 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.1, rules version 3.1.48920 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15599 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: andi@firstfloor.org Precedence: bulk X-list: xfs Denys Vlasenko writes: > > Compile tested only. You should mark the helper noinline just to prevent gcc from possibly inlining it. Even if it doesn't with your current compiler inline heuristics vary widely between compiler versions. -Andi From owner-xfs@oss.sgi.com Sat Apr 26 13:03:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 26 Apr 2008 13:03:30 -0700 (PDT) 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.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42, J_CHICKENPOX_44,J_CHICKENPOX_45,J_CHICKENPOX_46 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 m3QK36VV025021 for ; Sat, 26 Apr 2008 13:03:13 -0700 X-ASG-Debug-ID: 1209240228-094e01b00000-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 6B87278963B; Sat, 26 Apr 2008 13:03:48 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id jU8Kj8wQrareLXYE; Sat, 26 Apr 2008 13:03:48 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jpqcd-0002gW-Pu; Sat, 26 Apr 2008 20:03:47 +0000 Date: Sat, 26 Apr 2008 16:03:47 -0400 From: Christoph Hellwig To: Denys Vlasenko Cc: David Chinner , xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Subject: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Message-ID: <20080426200347.GA21021@infradead.org> References: <200804261651.02078.vda.linux@googlemail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200804261651.02078.vda.linux@googlemail.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209240229 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.1, rules version 3.1.48920 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15600 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Sat, Apr 26, 2008 at 04:51:02PM +0200, Denys Vlasenko wrote: > Hi David, > > This patch reduces xfs_bmap_btalloc() stack usage by 50 bytes > by moving part of its body into a helper function. > > This results in some variables not taking stack space in > xfs_bmap_btalloc() anymore. > > The helper itself does not call anything stack-deep. > Stack-deep call to xfs_alloc_vextent() happen > in xfs_bmap_btalloc(), as before. > > Compile tested only. I think this is a good idea, although I'd rather split the function at a local boundary. The patch below (which passes xfsqa) does that by splitting out the handling of the most complicated nullfb case out. It probably won't help reducing stack useage as much as yours, but it helps beeing able to read the code a little better. Index: linux-2.6-xfs/fs/xfs/xfs_bmap.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_bmap.c 2008-04-26 17:43:50.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_bmap.c 2008-04-26 18:03:08.000000000 +0200 @@ -2646,6 +2646,144 @@ xfs_bmap_rtalloc( return 0; } +STATIC void +xfs_bmap_btalloc_fix_blen( + xfs_mount_t *mp, + xfs_perag_t *pag, + xfs_extlen_t *blen) +{ + xfs_extlen_t need, delta, longest; + + need = XFS_MIN_FREELIST_PAG(pag, mp); + if (need > pag->pagf_flcount) + delta = need - pag->pagf_flcount; + else + delta = 0; + + if (pag->pagf_longest > delta) + longest = pag->pagf_longest - delta; + else + longest = (pag->pagf_flcount > 0 || + pag->pagf_longest > 0); + + if (*blen < longest) + *blen = longest; +} + +STATIC int +xfs_bmap_btalloc_nullfb( + xfs_bmalloca_t *ap, + xfs_alloc_arg_t *args, + xfs_extlen_t *blen) +{ + xfs_mount_t *mp = ap->ip->i_mount; + xfs_agnumber_t ag, startag; + int notinit = 0, error; + + if (ap->userdata && xfs_inode_is_filestream(ap->ip)) + args->type = XFS_ALLOCTYPE_NEAR_BNO; + else + args->type = XFS_ALLOCTYPE_START_BNO; + args->total = ap->total; + + /* + * Search for an allocation group with a single extent + * large enough for the request. + * + * If one isn't found, then adjust the minimum allocation + * size to the largest space found. + */ + startag = XFS_FSB_TO_AGNO(mp, args->fsbno); + if (startag == NULLAGNUMBER) + startag = 0; + + ag = startag; + down_read(&mp->m_peraglock); + while (*blen < ap->alen) { + xfs_perag_t *pag = &mp->m_perag[ag]; + + if (!pag->pagf_init) { + error = xfs_alloc_pagf_init(mp, args->tp, ag, + XFS_ALLOC_FLAG_TRYLOCK); + if (error) + goto out_unlock; + } + + /* + * See xfs_alloc_fix_freelist... + */ + if (pag->pagf_init) + xfs_bmap_btalloc_fix_blen(mp, pag, blen); + else + notinit = 1; + + if (xfs_inode_is_filestream(ap->ip)) { + if (*blen >= ap->alen) + break; + + if (ap->userdata) { + /* + * If startag is an invalid AG, we've come + * here once before and xfs_filestream_new_ag + * picked the best currently available. + * + * Don't continue looping, since we could + * loop forever. + */ + if (startag == NULLAGNUMBER) + break; + + error = xfs_filestream_new_ag(ap, &ag); + if (error) + goto out_unlock; + + /* loop again to set 'blen'*/ + startag = NULLAGNUMBER; + continue; + } + } + if (++ag == mp->m_sb.sb_agcount) + ag = 0; + if (ag == startag) + break; + } + up_read(&mp->m_peraglock); + + /* + * Since the above loop did a BUF_TRYLOCK, it is + * possible that there is space for this request. + */ + if (notinit || *blen < ap->minlen) + args->minlen = ap->minlen; + + /* + * If the best seen length is less than the request + * length, use the best as the minimum. + */ + else if (*blen < ap->alen) + args->minlen = *blen; + + /* + * Otherwise we've seen an extent as big as alen, + * use that as the minimum. + */ + else + args->minlen = ap->alen; + + /* + * Set the failure fallback case to look in the selected AG as + * the stream may have moved. + */ + if (xfs_inode_is_filestream(ap->ip)) + ap->rval = args->fsbno = XFS_AGB_TO_FSB(mp, ag, 0); + + return 0; + + out_unlock: + up_read(&mp->m_peraglock); + return error; +} + STATIC int xfs_bmap_btalloc( xfs_bmalloca_t *ap) /* bmap alloc argument struct */ @@ -2653,19 +2791,12 @@ xfs_bmap_btalloc( xfs_mount_t *mp; /* mount point structure */ xfs_alloctype_t atype = 0; /* type for allocation routines */ xfs_extlen_t align; /* minimum allocation alignment */ - xfs_agnumber_t ag; xfs_agnumber_t fb_agno; /* ag number of ap->firstblock */ - xfs_agnumber_t startag; xfs_alloc_arg_t args; xfs_extlen_t blen; - xfs_extlen_t delta; - xfs_extlen_t longest; - xfs_extlen_t need; xfs_extlen_t nextminlen = 0; - xfs_perag_t *pag; int nullfb; /* true if ap->firstblock isn't set */ int isaligned; - int notinit; int tryagain; int error; @@ -2682,6 +2813,8 @@ xfs_bmap_btalloc( fb_agno = nullfb ? NULLAGNUMBER : XFS_FSB_TO_AGNO(mp, ap->firstblock); if (nullfb) { if (ap->userdata && xfs_inode_is_filestream(ap->ip)) { + xfs_agnumber_t ag; + ag = xfs_filestream_lookup_ag(ap->ip); ag = (ag != NULLAGNUMBER) ? ag : 0; ap->rval = XFS_AGB_TO_FSB(mp, ag, 0); @@ -2712,107 +2845,9 @@ xfs_bmap_btalloc( args.firstblock = ap->firstblock; blen = 0; if (nullfb) { - if (ap->userdata && xfs_inode_is_filestream(ap->ip)) - args.type = XFS_ALLOCTYPE_NEAR_BNO; - else - args.type = XFS_ALLOCTYPE_START_BNO; - args.total = ap->total; - - /* - * Search for an allocation group with a single extent - * large enough for the request. - * - * If one isn't found, then adjust the minimum allocation - * size to the largest space found. - */ - startag = ag = XFS_FSB_TO_AGNO(mp, args.fsbno); - if (startag == NULLAGNUMBER) - startag = ag = 0; - notinit = 0; - down_read(&mp->m_peraglock); - while (blen < ap->alen) { - pag = &mp->m_perag[ag]; - if (!pag->pagf_init && - (error = xfs_alloc_pagf_init(mp, args.tp, - ag, XFS_ALLOC_FLAG_TRYLOCK))) { - up_read(&mp->m_peraglock); - return error; - } - /* - * See xfs_alloc_fix_freelist... - */ - if (pag->pagf_init) { - need = XFS_MIN_FREELIST_PAG(pag, mp); - delta = need > pag->pagf_flcount ? - need - pag->pagf_flcount : 0; - longest = (pag->pagf_longest > delta) ? - (pag->pagf_longest - delta) : - (pag->pagf_flcount > 0 || - pag->pagf_longest > 0); - if (blen < longest) - blen = longest; - } else - notinit = 1; - - if (xfs_inode_is_filestream(ap->ip)) { - if (blen >= ap->alen) - break; - - if (ap->userdata) { - /* - * If startag is an invalid AG, we've - * come here once before and - * xfs_filestream_new_ag picked the - * best currently available. - * - * Don't continue looping, since we - * could loop forever. - */ - if (startag == NULLAGNUMBER) - break; - - error = xfs_filestream_new_ag(ap, &ag); - if (error) { - up_read(&mp->m_peraglock); - return error; - } - - /* loop again to set 'blen'*/ - startag = NULLAGNUMBER; - continue; - } - } - if (++ag == mp->m_sb.sb_agcount) - ag = 0; - if (ag == startag) - break; - } - up_read(&mp->m_peraglock); - /* - * Since the above loop did a BUF_TRYLOCK, it is - * possible that there is space for this request. - */ - if (notinit || blen < ap->minlen) - args.minlen = ap->minlen; - /* - * If the best seen length is less than the request - * length, use the best as the minimum. - */ - else if (blen < ap->alen) - args.minlen = blen; - /* - * Otherwise we've seen an extent as big as alen, - * use that as the minimum. - */ - else - args.minlen = ap->alen; - - /* - * set the failure fallback case to look in the selected - * AG as the stream may have moved. - */ - if (xfs_inode_is_filestream(ap->ip)) - ap->rval = args.fsbno = XFS_AGB_TO_FSB(mp, ag, 0); + error = xfs_bmap_btalloc_nullfb(ap, &args, &blen); + if (error) + return error; } else if (ap->low) { if (xfs_inode_is_filestream(ap->ip)) args.type = XFS_ALLOCTYPE_FIRST_AG; From owner-xfs@oss.sgi.com Sat Apr 26 13:06:28 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 26 Apr 2008 13:06:41 -0700 (PDT) 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 m3QK6LGt025330 for ; Sat, 26 Apr 2008 13:06:28 -0700 X-ASG-Debug-ID: 1209240423-05c001c10000-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 468B115EDF12; Sat, 26 Apr 2008 13:07:03 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id FdFaSRJ6mq5CTWla; Sat, 26 Apr 2008 13:07:03 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jpqfl-0000mV-7g; Sat, 26 Apr 2008 20:07:01 +0000 Date: Sat, 26 Apr 2008 16:07:01 -0400 From: Christoph Hellwig To: Andi Kleen Cc: Denys Vlasenko , David Chinner , xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Subject: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Message-ID: <20080426200701.GA10883@infradead.org> References: <200804261651.02078.vda.linux__2040.04651536724$1209223026$gmane$org@googlemail.com> <87iqy4wfjq.fsf@basil.nowhere.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87iqy4wfjq.fsf@basil.nowhere.org> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209240424 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.1, rules version 3.1.48920 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15601 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Sat, Apr 26, 2008 at 10:02:17PM +0200, Andi Kleen wrote: > Denys Vlasenko writes: > > > > Compile tested only. > > You should mark the helper noinline just to prevent gcc from possibly > inlining it. Even if it doesn't with your current compiler inline heuristics > vary widely between compiler versions. STATIC as defined by xfs already does this.. From owner-xfs@oss.sgi.com Sat Apr 26 13:08:54 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 26 Apr 2008 13:09:02 -0700 (PDT) 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 (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 m3QK8m2Q025648 for ; Sat, 26 Apr 2008 13:08:54 -0700 X-ASG-Debug-ID: 1209240570-05d001fa0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2A4F915EDFE6 for ; Sat, 26 Apr 2008 13:09:30 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id q69CnChWUQLZkTYd for ; Sat, 26 Apr 2008 13:09:30 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3QK9NF3014240 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Sat, 26 Apr 2008 22:09:23 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3QK9N4b014238 for xfs@oss.sgi.com; Sat, 26 Apr 2008 22:09:23 +0200 Date: Sat, 26 Apr 2008 22:09:23 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] kill xfs_uuid_unmount Subject: [PATCH] kill xfs_uuid_unmount Message-ID: <20080426200923.GA14172@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209240571 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.1, rules version 3.1.48920 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15602 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Quite useless wrapper that doesn't help making the code more readable. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/xfs_mount.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.c 2008-04-25 20:40:50.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_mount.c 2008-04-25 20:48:27.000000000 +0200 @@ -47,7 +47,6 @@ STATIC int xfs_mount_log_sb(xfs_mount_t *, __int64_t); STATIC int xfs_uuid_mount(xfs_mount_t *); -STATIC void xfs_uuid_unmount(xfs_mount_t *mp); STATIC void xfs_unmountfs_wait(xfs_mount_t *); @@ -1262,7 +1261,7 @@ xfs_mountfs( /* FALLTHROUGH */ error1: if (uuid_mounted) - xfs_uuid_unmount(mp); + uuid_table_remove(&mp->m_sb.sb_uuid); xfs_freesb(mp); return error; } @@ -1343,7 +1342,7 @@ xfs_unmountfs(xfs_mount_t *mp, struct cr xfs_unmountfs_close(mp, cr); if ((mp->m_flags & XFS_MOUNT_NOUUID) == 0) - xfs_uuid_unmount(mp); + uuid_table_remove(&mp->m_sb.sb_uuid); #if defined(DEBUG) || defined(INDUCE_IO_ERROR) xfs_errortag_clearall(mp, 0); @@ -1905,16 +1904,6 @@ xfs_uuid_mount( } /* - * Remove filesystem from the UUID table. - */ -STATIC void -xfs_uuid_unmount( - xfs_mount_t *mp) -{ - uuid_table_remove(&mp->m_sb.sb_uuid); -} - -/* * Used to log changes to the superblock unit and width fields which could * be altered by the mount options, as well as any potential sb_features2 * fixup. Only the first superblock is updated. From owner-xfs@oss.sgi.com Sat Apr 26 13:10:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 26 Apr 2008 13:10:08 -0700 (PDT) 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 (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 m3QK9sEM025822 for ; Sat, 26 Apr 2008 13:10:00 -0700 X-ASG-Debug-ID: 1209240636-05d301f80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D76D015EE0B3 for ; Sat, 26 Apr 2008 13:10:36 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id soaoJNtc17svLbCE for ; Sat, 26 Apr 2008 13:10:36 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3QKAUF3014269 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Sat, 26 Apr 2008 22:10:30 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3QKAUIf014267 for xfs@oss.sgi.com; Sat, 26 Apr 2008 22:10:30 +0200 Date: Sat, 26 Apr 2008 22:10:29 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] merge xfs_mntupdate into xfs_fs_remount Subject: [PATCH] merge xfs_mntupdate into xfs_fs_remount Message-ID: <20080426201029.GB14172@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209240636 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.1, rules version 3.1.48920 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15603 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs xfs_mntupdate already is completely Linux specific due to the VFS flags passed in, so it might aswell be merged into xfs_fs_remount. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-04-25 20:42:43.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-04-25 20:44:55.000000000 +0200 @@ -52,6 +52,7 @@ #include "xfs_version.h" #include "xfs_log_priv.h" #include "xfs_trans_priv.h" +#include "xfs_filestream.h" #include #include @@ -1220,8 +1221,26 @@ xfs_fs_remount( int error; error = xfs_parseargs(mp, options, args, 1); - if (!error) - error = xfs_mntupdate(mp, flags, args); + if (error) + goto out_free_args; + + if (!(*flags & MS_RDONLY)) { /* rw/ro -> rw */ + if (mp->m_flags & XFS_MOUNT_RDONLY) + mp->m_flags &= ~XFS_MOUNT_RDONLY; + if (args->flags & XFSMNT_BARRIER) { + mp->m_flags |= XFS_MOUNT_BARRIER; + xfs_mountfs_check_barriers(mp); + } else { + mp->m_flags &= ~XFS_MOUNT_BARRIER; + } + } else if (!(mp->m_flags & XFS_MOUNT_RDONLY)) { /* rw -> ro */ + xfs_filestream_flush(mp); + xfs_sync(mp, SYNC_DATA_QUIESCE); + xfs_attr_quiesce(mp); + mp->m_flags |= XFS_MOUNT_RDONLY; + } + + out_free_args: kmem_free(args, sizeof(*args)); return -error; } Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.c 2008-04-25 20:42:43.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.c 2008-04-25 20:43:36.000000000 +0200 @@ -693,30 +693,6 @@ xfs_attr_quiesce( xfs_unmountfs_writesb(mp); } -int -xfs_mntupdate( - struct xfs_mount *mp, - int *flags, - struct xfs_mount_args *args) -{ - if (!(*flags & MS_RDONLY)) { /* rw/ro -> rw */ - if (mp->m_flags & XFS_MOUNT_RDONLY) - mp->m_flags &= ~XFS_MOUNT_RDONLY; - if (args->flags & XFSMNT_BARRIER) { - mp->m_flags |= XFS_MOUNT_BARRIER; - xfs_mountfs_check_barriers(mp); - } else { - mp->m_flags &= ~XFS_MOUNT_BARRIER; - } - } else if (!(mp->m_flags & XFS_MOUNT_RDONLY)) { /* rw -> ro */ - xfs_filestream_flush(mp); - xfs_sync(mp, SYNC_DATA_QUIESCE); - xfs_attr_quiesce(mp); - mp->m_flags |= XFS_MOUNT_RDONLY; - } - return 0; -} - /* * xfs_unmount_flush implements a set of flush operation on special * inodes, which are needed as a separate set of operations so that Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.h 2008-04-25 20:42:43.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.h 2008-04-25 20:42:48.000000000 +0200 @@ -11,8 +11,6 @@ struct xfs_mount_args; int xfs_mount(struct xfs_mount *mp, struct xfs_mount_args *args, struct cred *credp); int xfs_unmount(struct xfs_mount *mp, int flags, struct cred *credp); -int xfs_mntupdate(struct xfs_mount *mp, int *flags, - struct xfs_mount_args *args); int xfs_sync(struct xfs_mount *mp, int flags); void xfs_do_force_shutdown(struct xfs_mount *mp, int flags, char *fname, int lnnum); From owner-xfs@oss.sgi.com Sat Apr 26 13:19:49 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 26 Apr 2008 13:20:11 -0700 (PDT) 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 (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 m3QKJl4h027609 for ; Sat, 26 Apr 2008 13:19:49 -0700 X-ASG-Debug-ID: 1209241229-0530026f0000-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 62060F565F for ; Sat, 26 Apr 2008 13:20:29 -0700 (PDT) Received: from one.firstfloor.org (one.firstfloor.org [213.235.205.2]) by cuda.sgi.com with ESMTP id PwZ58kh2BEtuag6d for ; Sat, 26 Apr 2008 13:20:29 -0700 (PDT) Received: by one.firstfloor.org (Postfix, from userid 503) id EC6561B90074; Sat, 26 Apr 2008 22:26:30 +0200 (CEST) Date: Sat, 26 Apr 2008 22:26:30 +0200 From: Andi Kleen To: Christoph Hellwig Cc: Andi Kleen , Denys Vlasenko , David Chinner , xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Subject: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Message-ID: <20080426202630.GG17905@one.firstfloor.org> References: <200804261651.02078.vda.linux__2040.04651536724$1209223026$gmane$org@googlemail.com> <87iqy4wfjq.fsf@basil.nowhere.org> <20080426200701.GA10883@infradead.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080426200701.GA10883@infradead.org> User-Agent: Mutt/1.4.2.1i X-Barracuda-Connect: one.firstfloor.org[213.235.205.2] X-Barracuda-Start-Time: 1209241230 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.1, rules version 3.1.48922 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15604 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: andi@firstfloor.org Precedence: bulk X-list: xfs On Sat, Apr 26, 2008 at 04:07:01PM -0400, Christoph Hellwig wrote: > On Sat, Apr 26, 2008 at 10:02:17PM +0200, Andi Kleen wrote: > > Denys Vlasenko writes: > > > > > > Compile tested only. > > > > You should mark the helper noinline just to prevent gcc from possibly > > inlining it. Even if it doesn't with your current compiler inline heuristics > > vary widely between compiler versions. > > STATIC as defined by xfs already does this.. Weird. Unexpected. Different from everyone else. Is this some exercise in obfuscation? But ok. -Andi From owner-xfs@oss.sgi.com Sat Apr 26 13:22:51 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 26 Apr 2008 13:23:03 -0700 (PDT) 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 m3QKMgk0027969 for ; Sat, 26 Apr 2008 13:22:50 -0700 X-ASG-Debug-ID: 1209241404-05c902290000-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 42A8215EDD01; Sat, 26 Apr 2008 13:23:24 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id jCZ9abpBcyNfyJlw; Sat, 26 Apr 2008 13:23:24 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jpqvb-0007Lv-BM; Sat, 26 Apr 2008 20:23:23 +0000 Date: Sat, 26 Apr 2008 16:23:23 -0400 From: Christoph Hellwig To: Andi Kleen Cc: Christoph Hellwig , Denys Vlasenko , David Chinner , xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Subject: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Message-ID: <20080426202323.GA14245@infradead.org> References: <200804261651.02078.vda.linux__2040.04651536724$1209223026$gmane$org@googlemail.com> <87iqy4wfjq.fsf@basil.nowhere.org> <20080426200701.GA10883@infradead.org> <20080426202630.GG17905@one.firstfloor.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080426202630.GG17905@one.firstfloor.org> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209241405 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.1, rules version 3.1.48922 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15605 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Sat, Apr 26, 2008 at 10:26:30PM +0200, Andi Kleen wrote: > > STATIC as defined by xfs already does this.. > > Weird. Unexpected. Different from everyone else. Is this some exercise in > obfuscation? The whole STATIC thing is weird to start with.. Yes, it's kinda unexpected and at least I don't particularly liked it. But the inlining of functions with -funit-at-a-time was such a problem for the stack useage in XFS that it got added as least horrible bandaid. From owner-xfs@oss.sgi.com Sat Apr 26 16:06:15 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 26 Apr 2008 16:06:33 -0700 (PDT) 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.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_44, J_CHICKENPOX_66 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 m3QN6CSI006927 for ; Sat, 26 Apr 2008 16:06:15 -0700 X-ASG-Debug-ID: 1209251214-257f031c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fg-out-1718.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8B50EF5BC7 for ; Sat, 26 Apr 2008 16:06:54 -0700 (PDT) Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.154]) by cuda.sgi.com with ESMTP id 5kMvxxN3sGb9QrB6 for ; Sat, 26 Apr 2008 16:06:54 -0700 (PDT) Received: by fg-out-1718.google.com with SMTP id e12so3666309fga.8 for ; Sat, 26 Apr 2008 16:06:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:received:received:from:to:subject:date:user-agent:cc:references:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:message-id; bh=TRf5R94JPl/sbzeTIa9p10LpOEsxmqYI28yKPTlehZ4=; b=FiVQffh0x36XQp1QH0X++Xw20XgZyxQfz/iuwfrcCrGJDb5xQCBj2TYckFRvmLBY1BKfh4hpVQ+w/nxotXpPQ4eCXWS9KolT+oWKXUQzqQSZWR3JtrUhdwMWh1LJgdxlS9yOIMFIa3/m+tlu2uP0voKiHKqTzgConRf8emTys6c= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=from:to:subject:date:user-agent:cc:references:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:message-id; b=Z8t9MZMPrEbdJbtYK0liU7u4StDOj/iRqU4qw/yrMkjfisqZBLTs/WSPYSCdlrVbS1RUEk5urRdZ6cQf7tDgiSG9u09eQviRgPZH7ukUXys4pFkYbyX11H5rricg38V9scsbM7XcGEuAtCpdA0dqFE5uLiAzD8N5luqjbuiJn/E= Received: by 10.86.95.2 with SMTP id s2mr4395527fgb.44.1209251213869; Sat, 26 Apr 2008 16:06:53 -0700 (PDT) Received: from shadow ( [89.102.207.196]) by mx.google.com with ESMTPS id p9sm6900535fkb.14.2008.04.26.16.06.52 (version=SSLv3 cipher=RC4-MD5); Sat, 26 Apr 2008 16:06:52 -0700 (PDT) From: Denys Vlasenko To: Eric Sandeen X-ASG-Orig-Subj: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Subject: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Date: Sun, 27 Apr 2008 01:05:17 +0200 User-Agent: KMail/1.8.2 Cc: David Chinner , xfs@oss.sgi.com, Adrian Bunk , linux-kernel@vger.kernel.org References: <200804261651.02078.vda.linux@googlemail.com> <48137A7E.4000202@sandeen.net> In-Reply-To: <48137A7E.4000202@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200804270105.18096.vda.linux@googlemail.com> X-Barracuda-Connect: fg-out-1718.google.com[72.14.220.154] X-Barracuda-Start-Time: 1209251215 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.1, rules version 3.1.48932 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15606 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: vda.linux@googlemail.com Precedence: bulk X-list: xfs On Saturday 26 April 2008 20:54, Eric Sandeen wrote: > > This patch reduces xfs_bmap_btalloc() stack usage by 50 bytes > > by moving part of its body into a helper function. > > > > This results in some variables not taking stack space in > > xfs_bmap_btalloc() anymore. > > > > The helper itself does not call anything stack-deep. > > Stack-deep call to xfs_alloc_vextent() happen > > in xfs_bmap_btalloc(), as before. > > > > Compile tested only. > > > > Signed-off-by: Denys Vlasenko > > Looks like a very good approach, it pushes a lot of large local vars off > into the helper. > > There is one build-time problem if DEBUG is turned on: > > if (args.fsbno != NULLFSBLOCK) { > ap->firstblock = ap->rval = args.fsbno; > ASSERT(nullfb || fb_agno == args.agno || > (ap->low && fb_agno < args.agno)); > > in xfs_bmap_btalloc, which no longer has an fb_agno variable which the > ASSERT macro uses. Do you want me to rework and resend the patch? -- vda From owner-xfs@oss.sgi.com Sat Apr 26 16:45:35 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 26 Apr 2008 16:45:57 -0700 (PDT) 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 m3QNjYPD013981 for ; Sat, 26 Apr 2008 16:45:34 -0700 X-ASG-Debug-ID: 1209253573-1da600570000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fg-out-1718.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id DEAF215EE70D for ; Sat, 26 Apr 2008 16:46:13 -0700 (PDT) Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.157]) by cuda.sgi.com with ESMTP id mWBaSuPUlRL85MTF for ; Sat, 26 Apr 2008 16:46:13 -0700 (PDT) Received: by fg-out-1718.google.com with SMTP id e12so3677652fga.8 for ; Sat, 26 Apr 2008 16:46:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:received:received:from:to:subject:date:user-agent:cc:references:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:message-id; bh=g2wRRL941LN3F4BEDCmUe0uMpe/W8Ibh9o0LO/wUOHM=; b=QCIO3pNKAm4BLshpB568ADaua6w6E+449E/1CV2IYERDvuaoT2X2llhFsf81TvTw/AJPlMBjok6y+AMiCvvJQUZ1u7Rw4BEFRSOJnqvctv+VFA3uFvSoo/8r8NuEuwiHvYGTbGXvSC2qJG/LWDq+Cd0FRTvVun6YELWwGfLA6ow= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=from:to:subject:date:user-agent:cc:references:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:message-id; b=BdjfRnitkTIv9mLmrFc8WhCDGPEvqkk/QLzidZGgyiFvMed3BKFGpfcAcWNaegcZioKLY6oaJddeZD5g1FhssO5IxVsDvl5rWlf/OGpK1YfbCVRsXdVlEsdV6oyNUvwf/CZACWvhVEtvYQAFRNJSxWhy7OY7mqAOAlSr/70BEsY= Received: by 10.86.92.4 with SMTP id p4mr4435981fgb.2.1209253573007; Sat, 26 Apr 2008 16:46:13 -0700 (PDT) Received: from shadow ( [89.102.207.196]) by mx.google.com with ESMTPS id 12sm6956375fks.12.2008.04.26.16.46.11 (version=SSLv3 cipher=RC4-MD5); Sat, 26 Apr 2008 16:46:11 -0700 (PDT) From: Denys Vlasenko To: Christoph Hellwig X-ASG-Orig-Subj: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Subject: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Date: Sun, 27 Apr 2008 01:45:11 +0200 User-Agent: KMail/1.8.2 Cc: David Chinner , xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org References: <200804261651.02078.vda.linux@googlemail.com> <20080426200347.GA21021@infradead.org> In-Reply-To: <20080426200347.GA21021@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200804270145.11632.vda.linux@googlemail.com> X-Barracuda-Connect: fg-out-1718.google.com[72.14.220.157] X-Barracuda-Start-Time: 1209253576 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.1, rules version 3.1.48934 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15607 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: vda.linux@googlemail.com Precedence: bulk X-list: xfs On Saturday 26 April 2008 22:03, Christoph Hellwig wrote: > On Sat, Apr 26, 2008 at 04:51:02PM +0200, Denys Vlasenko wrote: > > Hi David, > > > > This patch reduces xfs_bmap_btalloc() stack usage by 50 bytes > > by moving part of its body into a helper function. > > > > This results in some variables not taking stack space in > > xfs_bmap_btalloc() anymore. > > I think this is a good idea, although I'd rather split the function at > a local boundary. The patch below (which passes xfsqa) does that > by splitting out the handling of the most complicated nullfb case > out. It probably won't help reducing stack useage as much as yours, > but it helps beeing able to read the code a little better. It saves only 16 bytes of stack. -- vda From owner-xfs@oss.sgi.com Sat Apr 26 17:47:19 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 26 Apr 2008 17:47:40 -0700 (PDT) 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 m3R0lJwc017867 for ; Sat, 26 Apr 2008 17:47:19 -0700 X-ASG-Debug-ID: 1209257280-558603db0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fg-out-1718.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4C58010C03C3 for ; Sat, 26 Apr 2008 17:48:01 -0700 (PDT) Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.152]) by cuda.sgi.com with ESMTP id dv4yuBZApzD6Lb8y for ; Sat, 26 Apr 2008 17:48:01 -0700 (PDT) Received: by fg-out-1718.google.com with SMTP id e12so3688918fga.8 for ; Sat, 26 Apr 2008 17:48:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:received:received:from:to:subject:date:user-agent:cc:mime-version:content-type:message-id; bh=OEZQot+dsFn1pogSlVhALsq3bq1N7WLB1P0Vw1DCYdg=; b=jsGG4ftuxvQFlQTkf4W5q17gyV5eWhOLj1GMoPdS4g8vwKDNEhcT+qzpCHr//YDfN9b0pansEuNLA9sClRYcw+oHzVQehi5iy6AIEsT9new+RIfQcxAr5W89DBMt8OtX2LzJuPNEbAxlEohzSYRe6E9IxZOdvkUC2GUqGf+tugw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=from:to:subject:date:user-agent:cc:mime-version:content-type:message-id; b=FlG5HVShux3qXUaNlol0k21xKxQQQFtbNDNLwnKSRYkC6HhnYdiL0f/q07+ZkEMavXrBIL1Wxsyx6yaeY4rNh77QcA5aaubRmjycIBEuzHRo0ZLBa+s95okn4LsQrMZ/Pc/MJc9U06SkMAvOkrcEqXIhZJg4h1y0DG2KZgAEnNc= Received: by 10.86.95.2 with SMTP id s2mr4473542fgb.6.1209257280493; Sat, 26 Apr 2008 17:48:00 -0700 (PDT) Received: from shadow ( [89.102.207.196]) by mx.google.com with ESMTPS id 28sm6992193fkx.11.2008.04.26.17.47.58 (version=SSLv3 cipher=RC4-MD5); Sat, 26 Apr 2008 17:47:59 -0700 (PDT) From: Denys Vlasenko To: David Chinner X-ASG-Orig-Subj: [PATCH] xfs: reduce stack usage in xfs_page_state_convert() Subject: [PATCH] xfs: reduce stack usage in xfs_page_state_convert() Date: Sun, 27 Apr 2008 02:46:58 +0200 User-Agent: KMail/1.8.2 Cc: xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_C08EI5Sq2GBn7oU" Message-Id: <200804270246.58828.vda.linux@googlemail.com> X-Barracuda-Connect: fg-out-1718.google.com[72.14.220.152] X-Barracuda-Start-Time: 1209257282 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1494 1.0000 -1.1045 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.10 X-Barracuda-Spam-Status: No, SCORE=-1.10 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.1, rules version 3.1.48939 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15608 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: vda.linux@googlemail.com Precedence: bulk X-list: xfs --Boundary-00=_C08EI5Sq2GBn7oU Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi David, This patch reduces xfs_page_state_convert() stack usage by 16 bytes by eliminating some local variables, and reducing the size of scope for other locals. Compile tested only. Signed-off-by: Denys Vlasenko P.S. xfs_page_state_convert() carries the following comment: * Calling this without startio set means we are being asked to make a dirty * page ready for freeing it's buffers. When called with startio set then * we are coming from writepage. which leads to the following proposal: reimplement it as two functions, one which work as if startio parameter == 0 and the other as if startio == 1. This will result in a bit of code duplication, but reduces stack usage on writepage path and allows for these two functions to have more descriptive names. (Presently the meaning of this function needs to be explained in that comment -> function name is not descriptive enough, because it does different things depending on startio value). Do you like this idea? -- vda --Boundary-00=_C08EI5Sq2GBn7oU Content-Type: text/x-diff; charset="us-ascii"; name="stk2.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="stk2.diff" diff -urpN linux-2.6-xfs1/fs/xfs/linux-2.6/xfs_aops.c linux-2.6-xfs1.stk2/fs/xfs/linux-2.6/xfs_aops.c --- linux-2.6-xfs1/fs/xfs/linux-2.6/xfs_aops.c 2008-04-22 04:06:46.000000000 +0200 +++ linux-2.6-xfs1.stk2/fs/xfs/linux-2.6/xfs_aops.c 2008-04-27 02:38:51.000000000 +0200 @@ -935,17 +935,11 @@ xfs_page_state_convert( unsigned long p_offset = 0; unsigned int type; __uint64_t end_offset; - pgoff_t end_index, last_index, tlast; - ssize_t size, len; + pgoff_t end_index, last_index; int flags, err, iomap_valid = 0, uptodate = 1; int page_dirty, count = 0; - int trylock = 0; int all_bh = unmapped; - - if (startio) { - if (wbc->sync_mode == WB_SYNC_NONE && wbc->nonblocking) - trylock |= BMAPI_TRYLOCK; - } +#define len (1 << inode->i_blkbits) /* Is this page beyond the end of the file? */ offset = i_size_read(inode); @@ -975,7 +969,6 @@ xfs_page_state_convert( */ end_offset = min_t(unsigned long long, (xfs_off_t)(page->index + 1) << PAGE_CACHE_SHIFT, offset); - len = 1 << inode->i_blkbits; p_offset = min_t(unsigned long, end_offset & (PAGE_CACHE_SIZE - 1), PAGE_CACHE_SIZE); p_offset = p_offset ? roundup(p_offset, len) : PAGE_CACHE_SIZE; @@ -1031,13 +1024,18 @@ xfs_page_state_convert( flags = BMAPI_WRITE | BMAPI_IGNSTATE; } else if (buffer_delay(bh)) { type = IOMAP_DELAY; - flags = BMAPI_ALLOCATE | trylock; + flags = BMAPI_ALLOCATE; + if (startio && wbc->sync_mode == WB_SYNC_NONE && wbc->nonblocking) { + flags = BMAPI_ALLOCATE | BMAPI_TRYLOCK; + } } else { type = IOMAP_NEW; flags = BMAPI_WRITE | BMAPI_MMAP; } if (!iomap_valid) { + ssize_t size; + /* * if we didn't have a valid mapping then we * need to ensure that we put the new mapping @@ -1082,6 +1080,8 @@ xfs_page_state_convert( * underneath it. Map the extent by reading it. */ if (!iomap_valid || flags != BMAPI_READ) { + ssize_t size; + flags = BMAPI_READ; size = xfs_probe_cluster(inode, page, bh, head, 1); @@ -1129,6 +1129,8 @@ xfs_page_state_convert( xfs_start_page_writeback(page, wbc, 1, count); if (ioend && iomap_valid) { + pgoff_t tlast; + offset = (iomap.iomap_offset + iomap.iomap_bsize - 1) >> PAGE_CACHE_SHIFT; tlast = min_t(pgoff_t, offset, last_index); @@ -1156,6 +1158,7 @@ error: ClearPageUptodate(page); } return err; +#undef len } /* --Boundary-00=_C08EI5Sq2GBn7oU-- From owner-xfs@oss.sgi.com Sat Apr 26 19:24:33 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 26 Apr 2008 19:24:57 -0700 (PDT) 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_33 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 m3R2OWOF024700 for ; Sat, 26 Apr 2008 19:24:33 -0700 X-ASG-Debug-ID: 1209263111-67e001900000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fg-out-1718.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2A238F6073 for ; Sat, 26 Apr 2008 19:25:12 -0700 (PDT) Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.159]) by cuda.sgi.com with ESMTP id sRQH29DvM7od0FlS for ; Sat, 26 Apr 2008 19:25:12 -0700 (PDT) Received: by fg-out-1718.google.com with SMTP id e12so3714749fga.8 for ; Sat, 26 Apr 2008 19:25:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:received:received:from:to:subject:date:user-agent:cc:mime-version:content-type:message-id; bh=0Pp2WvA1VnnFqmR3s4EVYkEp20hQukdb0wvGHOJvmgI=; b=g110PrZhJQ8TLx3cCa7SCO+GxmzIFGiuY4GdyEuqyTETtrcL8vTzQzgWBsHuQfot8RhH2hO3QUdTK2S+XXTpSeuP0pMJ8dXEe/V4qv997X4oZSzxgTEwXCO80k0Dz/JG/zZZDQJ1QY1o+bk684hGzb4L9L932APExISgT+e/FGw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=from:to:subject:date:user-agent:cc:mime-version:content-type:message-id; b=J9KJAF9cUpV0bq4SWHQ+784qMU7ENRG3rVh305K39XJFylzUX8XMxVDtKcSmKNRHB4WEgGfd7nPw7IT++Pm4NOOvx4D9/1UeFWNPxjFp5o/BSWlNBrUXuzowqqdSXV38IfJ3RiHqa7nJW40YludSbs+uiLaZb2sBp4/qp8nhwLQ= Received: by 10.86.95.2 with SMTP id s2mr4556804fgb.6.1209263111329; Sat, 26 Apr 2008 19:25:11 -0700 (PDT) Received: from shadow ( [89.102.207.196]) by mx.google.com with ESMTPS id p9sm7101470fkb.14.2008.04.26.19.25.09 (version=SSLv3 cipher=RC4-MD5); Sat, 26 Apr 2008 19:25:10 -0700 (PDT) From: Denys Vlasenko To: David Chinner , Al Viro X-ASG-Orig-Subj: [PATCH] vfs: reduce stack usage in write_cache_pages() Subject: [PATCH] vfs: reduce stack usage in write_cache_pages() Date: Sun, 27 Apr 2008 04:24:10 +0200 User-Agent: KMail/1.8.2 Cc: xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_KP+EIUHH3dxBdol" Message-Id: <200804270424.10343.vda.linux@googlemail.com> X-Barracuda-Connect: fg-out-1718.google.com[72.14.220.159] X-Barracuda-Start-Time: 1209263115 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.1, rules version 3.1.48945 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15609 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: vda.linux@googlemail.com Precedence: bulk X-list: xfs --Boundary-00=_KP+EIUHH3dxBdol Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi Al, David, vfs function write_cache_pages() appears on the xfs writeout path. It's *the* path which causes 4k stack overflows on i386 with xfs. This function uses ~100 bytes of stack on 32-bit i386. This patch transforms it a little so that it uses a bit less stack - minus 8 bytes to be precise. This isn't much, but it helps not only xfs, but all filesystems. Only compile tested. Signed-off-by: Denys Vlasenko -- vda --Boundary-00=_KP+EIUHH3dxBdol Content-Type: text/x-diff; charset="us-ascii"; name="stk3.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="stk3.diff" diff -urpN linux-2.6-xfs1/mm/page-writeback.c linux-2.6-xfs1.stk3/mm/page-writeback.c --- linux-2.6-xfs1/mm/page-writeback.c 2008-03-30 03:27:55.000000000 +0200 +++ linux-2.6-xfs1.stk3/mm/page-writeback.c 2008-04-27 04:14:39.000000000 +0200 @@ -798,17 +798,14 @@ int write_cache_pages(struct address_spa struct writeback_control *wbc, writepage_t writepage, void *data) { - struct backing_dev_info *bdi = mapping->backing_dev_info; int ret = 0; int done = 0; struct pagevec pvec; - int nr_pages; pgoff_t index; pgoff_t end; /* Inclusive */ int scanned = 0; - int range_whole = 0; - if (wbc->nonblocking && bdi_write_congested(bdi)) { + if (wbc->nonblocking && bdi_write_congested(mapping->backing_dev_info)) { wbc->encountered_congestion = 1; return 0; } @@ -820,20 +817,30 @@ int write_cache_pages(struct address_spa } else { index = wbc->range_start >> PAGE_CACHE_SHIFT; end = wbc->range_end >> PAGE_CACHE_SHIFT; - if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) - range_whole = 1; scanned = 1; } + + /* Minimizing stack use: + * "nr_pages" hopefully won't require a stack slot - + * we reuse "scanned" to keep its value. + */ + retry: - while (!done && (index <= end) && - (nr_pages = pagevec_lookup_tag(&pvec, mapping, &index, - PAGECACHE_TAG_DIRTY, - min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1))) { + while (!done && (index <= end)) { unsigned i; + int nr_pages; - scanned = 1; - for (i = 0; i < nr_pages; i++) { - struct page *page = pvec.pages[i]; + nr_pages = pagevec_lookup_tag(&pvec, mapping, &index, + PAGECACHE_TAG_DIRTY, + min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1); + if (!nr_pages) + break; + scanned = nr_pages; + /* "scanned" counts down to 1, and later acts as nonzero flag */ + + i = (unsigned)-1; + while (1) { /* for i in [0..nr_pages-1] */ + struct page *page = pvec.pages[++i]; /* * At this point we hold neither mapping->tree_lock nor @@ -872,10 +879,13 @@ retry: } if (ret || (--(wbc->nr_to_write) <= 0)) done = 1; - if (wbc->nonblocking && bdi_write_congested(bdi)) { + if (wbc->nonblocking && bdi_write_congested(mapping->backing_dev_info)) { wbc->encountered_congestion = 1; done = 1; } + if (scanned == 1) + break; + scanned--; } pagevec_release(&pvec); cond_resched(); @@ -889,7 +899,8 @@ retry: index = 0; goto retry; } - if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0)) + if (wbc->range_cyclic || (wbc->range_start == 0 && wbc->range_end == LLONG_MAX /* whole range */ + && wbc->nr_to_write > 0)) mapping->writeback_index = index; return ret; } --Boundary-00=_KP+EIUHH3dxBdol-- From owner-xfs@oss.sgi.com Sat Apr 26 21:17:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 26 Apr 2008 21:18:19 -0700 (PDT) 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 m3R4HwAD003759 for ; Sat, 26 Apr 2008 21:17:59 -0700 X-ASG-Debug-ID: 1209269918-100e01370000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fg-out-1718.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 591F710C0B3B for ; Sat, 26 Apr 2008 21:18:38 -0700 (PDT) Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.157]) by cuda.sgi.com with ESMTP id 6FSsjlDdAsk6lYM5 for ; Sat, 26 Apr 2008 21:18:38 -0700 (PDT) Received: by fg-out-1718.google.com with SMTP id e12so3742055fga.8 for ; Sat, 26 Apr 2008 21:18:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:received:received:from:to:subject:date:user-agent:cc:mime-version:content-type:message-id; bh=vcncnvh0vCh4m3ow4+Np4epm27zLs1mLtyHNGspy4Lw=; b=VvwtU1XyXnmiKuyJER1trXntVwei+u4f4l1FpNffICOYPKytjTZPlUO51NiIkhVj5fNxvGWN1vye14fryXt07YE+DlCYOcv46AehOofbkCOjYmwMIwd5FjC/jpPE2VpUQmKd3llt9iWmaIeTdN/z7hKYuRz4fMU66cJTslK73Ns= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=from:to:subject:date:user-agent:cc:mime-version:content-type:message-id; b=XEqf1WUZ/rm4CLkC7kNg1dD9YR4HxO1nQqT+KtWf+yYXZs0PZwx7rsDWyFv99ZOXOUBFruraGs+YAbpJjyfi4DQYB11vphwn8Be3vJHw2Q+DEFCPL++KKV3JAwKRLiDK7UHajGrGiswhvZmEoO+ICBETPiEXNm9PstbHo5/NjOA= Received: by 10.86.53.8 with SMTP id b8mr4647389fga.37.1209269917826; Sat, 26 Apr 2008 21:18:37 -0700 (PDT) Received: from shadow ( [89.102.207.196]) by mx.google.com with ESMTPS id 31sm7214785fkt.18.2008.04.26.21.18.34 (version=SSLv3 cipher=RC4-MD5); Sat, 26 Apr 2008 21:18:35 -0700 (PDT) From: Denys Vlasenko To: David Chinner , Benjamin LaHaise X-ASG-Orig-Subj: [PATCH] vfs: reduce stack usage by shrinking struct kiocb Subject: [PATCH] vfs: reduce stack usage by shrinking struct kiocb Date: Sun, 27 Apr 2008 06:17:36 +0200 User-Agent: KMail/1.8.2 Cc: xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-aio@kvack.org MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_g5/EI0ZahsCaZ9p" Message-Id: <200804270617.36629.vda.linux@googlemail.com> X-Barracuda-Connect: fg-out-1718.google.com[72.14.220.157] X-Barracuda-Start-Time: 1209269921 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0034 1.0000 -1.9989 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.00 X-Barracuda-Spam-Status: No, SCORE=-2.00 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.1, rules version 3.1.48953 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15610 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: vda.linux@googlemail.com Precedence: bulk X-list: xfs --Boundary-00=_g5/EI0ZahsCaZ9p Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi Al, Benjamin, David, struct kiocb is placed on stack by, for example, do_sync_write(). Eventually it contributes to xfs writeout path's stack usage, among others. This is *the* path which causes 4k stack overflows on i386 with xfs. This patch trivially reorders fields of this structure, and makes some of them smaller. Reordering helps 64-bit architectures: int, void*, int, void* - bad, int, int, void*, void* - better. These fields are made smaller: ki_flags: long -> short: possible values are 0,1,2, so short is enough. ki_nr_segs: ulong -> uint: nobody uses 4 billion element writev's (and it would not work anyway) ki_cur_seg: same For 32bit x86, it makes this struct only 4 bytes smaller. This isn't much, but it helps not only xfs, but all filesystems. For 64-bit case savings are a bit more significant, as ulong -> uint actually makes a difference, and reordering of 64-bit fields eliminates some padding. Only compile tested. Observed stack reductions on 32 bits: -sock_recvmsg [vmlinux]: 196 -sock_sendmsg [vmlinux]: 196 +sock_recvmsg [vmlinux]: 192 +sock_sendmsg [vmlinux]: 192 -do_sync_write [vmlinux]: 140 -do_sync_read [vmlinux]: 140 +do_sync_write [vmlinux]: 136 +do_sync_read [vmlinux]: 136 -do_sync_readv_writev [vmlinux]: 132 +do_sync_readv_writev [vmlinux]: 128 Signed-off-by: Denys Vlasenko -- vda --Boundary-00=_g5/EI0ZahsCaZ9p Content-Type: text/x-diff; charset="us-ascii"; name="stk4.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="stk4.diff" diff -urpN linux-2.6-xfs1/include/linux/aio.h linux-2.6-xfs1.stk4/include/linux/aio.h --- linux-2.6-xfs1/include/linux/aio.h 2008-03-30 03:27:54.000000000 +0200 +++ linux-2.6-xfs1.stk4/include/linux/aio.h 2008-04-27 05:47:09.000000000 +0200 @@ -86,7 +86,8 @@ struct kioctx; */ struct kiocb { struct list_head ki_run_list; - unsigned long ki_flags; + unsigned short ki_flags; /* range: 0..2 */ + unsigned short ki_opcode; int ki_users; unsigned ki_key; /* id of this request */ @@ -102,23 +103,22 @@ struct kiocb { } ki_obj; __u64 ki_user_data; /* user's data for completion */ - wait_queue_t ki_wait; loff_t ki_pos; + wait_queue_t ki_wait; void *private; /* State that we remember to be able to restart/retry */ - unsigned short ki_opcode; + /*unsigned short ki_opcode; - moved up for denser packing */ size_t ki_nbytes; /* copy of iocb->aio_nbytes */ - char __user *ki_buf; /* remaining iocb->aio_buf */ size_t ki_left; /* remaining bytes */ + unsigned ki_nr_segs; + unsigned ki_cur_seg; struct iovec ki_inline_vec; /* inline vector */ + char __user *ki_buf; /* remaining iocb->aio_buf */ struct iovec *ki_iovec; - unsigned long ki_nr_segs; - unsigned long ki_cur_seg; struct list_head ki_list; /* the aio core uses this * for cancellation */ - /* * If the aio_resfd field of the userspace iocb is not zero, * this is the underlying file* to deliver event to. --Boundary-00=_g5/EI0ZahsCaZ9p-- From owner-xfs@oss.sgi.com Sun Apr 27 16:22:52 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 16:23:00 -0700 (PDT) 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.0 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 m3RNMnuH003939 for ; Sun, 27 Apr 2008 16:22:51 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA24058; Mon, 28 Apr 2008 09:23:23 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3RNNKsT148633790; Mon, 28 Apr 2008 09:23:21 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3RNNHVd144715565; Mon, 28 Apr 2008 09:23:17 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 28 Apr 2008 09:23:17 +1000 From: David Chinner To: Denys Vlasenko Cc: David Chinner , xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org Subject: Re: [PATCH] xfs: reduce stack usage in xfs_page_state_convert() Message-ID: <20080427232317.GB103491721@sgi.com> References: <200804270246.58828.vda.linux@googlemail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200804270246.58828.vda.linux@googlemail.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15611 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Sun, Apr 27, 2008 at 02:46:58AM +0200, Denys Vlasenko wrote: > Hi David, > > This patch reduces xfs_page_state_convert() stack usage by 16 bytes > by eliminating some local variables, and reducing the size > of scope for other locals. > > Compile tested only. Can you start testing your patches? if you are touching the writeback or allocator path, there's a pretty high barrier to having patches excepted, and testing them before is one of them. Go and download the XFSQA suite from the xfs-cmds CVS tree on oss.sgi.com, and run your patches through it.... > Signed-off-by: Denys Vlasenko > > P.S. > > xfs_page_state_convert() carries the following comment: > * Calling this without startio set means we are being asked to make a dirty > * page ready for freeing it's buffers. When called with startio set then > * we are coming from writepage. > which leads to the following proposal: reimplement it as two > functions, one which work as if startio parameter == 0 > and the other as if startio == 1. > This will result in a bit of code duplication, but reduces > stack usage on writepage path and allows for these two functions > to have more descriptive names. (Presently the meaning of this > function needs to be explained in that comment -> function > name is not descriptive enough, because it does different things > depending on startio value). > > Do you like this idea? No. That code is complex enough with only one copy of it around. I don't want two copies that differ subtly and hence have two different sets of nasty, rarely hit corner cases in them. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Sun Apr 27 16:40:31 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 16:40:48 -0700 (PDT) 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.0 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 m3RNeSgw005144 for ; Sun, 27 Apr 2008 16:40:30 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA24475; Mon, 28 Apr 2008 09:41:02 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3RNexsT146972048; Mon, 28 Apr 2008 09:41:00 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3RNeugw147019958; Mon, 28 Apr 2008 09:40:56 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 28 Apr 2008 09:40:56 +1000 From: David Chinner To: Denys Vlasenko Cc: David Chinner , xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org Subject: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Message-ID: <20080427234056.GA108924158@sgi.com> References: <200804261651.02078.vda.linux@googlemail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200804261651.02078.vda.linux@googlemail.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15612 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Sat, Apr 26, 2008 at 04:51:02PM +0200, Denys Vlasenko wrote: > Hi David, > > This patch reduces xfs_bmap_btalloc() stack usage by 50 bytes > by moving part of its body into a helper function. Can you please attach your patches inline, Denys (see Documentation/SubmittingPatches)? > This results in some variables not taking stack space in > xfs_bmap_btalloc() anymore. > > The helper itself does not call anything stack-deep. > Stack-deep call to xfs_alloc_vextent() happen > in xfs_bmap_btalloc(), as before. I have a set of patches that introduces new functionality into the allocator (dynamic allocation policies) that reduces xfs_bmap_btalloc() function by 36 bytes (just by chance, I didn't design it for this purpose). It breaks it down on functional boundaries like Christoph's patch. I'm going to revist that patch w.r.t both these patches and see what falls out the bottom... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Sun Apr 27 16:48:40 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 16:48:48 -0700 (PDT) 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 m3RNmdO2006009 for ; Sun, 27 Apr 2008 16:48:40 -0700 X-ASG-Debug-ID: 1209340160-06dd010c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fg-out-1718.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2A04B10C45F5 for ; Sun, 27 Apr 2008 16:49:20 -0700 (PDT) Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.158]) by cuda.sgi.com with ESMTP id jyPpbVM4rcyVgw1K for ; Sun, 27 Apr 2008 16:49:20 -0700 (PDT) Received: by fg-out-1718.google.com with SMTP id e12so4052294fga.8 for ; Sun, 27 Apr 2008 16:49:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:received:received:from:to:subject:date:user-agent:cc:references:in-reply-to:mime-version:content-disposition:message-id:content-type:content-transfer-encoding; bh=SlWLVBr5x8itYyoa1CPSrSPx0WX1Uh47lEUNT6Fging=; b=INM1xd1kCMFFb4axotMbobEkEw/tchdEWoBDqi44a2VbOgafH/DhZTXMWj1xnxnU+ZEG4huVrCQxudF7Lw6YRaO0DxbZGytbiV8HlwpYnC2GBWMoz6LsHHyF/scbyhQq/zkYMYOVO3bpCV76v4wk/INebHxfXfDTDBNe5ECntpE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=from:to:subject:date:user-agent:cc:references:in-reply-to:mime-version:content-disposition:message-id:content-type:content-transfer-encoding; b=YaiEU4vew7TYc6JDLZvYggYqRtG6WX5G9hMUMoZuYsfjrmn9p1drnWTRXmLoOxVZ+EKRX/LtsovVYmASHKBUMSR9HV84rmR9tSt6Z3XWAE5wdxYjKOz3+ELK4d2+LSjA47JV3qAREpv8KWe4JvLP3Nf/OV6nRoYj3Btc14lOeNM= Received: by 10.86.92.4 with SMTP id p4mr6447602fgb.2.1209340159455; Sun, 27 Apr 2008 16:49:19 -0700 (PDT) Received: from shadow ( [89.102.207.196]) by mx.google.com with ESMTPS id d13sm8808340fka.7.2008.04.27.16.49.16 (version=SSLv3 cipher=RC4-MD5); Sun, 27 Apr 2008 16:49:16 -0700 (PDT) From: Denys Vlasenko To: David Chinner X-ASG-Orig-Subj: Re: [PATCH] xfs: reduce stack usage in xfs_page_state_convert() Subject: Re: [PATCH] xfs: reduce stack usage in xfs_page_state_convert() Date: Mon, 28 Apr 2008 01:48:22 +0200 User-Agent: KMail/1.8.2 Cc: xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org References: <200804270246.58828.vda.linux@googlemail.com> <20080427232317.GB103491721@sgi.com> In-Reply-To: <20080427232317.GB103491721@sgi.com> MIME-Version: 1.0 Content-Disposition: inline Message-Id: <200804280148.22358.vda.linux@googlemail.com> Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Barracuda-Connect: fg-out-1718.google.com[72.14.220.158] X-Barracuda-Start-Time: 1209340163 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1345 1.0000 -1.1899 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.19 X-Barracuda-Spam-Status: No, SCORE=-1.19 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.1, rules version 3.1.49031 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15613 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: vda.linux@googlemail.com Precedence: bulk X-list: xfs On Monday 28 April 2008 01:23, David Chinner wrote: > > This patch reduces xfs_page_state_convert() stack usage by 16 bytes > > by eliminating some local variables, and reducing the size > > of scope for other locals. > > > > Compile tested only. > > Can you start testing your patches? if you are touching the writeback > or allocator path, there's a pretty high barrier to having patches > excepted, and testing them before is one of them. Go and download the Its you who asked for patches. It's not like I decided to nag you because I have nothing better to do. Actually, my plate is pretty full with other things already. > XFSQA suite from the xfs-cmds CVS tree on oss.sgi.com, and run your > patches through it.... On Tuesday 22 April 2008 03:28, David Chinner wrote: > Patches are welcome - I'd be over the moon if any of the known 4k > stack advocates sent a stack reduction patch for XFS, but it seems > that actually trying to fix the problems is much harder than > resending a one line patch every few months.... So I went ahead and actually spend a good chunk of the week trying to help you. I believe that my patches were sufficiently well thought-out, carefully implemented and reasonably tested (for a guy who never used xfs, have no xfs partitions, and not exactly planning to use xfs in the future). > pretty high barrier to having patches accepted I was honestly trying to help you. I am still willing to do it, but at some point you have to carry some part of a burden (maybe review and run testing?). If you are not going to accept patches, why you are accusing people of not sending them to you? -- vda From owner-xfs@oss.sgi.com Sun Apr 27 16:57:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 16:57:43 -0700 (PDT) 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 m3RNvQIY006817 for ; Sun, 27 Apr 2008 16:57:27 -0700 X-ASG-Debug-ID: 1209340689-7e7502500000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fg-out-1718.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 14D5110C4BA9 for ; Sun, 27 Apr 2008 16:58:09 -0700 (PDT) Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.159]) by cuda.sgi.com with ESMTP id Js0iz0fF2a6i2Uf3 for ; Sun, 27 Apr 2008 16:58:09 -0700 (PDT) Received: by fg-out-1718.google.com with SMTP id e12so4054834fga.8 for ; Sun, 27 Apr 2008 16:58:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:received:received:from:to:subject:date:user-agent:cc:references:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:message-id; bh=3zG05DkgIWiT8Ggo7/E5FJZh4SDd4fTlTWu4bmBWyDE=; b=MALz7Yf5K1fJf2nezIKdHN6L3AIX4u1HZI/6VnOHwrpI/lsPdNtlBn9Bih2EfNjpRb+JMTf7QrRF5BE+29YKhgImKSiteXqDSjWISgqGu9kbrGUMfo+jHitl56BCLo6wl7cbB4mtjDGc1QW0nGLpAWlFyxEE55LLwpG8cq7/bw0= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=from:to:subject:date:user-agent:cc:references:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:message-id; b=C+7Xz7vBKxyPuU7WEMe9vHbr9lwp1/At0RE4Ysl0pU0vLEIUbPW2h9+vZTj34quhZ536hUl6g1+H/Idu22oQ58o603RAT0UQ4K2Oo4OqBVRQW52S8hT9EqmNgMHqyvkESRViXszR0v+hgeSKTB/hvr2DcXFYMxJwiRljHcf/2G4= Received: by 10.86.94.11 with SMTP id r11mr6446061fgb.1.1209340688642; Sun, 27 Apr 2008 16:58:08 -0700 (PDT) Received: from shadow ( [89.102.207.196]) by mx.google.com with ESMTPS id g28sm8799782fkg.2.2008.04.27.16.58.06 (version=SSLv3 cipher=RC4-MD5); Sun, 27 Apr 2008 16:58:07 -0700 (PDT) From: Denys Vlasenko To: David Chinner X-ASG-Orig-Subj: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Subject: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Date: Mon, 28 Apr 2008 01:57:12 +0200 User-Agent: KMail/1.8.2 Cc: xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org References: <200804261651.02078.vda.linux@googlemail.com> <20080427234056.GA108924158@sgi.com> In-Reply-To: <20080427234056.GA108924158@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200804280157.12736.vda.linux@googlemail.com> X-Barracuda-Connect: fg-out-1718.google.com[72.14.220.159] X-Barracuda-Start-Time: 1209340690 X-Barracuda-Bayes: INNOCENT GLOBAL 0.2440 1.0000 -0.6043 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.60 X-Barracuda-Spam-Status: No, SCORE=-0.60 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.1, rules version 3.1.49031 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15614 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: vda.linux@googlemail.com Precedence: bulk X-list: xfs On Monday 28 April 2008 01:40, David Chinner wrote: > On Sat, Apr 26, 2008 at 04:51:02PM +0200, Denys Vlasenko wrote: > > Hi David, > > > > This patch reduces xfs_bmap_btalloc() stack usage by 50 bytes > > by moving part of its body into a helper function. > > Can you please attach your patches inline, Denys (see > Documentation/SubmittingPatches)? I can, but Kmail is notorious for mangling them :( Is it ok if I will paste them inline AND attach them too, so that you get guaranteed-nonmangled one in attachment? > I have a set of patches that introduces new functionality into the > allocator (dynamic allocation policies) that reduces > xfs_bmap_btalloc() function by 36 bytes (just by chance, I didn't > design it for this purpose). It breaks it down on functional > boundaries like Christoph's patch. I'm going to revist that patch > w.r.t both these patches and see what falls out the bottom... Nice to know that. Can you point me to svn/CVS/git/whatever which holds latest xfs devel tree? -- vda From owner-xfs@oss.sgi.com Sun Apr 27 17:06:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 17:06:30 -0700 (PDT) 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.8 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 m3S06FPv007780 for ; Sun, 27 Apr 2008 17:06:18 -0700 X-ASG-Debug-ID: 1209341218-536500930000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from postoffice2.aconex.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F247AF8067 for ; Sun, 27 Apr 2008 17:06:58 -0700 (PDT) Received: from postoffice2.aconex.com (prod.aconex.com [203.89.192.138]) by cuda.sgi.com with ESMTP id 4cFeOeEj5c8hE4oK for ; Sun, 27 Apr 2008 17:06:58 -0700 (PDT) Received: from postoffice.aconex.com (localhost [127.0.0.1]) by postoffice2.aconex.com (Spam Firewall) with ESMTP id 33E5D5B0188; Mon, 28 Apr 2008 10:06:44 +1000 (EST) Received: from postoffice.aconex.com (postoffice.yarra.acx [192.168.3.1]) by postoffice2.aconex.com with ESMTP id hAECSRjOAshNA6M7; Mon, 28 Apr 2008 10:06:44 +1000 (EST) Received: from [192.168.5.76] (unknown [203.89.192.141]) by postoffice.aconex.com (Postfix) with ESMTP id 6464D92C0E3; Mon, 28 Apr 2008 10:06:52 +1000 (EST) X-ASG-Orig-Subj: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Subject: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() From: Nathan Scott Reply-To: nscott@aconex.com To: Christoph Hellwig Cc: Andi Kleen , Denys Vlasenko , David Chinner , xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org In-Reply-To: <20080426202323.GA14245@infradead.org> References: <200804261651.02078.vda.linux__2040.04651536724$1209223026$gmane$org@googlemail.com> <87iqy4wfjq.fsf@basil.nowhere.org> <20080426200701.GA10883@infradead.org> <20080426202630.GG17905@one.firstfloor.org> <20080426202323.GA14245@infradead.org> Content-Type: text/plain Organization: Aconex Date: Mon, 28 Apr 2008 10:06:51 +1000 Message-Id: <1209341212.23166.122.camel@edge.scott.net.au> Mime-Version: 1.0 X-Mailer: Evolution 2.22.1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: prod.aconex.com[203.89.192.138] X-Barracuda-Start-Time: 1209341218 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.1, rules version 3.1.49032 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15615 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: nscott@aconex.com Precedence: bulk X-list: xfs On Sat, 2008-04-26 at 16:23 -0400, Christoph Hellwig wrote: > > > > > Date: > Sat, 26 Apr 2008 16:23:23 -0400 > (Sun, 06:23 EST) > > > On Sat, Apr 26, 2008 at 10:26:30PM +0200, Andi Kleen wrote: > > > STATIC as defined by xfs already does this.. > > > > Weird. Unexpected. Different from everyone else. Is this some > exercise in > > obfuscation? > > The whole STATIC thing is weird to start with.. > Having to compile chunks of XFS code in both kernel and userspace is also wierd (relative to other drivers), and its a side-effect of needing to do that (all the code dealing with specifics of ondisk format is shared). cheers. -- Nathan From owner-xfs@oss.sgi.com Sun Apr 27 17:09:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 17:09:23 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_65 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 m3S095Ch008112 for ; Sun, 27 Apr 2008 17:09:06 -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 KAA25046; Mon, 28 Apr 2008 10:09:44 +1000 Message-ID: <481515C8.6020601@sgi.com> Date: Mon, 28 Apr 2008 10:09:44 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [PATCH, XFSQA] Don't run 175-177 if DMAPI is not supported References: <20080423013802.GJ103491721@sgi.com> <480EDE04.5080003@sgi.com> <20080424065822.GY103491721@sgi.com> In-Reply-To: <20080424065822.GY103491721@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15616 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs David Chinner wrote: > On Wed, Apr 23, 2008 at 04:58:12PM +1000, Timothy Shimmin wrote: >> Hi, >> >> _test_punch already does a umount $SCRATCH_MNT. >> However, IMHO, it would probably be nicer if one could >> use a _require_dmapi or really it may be simpler if >> we could roll it into common.dmapi >> so one just needs to include common.dmapi and >> it would complain at that point if the kernel >> didn't support it. > > Sure, but we don't have that, and I'm not about to spend the time to > convert >20 tests to something like this. Right now I just want to > remove all the bloody silly test failures on mainline kernels. > > All the other dmapi tests "not run" just fine, I want these to do > the same thing. Is that good enough to check in right now? > > Cheers, > > Dave. Sure, that's fine. I was really just suggesting to put: +# test that we have DMAPI support +_dmapi_scratch_mount +unmount $SCRATCH_MNT > /dev/null 2>&1 directly into common.dmapi - not as a function but just as code to always execute. As long as there is no output under normal circumstances from this, then all dmapi tests should not require any change and it is simpler (all they need is to include common.dmapi which most do). There may be an extra mount in some of the tests (for those that want to keep it mounted) but who cares. Why include common.dmapi if you don't require it to be supported :) --Tim From owner-xfs@oss.sgi.com Sun Apr 27 17:39:24 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 17:39:49 -0700 (PDT) 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.0 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 m3S0dKI3010997 for ; Sun, 27 Apr 2008 17:39:23 -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 KAA25571; Mon, 28 Apr 2008 10:39:57 +1000 Message-ID: <48151CDD.3070203@sgi.com> Date: Mon, 28 Apr 2008 10:39:57 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs-oss , xfs-dev Subject: Re: REVIEW: 980021 - fix up noattr2 mount option References: <480EC93D.9090103@sgi.com> <20080426063551.GA7193@infradead.org> In-Reply-To: <20080426063551.GA7193@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15617 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig wrote: > On Wed, Apr 23, 2008 at 03:29:33PM +1000, Timothy Shimmin wrote: >> Hi there, >> >> Mounting noattr2 in xfs fails to achieve anything AFAICT - >> and it certainly doesn't do anything useful. > > The patch looks correct in that it turns off attr2 when using the mount > option now. But the real question is why do we even need this option at > all? Good question. I guess I just feel with the problems we've had with attr2 so far, I feel it would be good to have an easy way to to go back if needed at this point (and the option is there though busted). Ideally, there would be no attr1 and no option to go back required. --Tim From owner-xfs@oss.sgi.com Sun Apr 27 19:38:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 19:38:30 -0700 (PDT) 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.0 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 m3S2brKs018883 for ; Sun, 27 Apr 2008 19:38:04 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA27571; Mon, 28 Apr 2008 12:38:14 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3S2c1sT148646898; Mon, 28 Apr 2008 12:38:06 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3S2bvV3148704200; Mon, 28 Apr 2008 12:37:57 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 28 Apr 2008 12:37:57 +1000 From: David Chinner To: Denys Vlasenko Cc: David Chinner , xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org Subject: Re: [PATCH] xfs: reduce stack usage in xfs_page_state_convert() Message-ID: <20080428023757.GB108924158@sgi.com> References: <200804270246.58828.vda.linux@googlemail.com> <20080427232317.GB103491721@sgi.com> <200804280148.22358.vda.linux@googlemail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200804280148.22358.vda.linux@googlemail.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15618 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 28, 2008 at 01:48:22AM +0200, Denys Vlasenko wrote: > On Monday 28 April 2008 01:23, David Chinner wrote: > > > This patch reduces xfs_page_state_convert() stack usage by 16 bytes > > > by eliminating some local variables, and reducing the size > > > of scope for other locals. > > > > > > Compile tested only. > > > > Can you start testing your patches? if you are touching the writeback > > or allocator path, there's a pretty high barrier to having patches > > excepted, and testing them before is one of them. Go and download the > > Its you who asked for patches. It's not like I decided > to nag you because I have nothing better to do. Actually, > my plate is pretty full with other things already. Yes, I asked for patches. That doesn't guarantee that we'll accept them, though, or apply criteria other than "does it compile?" when deciding whether to accept them. Given that an unnoticed error in the allocation and writeback paths could result in on-disk corruption on every single XFS filesystem that uses it, I consider asking patch submitters to do some testing (given that we have a test suite) not at all unreasonable. Cleanups like removing function args are trivial and we can easily review and test them (I'm doing that for several of your patches on ia64, x86_64 and UML), but factoring critical code is a different level. I note that Christoph's patch to the same code included a comment that "it passed XFSQA" - he is a long time contributor to XFS and knows that this is critical code and has performed the due diligence that we expect for changes to critical code. Basically, what I'm saying is that I'm not holding you to a standard that is different to anyone else contributing patches to XFS - it's the same standard patches from SGI XFS engineers are held to. Yes, it might be a higher standard than you are used to, but people make mistakes and the processes we use attempt to prevent mistakes that have been made in the past. > I was honestly trying to help you. I am still willing > to do it, but at some point you have to carry some part > of a burden (maybe review and run testing?). I am grateful for the time you have spent so far writing and sending patches, and encourage you to continue doing so. However, part of the overall burden of code changes has to be shared by the submitter. We're taking on the integration, QA and long term maintenance burden by accepting your patch. A bug in a patch could mean weeks of engineering time a year down the track when someone finally hits the corner case that triggers the bug. That burden is something you will never have to wear, but it's a major, major load on us and at some times completely absorbs all our resources. Hence to reduce the *burden on us* we ask that non-trivial patches or patches to critical sections of code are tested first by the submitter to help increase the initial code coverage of the patch. It saves us all lot of pain and expense in the long run.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Sun Apr 27 20:10:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 20:11:11 -0700 (PDT) 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.0 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 m3S3Ai5K020910 for ; Sun, 27 Apr 2008 20:10:46 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA28199; Mon, 28 Apr 2008 13:11:23 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3S3BMsT148186143; Mon, 28 Apr 2008 13:11:22 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3S3BKWB148689706; Mon, 28 Apr 2008 13:11:20 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 28 Apr 2008 13:11:20 +1000 From: David Chinner To: Christoph Hellwig Cc: David Chinner , Greg Banks , xfs-dev , xfs-oss Subject: Re: [PATCH] Don't initialise new inode generation numbers to zero V2 Message-ID: <20080428031120.GD103491721@sgi.com> References: <20080422015806.GU108924158@sgi.com> <480D641B.8060301@melbourne.sgi.com> <20080422050447.GV103491721@sgi.com> <20080425085750.GA6395@infradead.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080425085750.GA6395@infradead.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15619 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Fri, Apr 25, 2008 at 04:57:50AM -0400, Christoph Hellwig wrote: > On Tue, Apr 22, 2008 at 03:04:48PM +1000, David Chinner wrote: > > > I'm confused, why would an NFS client be trying to guess the generation > > > number? AFAICS the important thing is to ensure that the (inode,gen) > > > tuple isn't reused for a long time to prevent accidental filehandle > > > identity issues on clients; whether the gen is predictable or not > > > doesn't matter at all. > > > > Yeah, that's exactly what I said to Christoph, but that's the issue he > > raised w.r.t a malicious client triggering inode/gen collisions > > intentionally. If that's not a problem, then I can just use random32() > > for the inode number. If it is a real problem, then it needs to be > > a cryptographically secure random number. Personally, I don't care > > either way - I just want to get the issue fixed. > > > > Christoph, care to explain how and why this is a problem to everyone? > > XFS has some heuristics for inode placement and of course for removing > the inode cluster and re-allocting it. I have a gut feeling that there > is a small chance to trigger a re-use via nfs operations. Making the > initial generation number random means we remove one of the major > user-triggerable inputs from the equation. Ok, so is random32() good enough or does it need to be get_random_int()? Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Sun Apr 27 20:24:58 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 20:25:21 -0700 (PDT) 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=BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from relay.sgi.com (relay2.corp.sgi.com [192.26.58.22]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m3S3Ovil026455 for ; Sun, 27 Apr 2008 20:24:58 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by relay2.corp.sgi.com (Postfix) with ESMTP id C2E0E304079; Sun, 27 Apr 2008 20:25:37 -0700 (PDT) Received: from [134.14.55.15] (dhcp15.melbourne.sgi.com [134.14.55.15]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3S3PXjm745507; Mon, 28 Apr 2008 13:25:33 +1000 (AEST) Message-ID: <48154364.3070208@melbourne.sgi.com> Date: Mon, 28 Apr 2008 13:24:20 +1000 From: Greg Banks Organization: File Serving Technologies ; Silicon Graphics Inc. User-Agent: Thunderbird 1.5.0.12 (X11/20060911) MIME-Version: 1.0 To: Christoph Hellwig CC: David Chinner , xfs-dev , xfs-oss Subject: Re: [PATCH] Don't initialise new inode generation numbers to zero V2 References: <20080422015806.GU108924158@sgi.com> <480D641B.8060301@melbourne.sgi.com> <20080422050447.GV103491721@sgi.com> <20080425085750.GA6395@infradead.org> In-Reply-To: <20080425085750.GA6395@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15620 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: gnb@melbourne.sgi.com Precedence: bulk X-list: xfs Christoph Hellwig wrote: > On Tue, Apr 22, 2008 at 03:04:48PM +1000, David Chinner wrote: > >> >> Christoph, care to explain how and why this is a problem to everyone? >> > > XFS has some heuristics for inode placement and of course for removing > the inode cluster and re-allocting it. I have a gut feeling that there > is a small chance to trigger a re-use via nfs operations. Dave's initial patch -- please correct me if I misunderstood it -- kept a per-AG counter which was used to initialise the generation number of new inodes. This counter incremented every time an inode was created in that AG, i.e. every mknod() mkdir() or creat() bumps the counter for the appropriate AG. So it served as a per-AG inode generation number, which given the fixed mapping between AG and inode# means it's just like a per-inode generation number but sparser. Thus the only way you could cause a re-use of an (inode,gen) tuple would be by cycling through 2^32-1 inode creations anywhere in the same AG before destroying and re-creating the original inode. That's as good a protection as 32bits is going to buy. So if Dave's first patch works the way I think it works, it should be just fine for NFS' purposes. Am I missing something? -- Greg Banks, P.Engineer, SGI Australian Software Group. The cake is *not* a lie. I don't speak for SGI. From owner-xfs@oss.sgi.com Sun Apr 27 20:32:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 20:32:48 -0700 (PDT) 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.0 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 m3S3WZrG026985 for ; Sun, 27 Apr 2008 20:32:37 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA28643; Mon, 28 Apr 2008 13:33:00 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3S3WvsT148511352; Mon, 28 Apr 2008 13:32:57 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3S3WnRc148651424; Mon, 28 Apr 2008 13:32:49 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 28 Apr 2008 13:32:49 +1000 From: David Chinner To: David Chinner Cc: Denys Vlasenko , xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org Subject: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Message-ID: <20080428033249.GE103491721@sgi.com> References: <200804261651.02078.vda.linux@googlemail.com> <20080427234056.GA108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080427234056.GA108924158@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15621 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 28, 2008 at 09:40:56AM +1000, David Chinner wrote: > On Sat, Apr 26, 2008 at 04:51:02PM +0200, Denys Vlasenko wrote: > > Hi David, > > > > This patch reduces xfs_bmap_btalloc() stack usage by 50 bytes > > by moving part of its body into a helper function. > > Can you please attach your patches inline, Denys (see > Documentation/SubmittingPatches)? > > > This results in some variables not taking stack space in > > xfs_bmap_btalloc() anymore. > > > > The helper itself does not call anything stack-deep. > > Stack-deep call to xfs_alloc_vextent() happen > > in xfs_bmap_btalloc(), as before. > > I have a set of patches that introduces new functionality into the > allocator (dynamic allocation policies) that reduces > xfs_bmap_btalloc() function by 36 bytes (just by chance, I didn't > design it for this purpose). It breaks it down on functional > boundaries like Christoph's patch. I'm going to revist that patch > w.r.t both these patches and see what falls out the bottom... 44 bytes saved in xfs_bmap_btalloc with the same factoring as Christoph's patch being done. Given that most of this is now the struct xfs_alloc_arg, I don't think this will be reduced a whole lot more. I think I might be able to kill the tryagain and isaligned variables as well which will save another 8 bytes, but I'll leave that for later.... Good progress, folks. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Sun Apr 27 20:32:50 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 20:32:57 -0700 (PDT) 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 m3S3WkK4027004 for ; Sun, 27 Apr 2008 20:32:48 -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 NAA28648; Mon, 28 Apr 2008 13:33:23 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id 0403858C4C15; Mon, 28 Apr 2008 13:33:22 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - fix non-smp xfs build Message-Id: <20080428033323.0403858C4C15@chook.melbourne.sgi.com> Date: Mon, 28 Apr 2008 13:33:22 +1000 (EST) From: lachlan@sgi.com (Lachlan McIlroy) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15622 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs fix non-smp xfs build xfs_reserve_blocks() calls xfs_icsb_sync_counters_locked(), which is not defined if !CONFIG_SMP/!HAVE_PERCPU_SB Signed-off-by: Eric Sandeen Date: Mon Apr 28 13:32:33 AEST 2008 Workarea: redback.melbourne.sgi.com:/home/lachlan/isms/2.6.x-clean Inspected by: sandeen@sandeen.net 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:30991a fs/xfs/xfs_mount.h - 1.264 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.h.diff?r1=text&tr1=1.264&r2=text&tr2=1.263&f=h - fix non-smp xfs build From owner-xfs@oss.sgi.com Sun Apr 27 20:49:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 20:49:37 -0700 (PDT) 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.0 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 m3S3nF0P028647 for ; Sun, 27 Apr 2008 20:49:17 -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 NAA29043; Mon, 28 Apr 2008 13:49:55 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 6361B58C4C15; Mon, 28 Apr 2008 13:49:55 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 980706 - xfsqa 165 - fails if environment LANG != C Message-Id: <20080428034955.6361B58C4C15@chook.melbourne.sgi.com> Date: Mon, 28 Apr 2008 13:49:55 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15623 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs xfsqa 165 - fails if environment LANG != C Date: Mon Apr 28 13:49:18 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/xfs-cmds Inspected by: bnaujok@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:30992a xfstests/common.config - 1.130 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/common.config.diff?r1=text&tr1=1.130&r2=text&tr2=1.129&f=h - export the language that all tests will run under to prevent language settings from affecting test output and giving spurious failures when comparing against golden output. From owner-xfs@oss.sgi.com Sun Apr 27 20:50:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 20:51:11 -0700 (PDT) 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 m3S3opu1028787 for ; Sun, 27 Apr 2008 20:50:59 -0700 X-ASG-Debug-ID: 1209354694-3b5f02610000-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 2C7B511DECA1; Sun, 27 Apr 2008 20:51:34 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id rY8GSGm5wY8eWtjs; Sun, 27 Apr 2008 20:51:34 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JqKOr-00046d-Ug; Mon, 28 Apr 2008 03:51:33 +0000 Date: Sun, 27 Apr 2008 23:51:33 -0400 From: Christoph Hellwig To: David Chinner Cc: Denys Vlasenko , xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH] xfs: reduce stack usage in xfs_page_state_convert() Subject: Re: [PATCH] xfs: reduce stack usage in xfs_page_state_convert() Message-ID: <20080428035133.GB14275@infradead.org> References: <200804270246.58828.vda.linux@googlemail.com> <20080427232317.GB103491721@sgi.com> <200804280148.22358.vda.linux@googlemail.com> <20080428023757.GB108924158@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080428023757.GB108924158@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209354695 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.1, rules version 3.1.49047 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15625 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs Note that I'm happy to revisit and test patches by others if they are useful enough. Please add me to the CC list in that case. From owner-xfs@oss.sgi.com Sun Apr 27 20:49:49 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 20:50:02 -0700 (PDT) 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 m3S3nh0V028686 for ; Sun, 27 Apr 2008 20:49:49 -0700 X-ASG-Debug-ID: 1209354624-2f7b00460000-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 71736F8839; Sun, 27 Apr 2008 20:50:25 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id GnDesCXGP5hHglYL; Sun, 27 Apr 2008 20:50:25 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JqKNj-00043D-HO; Mon, 28 Apr 2008 03:50:23 +0000 Date: Sun, 27 Apr 2008 23:50:23 -0400 From: Christoph Hellwig To: David Chinner Cc: Denys Vlasenko , xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH] xfs: reduce stack usage in xfs_page_state_convert() Subject: Re: [PATCH] xfs: reduce stack usage in xfs_page_state_convert() Message-ID: <20080428035023.GA14275@infradead.org> References: <200804270246.58828.vda.linux@googlemail.com> <20080427232317.GB103491721@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080427232317.GB103491721@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209354626 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.1, rules version 3.1.49048 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15624 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Mon, Apr 28, 2008 at 09:23:17AM +1000, David Chinner wrote: > No. That code is complex enough with only one copy of it around. I don't > want two copies that differ subtly and hence have two different sets > of nasty, rarely hit corner cases in them. Actually the split makes some sense. I had a ready patch to split out releasepage which makes the whole code a lot nicer. I didn't go forward with it because I had this idea that it would get replaced by Chris extent_map stuff ASAP.. From owner-xfs@oss.sgi.com Sun Apr 27 20:52:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 20:52:55 -0700 (PDT) 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.0 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 m3S3qi2g029037 for ; Sun, 27 Apr 2008 20:52:47 -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 NAA29163; Mon, 28 Apr 2008 13:53:24 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 07EE158C4C15; Mon, 28 Apr 2008 13:53:23 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 980706 - Use configured XFS_IO_PROG binary Message-Id: <20080428035324.07EE158C4C15@chook.melbourne.sgi.com> Date: Mon, 28 Apr 2008 13:53:23 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15626 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Use configured XFS_IO_PROG binary We should use XFS_IO_PROG variable rather than calling xfs_io directly and relying on teh path to pick up the correct binary for the test. Date: Mon Apr 28 13:53:03 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/xfs-cmds Inspected by: bnaujok@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:30993a xfstests/165 - 1.3 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/165.diff?r1=text&tr1=1.3&r2=text&tr2=1.2&f=h xfstests/164 - 1.4 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/164.diff?r1=text&tr1=1.4&r2=text&tr2=1.3&f=h - Use XFS_IO_PROG, not xfs_io. From owner-xfs@oss.sgi.com Sun Apr 27 20:57:31 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 20:57:39 -0700 (PDT) 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.0 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 m3S3vScS029775 for ; Sun, 27 Apr 2008 20:57:30 -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 NAA29266; Mon, 28 Apr 2008 13:58:07 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id BE07058C4C15; Mon, 28 Apr 2008 13:58:07 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 979083 - XFSQA 166 - fix filter for stripe aligned filesystems Message-Id: <20080428035807.BE07058C4C15@chook.melbourne.sgi.com> Date: Mon, 28 Apr 2008 13:58:07 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15627 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs fix filter for stripe aligned filesystems Flags has extra bits set in it xfs_bmap output when the filesyste is using stripe alignment. Fix the test to only look at the unwritten flag. Capture the xfs_bmap output as well so failures can be debugged easily. Date: Mon Apr 28 13:57:43 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/xfs-cmds Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:30994a xfstests/166 - 1.4 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/166.diff?r1=text&tr1=1.4&r2=text&tr2=1.3&f=h - fix filter for stripe aligned filesystems. From owner-xfs@oss.sgi.com Sun Apr 27 21:00:05 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 21:00:23 -0700 (PDT) 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.0 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 m3S4011x030246 for ; Sun, 27 Apr 2008 21:00:03 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA29455; Mon, 28 Apr 2008 14:00:39 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3S40csT148696684; Mon, 28 Apr 2008 14:00:39 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3S40bZB148619405; Mon, 28 Apr 2008 14:00:37 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 28 Apr 2008 14:00:37 +1000 From: David Chinner To: David Chinner Cc: xfs-dev , xfs-oss Subject: Re: [patch] xfsqa - 008 is unreliable on 64k page size Message-ID: <20080428040037.GF103491721@sgi.com> References: <20080408013833.GN108924158@sgi.com> <20080410044259.GI108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080410044259.GI108924158@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15628 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs ping again? On Thu, Apr 10, 2008 at 02:42:59PM +1000, David Chinner wrote: > Ping? > > On Tue, Apr 08, 2008 at 11:38:33AM +1000, David Chinner wrote: > > Test 008 is unreliable on 64k page size. The I/O size is large > > enough that the probability of extent merging results in intermittent > > failures due to fewer extents that the +/- 10% tolerance allows. > > > > Fix by making the files larger. > > > > Signed-off-by: Dave Chinner > > --- > > xfstests/008 | 10 +++++----- > > xfstests/008.out | 10 +++++----- > > 2 files changed, 10 insertions(+), 10 deletions(-) > > > > Index: xfs-cmds/xfstests/008 > > =================================================================== > > --- xfs-cmds.orig/xfstests/008 2006-11-14 19:57:39.000000000 +1100 > > +++ xfs-cmds/xfstests/008 2008-04-08 10:18:10.641024202 +1000 > > @@ -79,13 +79,13 @@ _setup_testdir > > > > rm -f $here/$seq.out.full > > > > -_do_test 1 50 "-l 5000000 -c 50 -b $pgsize" > > -_do_test 2 100 "-l 10000000 -c 100 -b $pgsize" > > -_do_test 3 100 "-l 10000000 -c 100 -b 512" # test partial pages > > +_do_test 1 50 "-l 50000000 -c 50 -b $pgsize" > > +_do_test 2 100 "-l 100000000 -c 100 -b $pgsize" > > +_do_test 3 100 "-l 100000000 -c 100 -b 512" # test partial pages > > > > # rinse, lather, repeat for direct IO > > -_do_test 4 50 "-d -l 5000000 -c 50 -b $pgsize" > > -_do_test 5 100 "-d -l 10000000 -c 100 -b $pgsize" > > +_do_test 4 50 "-d -l 50000000 -c 50 -b $pgsize" > > +_do_test 5 100 "-d -l 100000000 -c 100 -b $pgsize" > > # note: direct IO requires page aligned IO > > > > # todo: realtime. > > Index: xfs-cmds/xfstests/008.out > > =================================================================== > > --- xfs-cmds.orig/xfstests/008.out 2006-11-14 19:57:39.000000000 +1100 > > +++ xfs-cmds/xfstests/008.out 2008-04-08 11:25:52.584176769 +1000 > > @@ -1,21 +1,21 @@ > > QA output created by 008 > > > > -randholes.1 : -l 5000000 -c 50 -b PGSIZE > > +randholes.1 : -l 50000000 -c 50 -b PGSIZE > > ------------------------------------------ > > holes is in range > > > > -randholes.2 : -l 10000000 -c 100 -b PGSIZE > > +randholes.2 : -l 100000000 -c 100 -b PGSIZE > > ------------------------------------------ > > holes is in range > > > > -randholes.3 : -l 10000000 -c 100 -b 512 > > +randholes.3 : -l 100000000 -c 100 -b 512 > > ------------------------------------------ > > holes is in range > > > > -randholes.4 : -d -l 5000000 -c 50 -b PGSIZE > > +randholes.4 : -d -l 50000000 -c 50 -b PGSIZE > > ------------------------------------------ > > holes is in range > > > > -randholes.5 : -d -l 10000000 -c 100 -b PGSIZE > > +randholes.5 : -d -l 100000000 -c 100 -b PGSIZE > > ------------------------------------------ > > holes is in range > > -- > Dave Chinner > Principal Engineer > SGI Australian Software Group -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Sun Apr 27 22:52:10 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 22:52:16 -0700 (PDT) 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.5 required=5.0 tests=AWL,BAYES_00,SUBJ_TICKET 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 m3S5q6A5004628 for ; Sun, 27 Apr 2008 22:52:08 -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 PAA01409; Mon, 28 Apr 2008 15:52:37 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 1BD0358C4C15; Mon, 28 Apr 2008 15:52:37 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 980887 - remove xfs_log_ticket_zone on rmmod Message-Id: <20080428055237.1BD0358C4C15@chook.melbourne.sgi.com> Date: Mon, 28 Apr 2008 15:52:37 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15629 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs remove xfs_log_ticket_zone on rmmod Fix bug introduced in commit eb01c9cd87c7a9998c2edf209721ea069e3e3652 aka "[XFS] Remove the xlog_ticket allocator" Signed-off-by: Alexey Dobriyan Date: Mon Apr 28 15:52:22 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: adobriyan@gmail.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30995a fs/xfs/xfs_vfsops.c - 1.562 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vfsops.c.diff?r1=text&tr1=1.562&r2=text&tr2=1.561&f=h - remove xfs_log_ticket_zone on rmmod From owner-xfs@oss.sgi.com Sun Apr 27 22:54:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 22:55:01 -0700 (PDT) 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 m3S5sUQW004783 for ; Sun, 27 Apr 2008 22:54:37 -0700 X-ASG-Debug-ID: 1209362112-11f100340000-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 0A814F8E3D; Sun, 27 Apr 2008 22:55:12 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id nwBpvrOPbLDXTvF5; Sun, 27 Apr 2008 22:55:12 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JqMKV-0005Ob-MT; Mon, 28 Apr 2008 05:55:11 +0000 Date: Mon, 28 Apr 2008 01:55:11 -0400 From: Christoph Hellwig To: David Chinner Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [patch] xfsqa - 008 is unreliable on 64k page size Subject: Re: [patch] xfsqa - 008 is unreliable on 64k page size Message-ID: <20080428055511.GA3192@infradead.org> References: <20080408013833.GN108924158@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080408013833.GN108924158@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209362114 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.1, rules version 3.1.49054 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15630 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Tue, Apr 08, 2008 at 11:38:33AM +1000, David Chinner wrote: > Test 008 is unreliable on 64k page size. The I/O size is large > enough that the probability of extent merging results in intermittent > failures due to fewer extents that the +/- 10% tolerance allows. Looks good. From owner-xfs@oss.sgi.com Sun Apr 27 22:56:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 22:56:18 -0700 (PDT) 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 m3S5tsEm004947 for ; Sun, 27 Apr 2008 22:56:03 -0700 X-ASG-Debug-ID: 1209362197-4fe800440000-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 906A315F39FA; Sun, 27 Apr 2008 22:56:37 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 1arN75704s7Tk95u; Sun, 27 Apr 2008 22:56:37 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JqMLl-00079c-IT; Mon, 28 Apr 2008 05:56:29 +0000 Date: Mon, 28 Apr 2008 01:56:29 -0400 From: Christoph Hellwig To: Nathan Scott Cc: Christoph Hellwig , Andi Kleen , Denys Vlasenko , David Chinner , xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Subject: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Message-ID: <20080428055629.GB3192@infradead.org> References: <200804261651.02078.vda.linux__2040.04651536724$1209223026$gmane$org@googlemail.com> <87iqy4wfjq.fsf@basil.nowhere.org> <20080426200701.GA10883@infradead.org> <20080426202630.GG17905@one.firstfloor.org> <20080426202323.GA14245@infradead.org> <1209341212.23166.122.camel@edge.scott.net.au> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1209341212.23166.122.camel@edge.scott.net.au> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209362197 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.1, rules version 3.1.49054 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15631 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Mon, Apr 28, 2008 at 10:06:51AM +1000, Nathan Scott wrote: > Having to compile chunks of XFS code in both kernel and > userspace is also wierd (relative to other drivers), and > its a side-effect of needing to do that (all the code > dealing with specifics of ondisk format is shared). There would be neater ways to deal with that, but then again there are more urgent things to tackle. And for the time beeing using STATIC to imply non-inline is actually a very useful hack for XFS. From owner-xfs@oss.sgi.com Sun Apr 27 22:57:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 22:57:51 -0700 (PDT) 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 m3S5vXVI005160 for ; Sun, 27 Apr 2008 22:57:39 -0700 X-ASG-Debug-ID: 1209362296-4fea00540000-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 A285D15F3C04; Sun, 27 Apr 2008 22:58:16 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id d4rkOuIrsxhIxK5F; Sun, 27 Apr 2008 22:58:16 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JqMNU-0007ge-55; Mon, 28 Apr 2008 05:58:16 +0000 Date: Mon, 28 Apr 2008 01:58:16 -0400 From: Christoph Hellwig To: Timothy Shimmin Cc: xfs-oss , xfs-dev X-ASG-Orig-Subj: Re: REVIEW: 980021 - fix up noattr2 mount option Subject: Re: REVIEW: 980021 - fix up noattr2 mount option Message-ID: <20080428055816.GC3192@infradead.org> References: <480EC93D.9090103@sgi.com> <20080426063551.GA7193@infradead.org> <48151CDD.3070203@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48151CDD.3070203@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209362296 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.1, rules version 3.1.49054 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15632 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Mon, Apr 28, 2008 at 10:39:57AM +1000, Timothy Shimmin wrote: > Good question. > I guess I just feel with the problems we've had with attr2 so far, > I feel it would be good to have an easy way to to go back if needed > at this point (and the option is there though busted). > Ideally, there would be no attr1 and no option to go back required. It was more of a rhetorical quesiton anyway given that the option has been around for a while. so consider this a positive review for the patch. From owner-xfs@oss.sgi.com Sun Apr 27 22:58:55 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 22:59:08 -0700 (PDT) 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 m3S5wkvZ005349 for ; Sun, 27 Apr 2008 22:58:55 -0700 X-ASG-Debug-ID: 1209362362-425d02010000-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 8BD511213E80; Sun, 27 Apr 2008 22:59:22 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id NPlSdSnFVAD8BA8b; Sun, 27 Apr 2008 22:59:22 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JqMOY-0007h5-21; Mon, 28 Apr 2008 05:59:22 +0000 Date: Mon, 28 Apr 2008 01:59:22 -0400 From: Christoph Hellwig To: David Chinner Cc: Christoph Hellwig , Greg Banks , xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] Don't initialise new inode generation numbers to zero V2 Subject: Re: [PATCH] Don't initialise new inode generation numbers to zero V2 Message-ID: <20080428055922.GD3192@infradead.org> References: <20080422015806.GU108924158@sgi.com> <480D641B.8060301@melbourne.sgi.com> <20080422050447.GV103491721@sgi.com> <20080425085750.GA6395@infradead.org> <20080428031120.GD103491721@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080428031120.GD103491721@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209362369 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.1, rules version 3.1.49053 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15633 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Mon, Apr 28, 2008 at 01:11:20PM +1000, David Chinner wrote: > Ok, so is random32() good enough or does it need to be get_random_int()? I'm not sure offhand what random32 actually is, but a not cryptographically strong random number should be enough. From owner-xfs@oss.sgi.com Sun Apr 27 23:00:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 23:00:07 -0700 (PDT) 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.0 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 m3S5xrmm005588 for ; Sun, 27 Apr 2008 22:59:57 -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 QAA01730; Mon, 28 Apr 2008 16:00:30 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id C80A858C4C15; Mon, 28 Apr 2008 16:00:30 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 980007 - XFSQA 008 - Fix intermittent failure on 64k pagesize Message-Id: <20080428060030.C80A858C4C15@chook.melbourne.sgi.com> Date: Mon, 28 Apr 2008 16:00:30 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15634 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Fix intermittent failure on 64k pagesize Files are too small for 64k sized I/Os to reliably produce 50 extents +/-10%. Increase the size of the files to increase reliability. Date: Mon Apr 28 16:00:06 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/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:30996a xfstests/008 - 1.14 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/008.diff?r1=text&tr1=1.14&r2=text&tr2=1.13&f=h xfstests/008.out - 1.4 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/008.out.diff?r1=text&tr1=1.4&r2=text&tr2=1.3&f=h - Fix intermittent failure on 64k pagesize. From owner-xfs@oss.sgi.com Sun Apr 27 23:20:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 23:20:22 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42 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 m3S6Jt2o008578 for ; Sun, 27 Apr 2008 23:19:57 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA02313; Mon, 28 Apr 2008 16:20:34 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3S6KXsT148774994; Mon, 28 Apr 2008 16:20:34 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3S6KWmc148682924; Mon, 28 Apr 2008 16:20:32 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 28 Apr 2008 16:20:32 +1000 From: David Chinner To: Christoph Hellwig Cc: David Chinner , Greg Banks , xfs-dev , xfs-oss Subject: Re: [PATCH] Don't initialise new inode generation numbers to zero V2 Message-ID: <20080428062032.GI103491721@sgi.com> References: <20080422015806.GU108924158@sgi.com> <480D641B.8060301@melbourne.sgi.com> <20080422050447.GV103491721@sgi.com> <20080425085750.GA6395@infradead.org> <20080428031120.GD103491721@sgi.com> <20080428055922.GD3192@infradead.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080428055922.GD3192@infradead.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15635 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 28, 2008 at 01:59:22AM -0400, Christoph Hellwig wrote: > On Mon, Apr 28, 2008 at 01:11:20PM +1000, David Chinner wrote: > > Ok, so is random32() good enough or does it need to be get_random_int()? > > I'm not sure offhand what random32 actually is, but a not > cryptographically strong random number should be enough. From lib/random32.c: This is a maximally equidistributed combined Tausworthe generator based on code from GNU Scientific Library 1.5 (30 Jun 2004) x_n = (s1_n ^ s2_n ^ s3_n) s1_{n+1} = (((s1_n & 4294967294) <<12) ^ (((s1_n <<13) ^ s1_n) >>19)) s2_{n+1} = (((s2_n & 4294967288) << 4) ^ (((s2_n << 2) ^ s2_n) >>25)) s3_{n+1} = (((s3_n & 4294967280) <<17) ^ (((s3_n << 3) ^ s3_n) >>11)) The period of this generator is about 2^88. From: P. L'Ecuyer, "Maximally Equidistributed Combined Tausworthe Generators", Mathematics of Computation, 65, 213 (1996), 203--213. ----- And uses per-cpu state to for the next number. Should be good enough. Patch below. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group --- Don't initialise new inode generation numbers to zero When we allocation new inode chunks, we initialise the generation numbers to zero. This works fine until we delete a chunk and then reallocate it, resulting in the same inode numbers but with a reset generation count. This can result in inode/generation pairs of different inodes occurring relatively close together. Given that the inode/gen pair makes up the "unique" portion of an NFS filehandle on XFS, this can result in file handles cached on clients being seen on the wire from the server but refer to a different file. This causes .... issues for NFS clients. Hence we need a unique generation number initialisation for each inode to prevent reuse of a small portion of the generation number space. Make this initialiser per-allocation group so that it is not a single point of contention in the filesystem, and increment it on every allocation within an AG to reduce the chance that a generation number is reused for a given inode number if the inode chunk is deleted and reallocated immediately afterwards. Version 3: o use random32 rather than get_random_int() as cryptographically secure random numbers are not really necessary here. Version 2: o remove persistent per-AGI agi_newinogen field and replace with randomly generated 32 bit number for each new cluster. This prevents NFS clients from potentially guessing what the next generation number is going to be and removes the need for persistent numbers on disk. Signed-off-by: Dave Chinner --- fs/xfs/xfs_ialloc.c | 10 ++++++++++ 1 file changed, 10 insertions(+) Index: 2.6.x-xfs-new/fs/xfs/xfs_ialloc.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_ialloc.c 2008-04-28 16:12:57.376445802 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_ialloc.c 2008-04-28 16:15:04.427919630 +1000 @@ -147,6 +147,7 @@ xfs_ialloc_ag_alloc( int version; /* inode version number to use */ int isaligned = 0; /* inode allocation at stripe unit */ /* boundary */ + unsigned int gen; args.tp = tp; args.mp = tp->t_mountp; @@ -290,6 +291,14 @@ xfs_ialloc_ag_alloc( else version = XFS_DINODE_VERSION_1; + /* + * Seed the new inode cluster with a random generation number. This + * prevents short-term reuse of generation numbers if a chunk is + * freed and then immediately reallocated. We use random numbers + * rather than a linear progression to prevent the next generation + * number from easily guessable. + */ + gen = random32(); for (j = 0; j < nbufs; j++) { /* * Get the block. @@ -309,6 +318,7 @@ xfs_ialloc_ag_alloc( free = XFS_MAKE_IPTR(args.mp, fbuf, i); free->di_core.di_magic = cpu_to_be16(XFS_DINODE_MAGIC); free->di_core.di_version = version; + free->di_core.di_gen = cpu_to_be32(gen); free->di_next_unlinked = cpu_to_be32(NULLAGINO); xfs_ialloc_log_di(tp, fbuf, i, XFS_DI_CORE_BITS | XFS_DI_NEXT_UNLINKED); From owner-xfs@oss.sgi.com Sun Apr 27 23:25:17 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 23:25:29 -0700 (PDT) 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_42 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 m3S6PBSX008984 for ; Sun, 27 Apr 2008 23:25:17 -0700 X-ASG-Debug-ID: 1209363947-11e100c70000-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 4CB4A78A47A; Sun, 27 Apr 2008 23:25:47 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id xU6vR5uhIfkrBhGa; Sun, 27 Apr 2008 23:25:47 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JqMo7-0003YU-1N; Mon, 28 Apr 2008 06:25:47 +0000 Date: Mon, 28 Apr 2008 02:25:47 -0400 From: Christoph Hellwig To: David Chinner Cc: Christoph Hellwig , Greg Banks , xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] Don't initialise new inode generation numbers to zero V2 Subject: Re: [PATCH] Don't initialise new inode generation numbers to zero V2 Message-ID: <20080428062546.GA9310@infradead.org> References: <20080422015806.GU108924158@sgi.com> <480D641B.8060301@melbourne.sgi.com> <20080422050447.GV103491721@sgi.com> <20080425085750.GA6395@infradead.org> <20080428031120.GD103491721@sgi.com> <20080428055922.GD3192@infradead.org> <20080428062032.GI103491721@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080428062032.GI103491721@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209363954 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.1, rules version 3.1.49054 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15636 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs Looks good. On Mon, Apr 28, 2008 at 04:20:32PM +1000, David Chinner wrote: > Don't initialise new inode generation numbers to zero > > When we allocation new inode chunks, we initialise the generation > numbers to zero. This works fine until we delete a chunk and then > reallocate it, resulting in the same inode numbers but with a > reset generation count. This can result in inode/generation > pairs of different inodes occurring relatively close together. > > Given that the inode/gen pair makes up the "unique" portion of > an NFS filehandle on XFS, this can result in file handles cached > on clients being seen on the wire from the server but refer to > a different file. This causes .... issues for NFS clients. > > Hence we need a unique generation number initialisation for > each inode to prevent reuse of a small portion of the generation > number space. Make this initialiser per-allocation group so > that it is not a single point of contention in the filesystem, > and increment it on every allocation within an AG to reduce the > chance that a generation number is reused for a given inode number > if the inode chunk is deleted and reallocated immediately > afterwards. > > Version 3: > o use random32 rather than get_random_int() as cryptographically > secure random numbers are not really necessary here. > > Version 2: > o remove persistent per-AGI agi_newinogen field and replace with > randomly generated 32 bit number for each new cluster. This prevents > NFS clients from potentially guessing what the next generation > number is going to be and removes the need for persistent numbers on > disk. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_ialloc.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > Index: 2.6.x-xfs-new/fs/xfs/xfs_ialloc.c > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_ialloc.c 2008-04-28 16:12:57.376445802 +1000 > +++ 2.6.x-xfs-new/fs/xfs/xfs_ialloc.c 2008-04-28 16:15:04.427919630 +1000 > @@ -147,6 +147,7 @@ xfs_ialloc_ag_alloc( > int version; /* inode version number to use */ > int isaligned = 0; /* inode allocation at stripe unit */ > /* boundary */ > + unsigned int gen; > > args.tp = tp; > args.mp = tp->t_mountp; > @@ -290,6 +291,14 @@ xfs_ialloc_ag_alloc( > else > version = XFS_DINODE_VERSION_1; > > + /* > + * Seed the new inode cluster with a random generation number. This > + * prevents short-term reuse of generation numbers if a chunk is > + * freed and then immediately reallocated. We use random numbers > + * rather than a linear progression to prevent the next generation > + * number from easily guessable. > + */ > + gen = random32(); > for (j = 0; j < nbufs; j++) { > /* > * Get the block. > @@ -309,6 +318,7 @@ xfs_ialloc_ag_alloc( > free = XFS_MAKE_IPTR(args.mp, fbuf, i); > free->di_core.di_magic = cpu_to_be16(XFS_DINODE_MAGIC); > free->di_core.di_version = version; > + free->di_core.di_gen = cpu_to_be32(gen); > free->di_next_unlinked = cpu_to_be32(NULLAGINO); > xfs_ialloc_log_di(tp, fbuf, i, > XFS_DI_CORE_BITS | XFS_DI_NEXT_UNLINKED); ---end quoted text--- From owner-xfs@oss.sgi.com Sun Apr 27 23:26:17 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 23:26:24 -0700 (PDT) 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.0 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 m3S6Q85p009114 for ; Sun, 27 Apr 2008 23:26:13 -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 QAA02468; Mon, 28 Apr 2008 16:26:46 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 5FC2658C4C15; Mon, 28 Apr 2008 16:26:46 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 980654 - Don't double count reserved block changes on UP. Message-Id: <20080428062646.5FC2658C4C15@chook.melbourne.sgi.com> Date: Mon, 28 Apr 2008 16:26:46 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15637 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Don't double count reserved block changes on UP. On uniprocessor machines, the incore superblock is used for all in memory accounting of free blocks. in this situation, changes to the reserved block count are accounted twice; once directly and once via xfs_mod_incore_sb(). Seeing as the modification on SMP is done via xfs_mod_incore_sb(), make this the only update mechanism that UP uses as well. Date: Mon Apr 28 16:26:28 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: lachlan@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30997a fs/xfs/xfs_fsops.c - 1.134 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_fsops.c.diff?r1=text&tr1=1.134&r2=text&tr2=1.133&f=h - Don't double count reserved block changes on UP. From owner-xfs@oss.sgi.com Sun Apr 27 23:33:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 27 Apr 2008 23:33:54 -0700 (PDT) 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.0 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 m3S6XYbX010149 for ; Sun, 27 Apr 2008 23:33:36 -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 QAA02853; Mon, 28 Apr 2008 16:34:13 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 5BEDD58C4C15; Mon, 28 Apr 2008 16:34:13 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 980888 - Fix check for block zero access in xfs_write_iomap_allocate Message-Id: <20080428063413.5BEDD58C4C15@chook.melbourne.sgi.com> Date: Mon, 28 Apr 2008 16:34:13 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15638 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Fix check for block zero access in xfs_write_iomap_allocate() The check for block zero access should be done on non-realtime inodes. Fix the logic error in xfs_write_iomap_allocate(), and simplify the logic on all checks for block zero access in xfs_iomap.c Date: Mon Apr 28 16:33:53 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: lachlan@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:30998a fs/xfs/xfs_iomap.c - 1.64 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_iomap.c.diff?r1=text&tr1=1.64&r2=text&tr2=1.63&f=h - Fix check for block zero access in xfs_write_iomap_allocate(). From owner-xfs@oss.sgi.com Mon Apr 28 02:41:56 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 02:42:23 -0700 (PDT) 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 m3S9fsB9030104 for ; Mon, 28 Apr 2008 02:41:56 -0700 X-ASG-Debug-ID: 1209375756-243600f50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id DDBB11214AED for ; Mon, 28 Apr 2008 02:42:36 -0700 (PDT) Received: from smtp8-g19.free.fr (smtp8-g19.free.fr [212.27.42.65]) by cuda.sgi.com with ESMTP id UBzyfBS4VqjAk2Bh for ; Mon, 28 Apr 2008 02:42:36 -0700 (PDT) Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by smtp8-g19.free.fr (Postfix) with ESMTP id CE8F117F588; Mon, 28 Apr 2008 11:42:35 +0200 (CEST) Received: from harpe.intellique.com (labo.djinux.com [82.225.196.72]) by smtp8-g19.free.fr (Postfix) with ESMTP id 980C517F561; Mon, 28 Apr 2008 11:42:35 +0200 (CEST) Date: Mon, 28 Apr 2008 11:42:38 +0200 From: Emmanuel Florac To: "Dovydas Sankauskas" , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: disk I/O error Subject: Re: disk I/O error Message-ID: <20080428114238.67b5a633@harpe.intellique.com> In-Reply-To: <1d3e8bf0804220842r26411f51vc714da371255aa90@mail.gmail.com> References: <1d3e8bf0804220842r26411f51vc714da371255aa90@mail.gmail.com> Organization: Intellique X-Mailer: Claws Mail 3.0.2 (GTK+ 2.12.9; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp8-g19.free.fr[212.27.42.65] X-Barracuda-Start-Time: 1209375757 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0001 1.0000 -2.0206 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.1, rules version 3.1.49071 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m3S9fuB9030108 X-archive-position: 15639 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Tue, 22 Apr 2008 15:42:45 +0000 "Dovydas Sankauskas" écrivait: > Any insight on what has happened and what are my chances to restore > data? Here are my logs. The disk physically died while in use. You may try to cycle power a couple of times on it, it may revive it for a while. If this is not enough, maybe the USB interface is broken. You can remove the drive from the enclosure and use a direct ATA or SATA connection to your PC and see if it works any better. If the disk isn't detected when using a direct ATA or SATA connection, it's dead once and for all, and your only hope would be Ontrack or another data recovery service. If the disk is detected but partially readable (I/O errors), you may repair it using disk tools like SpinRite. Last, if the disk is detected but completely unreadable, _sometimes_ putting it to the freezer for 15 minutes in a very closely sealed plastic bag /may/ revive it for a while, as a very last resort. -- ---------------------------------------- Emmanuel Florac | Intellique ---------------------------------------- From owner-xfs@oss.sgi.com Mon Apr 28 03:28:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 03:29:06 -0700 (PDT) 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,J_CHICKENPOX_24, J_CHICKENPOX_53 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 m3SASeRU001584 for ; Mon, 28 Apr 2008 03:28:48 -0700 X-ASG-Debug-ID: 1209378563-243502dc0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo201.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 30EF312150A4 for ; Mon, 28 Apr 2008 03:29:23 -0700 (PDT) Received: from tyo201.gate.nec.co.jp (TYO201.gate.nec.co.jp [202.32.8.193]) by cuda.sgi.com with ESMTP id xJi5sdv26kWQkRyj for ; Mon, 28 Apr 2008 03:29:23 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate53E.nec.co.jp [10.7.69.161]) by tyo201.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m3SATMEO000497; Mon, 28 Apr 2008 19:29:22 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m3SATLj02239; Mon, 28 Apr 2008 19:29:21 +0900 (JST) Received: from yonosuke.jp.nec.com (yonosuke.jp.nec.com [10.26.220.15]) by mailsv4.nec.co.jp (8.13.8/8.13.4) with ESMTP id m3SATLe4016202; Mon, 28 Apr 2008 19:29:21 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Mon, 28 Apr 2008 19:29:21 +0900 To: "linux-fsdevel@vger.kernel.org" , "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "dm-devel@redhat.com" Cc: "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: [RFC PATCH 0/3] freeze feature ver 1.2 Subject: [RFC PATCH 0/3] freeze feature ver 1.2 Message-Id: <20080428192920t-sato@mail.jp.nec.com> Mime-Version: 1.0 X-Mailer: WeMail32[2.51] ID:1K0086 From: Takashi Sato Date: Mon, 28 Apr 2008 19:29:20 +0900 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Barracuda-Connect: TYO201.gate.nec.co.jp[202.32.8.193] X-Barracuda-Start-Time: 1209378564 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.1, rules version 3.1.49071 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15640 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs Hi, I have re-based my freeze patches from linux-2.6.25-rc7 to linux-2.6.25. There is no functional change from the previous version. The patch-set consists of the following three patches. [PATCH 1/3] Implement generic freeze feature The ioctls for the generic freeze feature are below. o Freeze the filesystem int ioctl(int fd, int FIFREEZE, arg) fd: The file descriptor of the mountpoint FIFREEZE: request code for the freeze arg: Ignored Return value: 0 if the operation succeeds. Otherwise, -1 o Unfreeze the filesystem int ioctl(int fd, int FITHAW, arg) fd: The file descriptor of the mountpoint FITHAW: request code for unfreeze arg: Ignored Return value: 0 if the operation succeeds. Otherwise, -1 [PATCH 2/3] Remove XFS specific ioctl interfaces for freeze feature It removes XFS specific ioctl interfaces and request codes for freeze feature. This patch has been supplied by David Chinner. [PATCH 3/3] Add timeout feature The timeout feature is added to freeze ioctl. And new ioctl to reset the timeout period is added. o Freeze the filesystem int ioctl(int fd, int FIFREEZE, long *timeval) fd: The file descriptor of the mountpoint FIFREEZE: request code for the freeze timeval: the timeout period in seconds If it's 0 or 1, the timeout isn't set. This special case of "1" is implemented to keep the compatibility with XFS applications. Return value: 0 if the operation succeeds. Otherwise, -1 o Reset the timeout period This is useful for the application to set the timeval more accurately. For example, the freezer resets the timeval to 10 seconds every 5 seconds. In this approach, even if the freezer causes a deadlock by accessing the frozen filesystem, it will be solved by the timeout in 10 seconds and the freezer can recognize that at the next reset of timeval. int ioctl(int fd, int FIFREEZE_RESET_TIMEOUT, long *timeval) fd:file descriptor of mountpoint FIFREEZE_RESET_TIMEOUT: request code for reset of timeout period timeval: new timeout period in seconds Return value: 0 if the operation succeeds. Otherwise, -1 Error number: If the filesystem has already been unfrozen, errno is set to EINVAL. Any comments are very welcome. Cheers, Takashi From owner-xfs@oss.sgi.com Mon Apr 28 03:30:49 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 03:30:57 -0700 (PDT) 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_53 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 m3SAUhvJ001795 for ; Mon, 28 Apr 2008 03:30:49 -0700 X-ASG-Debug-ID: 1209378685-2894025b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo201.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6C5BA10C367B for ; Mon, 28 Apr 2008 03:31:25 -0700 (PDT) Received: from tyo201.gate.nec.co.jp (TYO201.gate.nec.co.jp [202.32.8.193]) by cuda.sgi.com with ESMTP id zkEUIAdBJGCk1oNK for ; Mon, 28 Apr 2008 03:31:25 -0700 (PDT) Received: from mailgate4.nec.co.jp ([10.7.69.184]) by tyo201.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m3SAVPqI002258; Mon, 28 Apr 2008 19:31:25 +0900 (JST) Received: (from root@localhost) by mailgate4.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m3SAVO800265; Mon, 28 Apr 2008 19:31:24 +0900 (JST) Received: from saigo.jp.nec.com (saigo.jp.nec.com [10.26.220.6]) by mailsv3.nec.co.jp (8.13.8/8.13.4) with ESMTP id m3SAVNtl017613; Mon, 28 Apr 2008 19:31:23 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Mon, 28 Apr 2008 19:31:23 +0900 To: "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "dm-devel@redhat.com" , "linux-fsdevel@vger.kernel.org" Cc: "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: [RFC PATCH 1/3] Implement generic freeze feature Subject: [RFC PATCH 1/3] Implement generic freeze feature Message-Id: <20080428193123t-sato@mail.jp.nec.com> Mime-Version: 1.0 X-Mailer: WeMail32[2.51] ID:1K0086 From: Takashi Sato Date: Mon, 28 Apr 2008 19:31:23 +0900 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Barracuda-Connect: TYO201.gate.nec.co.jp[202.32.8.193] X-Barracuda-Start-Time: 1209378686 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.1, rules version 3.1.49071 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15641 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs The ioctls for the generic freeze feature are below. o Freeze the filesystem int ioctl(int fd, int FIFREEZE, arg) fd: The file descriptor of the mountpoint FIFREEZE: request code for the freeze arg: Ignored Return value: 0 if the operation succeeds. Otherwise, -1 o Unfreeze the filesystem int ioctl(int fd, int FITHAW, arg) fd: The file descriptor of the mountpoint FITHAW: request code for unfreeze arg: Ignored Return value: 0 if the operation succeeds. Otherwise, -1 Signed-off-by: Takashi Sato Signed-off-by: Masayuki Hamaguchi --- fs/block_dev.c | 3 +++ fs/buffer.c | 25 +++++++++++++++++++++++++ fs/ioctl.c | 35 +++++++++++++++++++++++++++++++++++ fs/super.c | 32 +++++++++++++++++++++++++++++++- include/linux/fs.h | 7 +++++++ 5 files changed, 101 insertions(+), 1 deletion(-) diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25.org/fs/block_dev.c linux-2.6.25-freeze/fs/block_dev.c --- linux-2.6.25.org/fs/block_dev.c 2008-04-17 11:49:44.000000000 +0900 +++ linux-2.6.25-freeze/fs/block_dev.c 2008-04-24 20:43:28.000000000 +0900 @@ -284,6 +284,9 @@ static void init_once(struct kmem_cache INIT_LIST_HEAD(&bdev->bd_holder_list); #endif inode_init_once(&ei->vfs_inode); + + /* Initialize semaphore for freeze. */ + sema_init(&bdev->bd_freeze_sem, 1); } static inline void __bd_forget(struct inode *inode) diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25.org/fs/buffer.c linux-2.6.25-freeze/fs/buffer.c --- linux-2.6.25.org/fs/buffer.c 2008-04-17 11:49:44.000000000 +0900 +++ linux-2.6.25-freeze/fs/buffer.c 2008-04-24 20:43:28.000000000 +0900 @@ -201,6 +201,19 @@ struct super_block *freeze_bdev(struct b { struct super_block *sb; + down(&bdev->bd_freeze_sem); + sb = get_super_without_lock(bdev); + + /* If super_block has been already frozen, return. */ + if (sb && sb->s_frozen != SB_UNFROZEN) { + put_super(sb); + up(&bdev->bd_freeze_sem); + return sb; + } + + if (sb) + put_super(sb); + down(&bdev->bd_mount_sem); sb = get_super(bdev); if (sb && !(sb->s_flags & MS_RDONLY)) { @@ -219,6 +232,9 @@ struct super_block *freeze_bdev(struct b } sync_blockdev(bdev); + + up(&bdev->bd_freeze_sem); + return sb; /* thaw_bdev releases s->s_umount and bd_mount_sem */ } EXPORT_SYMBOL(freeze_bdev); @@ -232,6 +248,13 @@ EXPORT_SYMBOL(freeze_bdev); */ void thaw_bdev(struct block_device *bdev, struct super_block *sb) { + down(&bdev->bd_freeze_sem); + + if (sb && sb->s_frozen == SB_UNFROZEN) { + up(&bdev->bd_freeze_sem); + return; + } + if (sb) { BUG_ON(sb->s_bdev != bdev); @@ -244,6 +267,8 @@ void thaw_bdev(struct block_device *bdev } up(&bdev->bd_mount_sem); + + up(&bdev->bd_freeze_sem); } EXPORT_SYMBOL(thaw_bdev); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25.org/fs/ioctl.c linux-2.6.25-freeze/fs/ioctl.c --- linux-2.6.25.org/fs/ioctl.c 2008-04-17 11:49:44.000000000 +0900 +++ linux-2.6.25-freeze/fs/ioctl.c 2008-04-24 20:43:28.000000000 +0900 @@ -13,6 +13,7 @@ #include #include #include +#include #include @@ -181,6 +182,40 @@ int do_vfs_ioctl(struct file *filp, unsi } else error = -ENOTTY; break; + + case FIFREEZE: { + struct super_block *sb = filp->f_path.dentry->d_inode->i_sb; + + if (!capable(CAP_SYS_ADMIN)) { + error = -EPERM; + break; + } + + /* If filesystem doesn't support freeze feature, return. */ + if (sb->s_op->write_super_lockfs == NULL) { + error = -EINVAL; + break; + } + + /* Freeze. */ + freeze_bdev(sb->s_bdev); + + break; + } + + case FITHAW: { + struct super_block *sb = filp->f_path.dentry->d_inode->i_sb; + + if (!capable(CAP_SYS_ADMIN)) { + error = -EPERM; + break; + } + + /* Thaw. */ + thaw_bdev(sb->s_bdev, sb); + break; + } + default: if (S_ISREG(filp->f_path.dentry->d_inode->i_mode)) error = file_ioctl(filp, cmd, arg); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25.org/fs/super.c linux-2.6.25-freeze/fs/super.c --- linux-2.6.25.org/fs/super.c 2008-04-17 11:49:44.000000000 +0900 +++ linux-2.6.25-freeze/fs/super.c 2008-04-24 20:43:28.000000000 +0900 @@ -154,7 +154,7 @@ int __put_super_and_need_restart(struct * Drops a temporary reference, frees superblock if there's no * references left. */ -static void put_super(struct super_block *sb) +void put_super(struct super_block *sb) { spin_lock(&sb_lock); __put_super(sb); @@ -507,6 +507,36 @@ rescan: EXPORT_SYMBOL(get_super); +/* + * get_super_without_lock - Get super_block from block_device without lock. + * @bdev: block device struct + * + * Scan the superblock list and finds the superblock of the file system + * mounted on the block device given. This doesn't lock anyone. + * %NULL is returned if no match is found. + */ +struct super_block *get_super_without_lock(struct block_device *bdev) +{ + struct super_block *sb; + + if (!bdev) + return NULL; + + spin_lock(&sb_lock); + list_for_each_entry(sb, &super_blocks, s_list) { + if (sb->s_bdev == bdev) { + if (sb->s_root) { + sb->s_count++; + spin_unlock(&sb_lock); + return sb; + } + } + } + spin_unlock(&sb_lock); + return NULL; +} +EXPORT_SYMBOL(get_super_without_lock); + struct super_block * user_get_super(dev_t dev) { struct super_block *sb; diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25.org/include/linux/fs.h linux-2.6.25-freeze/include/linux /fs.h --- linux-2.6.25.org/include/linux/fs.h 2008-04-17 11:49:44.000000000 +0900 +++ linux-2.6.25-freeze/include/linux/fs.h 2008-04-24 20:43:28.000000000 +0900 @@ -223,6 +223,8 @@ extern int dir_notify_enable; #define BMAP_IOCTL 1 /* obsolete - kept for compatibility */ #define FIBMAP _IO(0x00,1) /* bmap access */ #define FIGETBSZ _IO(0x00,2) /* get the block size used for bmap */ +#define FIFREEZE _IOWR('X', 119, int) /* Freeze */ +#define FITHAW _IOWR('X', 120, int) /* Thaw */ #define FS_IOC_GETFLAGS _IOR('f', 1, long) #define FS_IOC_SETFLAGS _IOW('f', 2, long) @@ -548,6 +550,9 @@ struct block_device { * care to not mess up bd_private for that case. */ unsigned long bd_private; + + /* Semaphore for freeze */ + struct semaphore bd_freeze_sem; }; /* @@ -1926,7 +1931,9 @@ extern int do_vfs_ioctl(struct file *fil extern void get_filesystem(struct file_system_type *fs); extern void put_filesystem(struct file_system_type *fs); extern struct file_system_type *get_fs_type(const char *name); +extern void put_super(struct super_block *sb); extern struct super_block *get_super(struct block_device *); +extern struct super_block *get_super_without_lock(struct block_device *); extern struct super_block *user_get_super(dev_t); extern void drop_super(struct super_block *sb); From owner-xfs@oss.sgi.com Mon Apr 28 03:31:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 03:31:38 -0700 (PDT) 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 (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 m3SAVQSt001879 for ; Mon, 28 Apr 2008 03:31:27 -0700 X-ASG-Debug-ID: 1209378729-289102710000-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 CDD1312150D4 for ; Mon, 28 Apr 2008 03:32:09 -0700 (PDT) Received: from one.firstfloor.org (one.firstfloor.org [213.235.205.2]) by cuda.sgi.com with ESMTP id eVSD4086dsTqjNIt for ; Mon, 28 Apr 2008 03:32:09 -0700 (PDT) Received: from [78.53.156.5] (f053156005.adsl.alicedsl.de [78.53.156.5]) by one.firstfloor.org (Postfix) with ESMTP id 0FD3D1B90071; Mon, 28 Apr 2008 12:38:17 +0200 (CEST) Message-ID: <4815A7A5.9040507@firstfloor.org> Date: Mon, 28 Apr 2008 12:32:05 +0200 From: Andi Kleen User-Agent: Thunderbird 1.5.0.12 (X11/20060911) MIME-Version: 1.0 To: nscott@aconex.com CC: Christoph Hellwig , Denys Vlasenko , David Chinner , xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Subject: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() References: <200804261651.02078.vda.linux__2040.04651536724$1209223026$gmane$org@googlemail.com> <87iqy4wfjq.fsf@basil.nowhere.org> <20080426200701.GA10883@infradead.org> <20080426202630.GG17905@one.firstfloor.org> <20080426202323.GA14245@infradead.org> <1209341212.23166.122.camel@edge.scott.net.au> In-Reply-To: <1209341212.23166.122.camel@edge.scott.net.au> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: one.firstfloor.org[213.235.205.2] X-Barracuda-Start-Time: 1209378729 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.1, rules version 3.1.49071 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15642 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: andi@firstfloor.org Precedence: bulk X-list: xfs > Having to compile chunks of XFS code in both kernel and > userspace is also wierd (relative to other drivers), Perhaps it would be a good idea to mark the files where that is expected to work clearly. > and > its a side-effect of needing to do that (all the code > dealing with specifics of ondisk format is shared). But does that really need "STATIC"? Seems doubtful to me. -Andi From owner-xfs@oss.sgi.com Mon Apr 28 03:31:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 03:31:48 -0700 (PDT) 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 m3SAVJ3p001856 for ; Mon, 28 Apr 2008 03:31:30 -0700 X-ASG-Debug-ID: 1209378718-535603770000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo202.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 690191A28F6B for ; Mon, 28 Apr 2008 03:31:59 -0700 (PDT) Received: from tyo202.gate.nec.co.jp (TYO202.gate.nec.co.jp [202.32.8.206]) by cuda.sgi.com with ESMTP id ZZXp695WnHkSStyB for ; Mon, 28 Apr 2008 03:31:59 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate54.nec.co.jp [10.7.69.193]) by tyo202.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m3SAVvwH016676; Mon, 28 Apr 2008 19:31:57 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m3SAVvf10865; Mon, 28 Apr 2008 19:31:57 +0900 (JST) Received: from togyo.jp.nec.com (togyo.jp.nec.com [10.26.220.4]) by mailsv.nec.co.jp (8.13.8/8.13.4) with ESMTP id m3SAVuv0018641; Mon, 28 Apr 2008 19:31:56 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Mon, 28 Apr 2008 19:31:56 +0900 To: "linux-fsdevel@vger.kernel.org" , "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "dm-devel@redhat.com" Cc: "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: [RFC PATCH 2/3] Remove XFS specific ioctl interfaces for freeze feature Subject: [RFC PATCH 2/3] Remove XFS specific ioctl interfaces for freeze feature Message-Id: <20080428193156t-sato@mail.jp.nec.com> Mime-Version: 1.0 X-Mailer: WeMail32[2.51] ID:1K0086 From: Takashi Sato Date: Mon, 28 Apr 2008 19:31:56 +0900 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Barracuda-Connect: TYO202.gate.nec.co.jp[202.32.8.206] X-Barracuda-Start-Time: 1209378722 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.1, rules version 3.1.49072 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15643 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs It removes XFS specific ioctl interfaces and request codes for freeze feature. This patch has been supplied by David Chinner. Signed-off-by: Dave Chinner Signed-off-by: Takashi Sato --- linux-2.6/xfs_ioctl.c | 15 --------------- linux-2.6/xfs_ioctl32.c | 2 -- xfs_fs.h | 4 ++-- 3 files changed, 2 insertions(+), 19 deletions(-) diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-freeze/fs/xfs/linux-2.6/xfs_ioctl.c linux-2.6.25-xfs/fs/ xfs/linux-2.6/xfs_ioctl.c --- linux-2.6.25-freeze/fs/xfs/linux-2.6/xfs_ioctl.c 2008-04-24 20:42:20.000000000 +0900 +++ linux-2.6.25-xfs/fs/xfs/linux-2.6/xfs_ioctl.c 2008-04-24 20:44:48.000000000 +0900 @@ -906,21 +906,6 @@ xfs_ioctl( return -error; } - case XFS_IOC_FREEZE: - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - - if (inode->i_sb->s_frozen == SB_UNFROZEN) - freeze_bdev(inode->i_sb->s_bdev); - return 0; - - case XFS_IOC_THAW: - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - if (inode->i_sb->s_frozen != SB_UNFROZEN) - thaw_bdev(inode->i_sb->s_bdev, inode->i_sb); - return 0; - case XFS_IOC_GOINGDOWN: { __uint32_t in; diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-freeze/fs/xfs/linux-2.6/xfs_ioctl32.c linux-2.6.25-xfs/f s/xfs/linux-2.6/xfs_ioctl32.c --- linux-2.6.25-freeze/fs/xfs/linux-2.6/xfs_ioctl32.c 2008-04-24 20:42:20.000000000 +0900 +++ linux-2.6.25-xfs/fs/xfs/linux-2.6/xfs_ioctl32.c 2008-04-24 20:44:48.000000000 +0900 @@ -398,8 +398,6 @@ xfs_compat_ioctl( case XFS_IOC_FSGROWFSDATA: case XFS_IOC_FSGROWFSLOG: case XFS_IOC_FSGROWFSRT: - case XFS_IOC_FREEZE: - case XFS_IOC_THAW: case XFS_IOC_GOINGDOWN: case XFS_IOC_ERROR_INJECTION: case XFS_IOC_ERROR_CLEARALL: diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-freeze/fs/xfs/xfs_fs.h linux-2.6.25-xfs/fs/xfs/xfs_fs.h --- linux-2.6.25-freeze/fs/xfs/xfs_fs.h 2008-04-24 20:42:20.000000000 +0900 +++ linux-2.6.25-xfs/fs/xfs/xfs_fs.h 2008-04-24 20:44:48.000000000 +0900 @@ -473,8 +473,8 @@ typedef struct xfs_handle { #define XFS_IOC_ERROR_INJECTION _IOW ('X', 116, struct xfs_error_injection) #define XFS_IOC_ERROR_CLEARALL _IOW ('X', 117, struct xfs_error_injection) /* XFS_IOC_ATTRCTL_BY_HANDLE -- deprecated 118 */ -#define XFS_IOC_FREEZE _IOWR('X', 119, int) -#define XFS_IOC_THAW _IOWR('X', 120, int) +/* XFS_IOC_FREEZE -- FIFREEZE 119 */ +/* XFS_IOC_THAW -- FITHAW 120 */ #define XFS_IOC_FSSETDM_BY_HANDLE _IOW ('X', 121, struct xfs_fsop_setdm_handlereq) #define XFS_IOC_ATTRLIST_BY_HANDLE _IOW ('X', 122, struct xfs_fsop_attrlist_handlereq) #define XFS_IOC_ATTRMULTI_BY_HANDLE _IOW ('X', 123, struct xfs_fsop_attrmulti_handlereq) From owner-xfs@oss.sgi.com Mon Apr 28 03:36:40 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 03:36:53 -0700 (PDT) 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 m3SAacn6002834 for ; Mon, 28 Apr 2008 03:36:40 -0700 X-ASG-Debug-ID: 1209379041-535603c00000-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 494A615F4A6C for ; Mon, 28 Apr 2008 03:37:21 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id l71AkZvjKrTXZEPQ for ; Mon, 28 Apr 2008 03:37:21 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JqQjX-0005QF-50; Mon, 28 Apr 2008 10:37:19 +0000 Date: Mon, 28 Apr 2008 06:37:19 -0400 From: Christoph Hellwig To: Takashi Sato Cc: "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "dm-devel@redhat.com" , "linux-fsdevel@vger.kernel.org" , "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: Re: [RFC PATCH 1/3] Implement generic freeze feature Subject: Re: [RFC PATCH 1/3] Implement generic freeze feature Message-ID: <20080428103719.GA16030@infradead.org> References: <20080428193123t-sato@mail.jp.nec.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080428193123t-sato@mail.jp.nec.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209379042 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.1, rules version 3.1.49072 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15644 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Mon, Apr 28, 2008 at 07:31:23PM +0900, Takashi Sato wrote: > + /* Initialize semaphore for freeze. */ > + sema_init(&bdev->bd_freeze_sem, 1); The freezing process is already protected by bd_mount_sem, so I don't think there's need for another one. > --- linux-2.6.25.org/fs/buffer.c 2008-04-17 11:49:44.000000000 +0900 > +++ linux-2.6.25-freeze/fs/buffer.c 2008-04-24 20:43:28.000000000 +0900 > @@ -201,6 +201,19 @@ struct super_block *freeze_bdev(struct b > { > struct super_block *sb; > > + down(&bdev->bd_freeze_sem); > + sb = get_super_without_lock(bdev); > + > + /* If super_block has been already frozen, return. */ > + if (sb && sb->s_frozen != SB_UNFROZEN) { > + put_super(sb); > + up(&bdev->bd_freeze_sem); > + return sb; > + } > + > + if (sb) > + put_super(sb); > + > down(&bdev->bd_mount_sem); > sb = get_super(bdev); I think the protection against double freezes would be better done by using a trylock on bd_mount_sem. In fact after that it could be changed from a semaphore to a simple test_and_set_bit. > error = -ENOTTY; > break; > + > + case FIFREEZE: { This would be better to split intot a small helper ala ioctl_fibmap() > + case FITHAW: { Same here. From owner-xfs@oss.sgi.com Mon Apr 28 03:38:40 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 03:38:47 -0700 (PDT) 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,J_CHICKENPOX_24, J_CHICKENPOX_53 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 m3SAcU2h003271 for ; Mon, 28 Apr 2008 03:38:39 -0700 X-ASG-Debug-ID: 1209379152-278600340000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo202.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8B383F9C03 for ; Mon, 28 Apr 2008 03:39:12 -0700 (PDT) Received: from tyo202.gate.nec.co.jp (TYO202.gate.nec.co.jp [202.32.8.206]) by cuda.sgi.com with ESMTP id y8QE7MbYrAhEDzsI for ; Mon, 28 Apr 2008 03:39:12 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate54.nec.co.jp [10.7.69.195]) by tyo202.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m3SAdBvh022945; Mon, 28 Apr 2008 19:39:11 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m3SAdBS24662; Mon, 28 Apr 2008 19:39:11 +0900 (JST) Received: from togyo.jp.nec.com (togyo.jp.nec.com [10.26.220.4]) by mailsv3.nec.co.jp (8.13.8/8.13.4) with ESMTP id m3SAdBsI023478; Mon, 28 Apr 2008 19:39:11 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Mon, 28 Apr 2008 19:39:08 +0900 To: "linux-fsdevel@vger.kernel.org" , "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "dm-devel@redhat.com" Cc: "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: [RFC PATCH 3/3] Add timeout feature Subject: [RFC PATCH 3/3] Add timeout feature Message-Id: <20080428193908t-sato@mail.jp.nec.com> Mime-Version: 1.0 X-Mailer: WeMail32[2.51] ID:1K0086 From: Takashi Sato Date: Mon, 28 Apr 2008 19:39:08 +0900 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Barracuda-Connect: TYO202.gate.nec.co.jp[202.32.8.206] X-Barracuda-Start-Time: 1209379153 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.1, rules version 3.1.49073 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15645 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs The timeout feature is added to freeze ioctl. And new ioctl to reset the timeout period is added. o Freeze the filesystem int ioctl(int fd, int FIFREEZE, long *timeval) fd: The file descriptor of the mountpoint FIFREEZE: request code for the freeze timeval: the timeout period in seconds If it's 0 or 1, the timeout isn't set. This special case of "1" is implemented to keep the compatibility with XFS applications. Return value: 0 if the operation succeeds. Otherwise, -1 o Reset the timeout period int ioctl(int fd, int FIFREEZE_RESET_TIMEOUT, long *timeval) fd:file descriptor of mountpoint FIFREEZE_RESET_TIMEOUT: request code for reset of timeout period timeval: new timeout period in seconds Return value: 0 if the operation succeeds. Otherwise, -1 Error number: If the filesystem has already been unfrozen, errno is set to EINVAL. Signed-off-by: Takashi Sato Signed-off-by: Masayuki Hamaguchi --- drivers/md/dm.c | 2 - fs/block_dev.c | 2 + fs/buffer.c | 14 ++++++++- fs/ioctl.c | 64 +++++++++++++++++++++++++++++++++++++++++++- fs/super.c | 52 +++++++++++++++++++++++++++++++++++ fs/xfs/xfs_fsops.c | 2 - include/linux/buffer_head.h | 2 - include/linux/fs.h | 8 +++++ 8 files changed, 140 insertions(+), 6 deletions(-) diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-xfs/drivers/md/dm.c linux-2.6.25-timeout/drivers/md/dm.c --- linux-2.6.25-xfs/drivers/md/dm.c 2008-04-24 20:43:48.000000000 +0900 +++ linux-2.6.25-timeout/drivers/md/dm.c 2008-04-24 20:45:54.000000000 +0900 @@ -1407,7 +1407,7 @@ static int lock_fs(struct mapped_device WARN_ON(md->frozen_sb); - md->frozen_sb = freeze_bdev(md->suspended_bdev); + md->frozen_sb = freeze_bdev(md->suspended_bdev, 0); if (IS_ERR(md->frozen_sb)) { r = PTR_ERR(md->frozen_sb); md->frozen_sb = NULL; diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-xfs/fs/block_dev.c linux-2.6.25-timeout/fs/block_dev.c --- linux-2.6.25-xfs/fs/block_dev.c 2008-04-24 20:44:03.000000000 +0900 +++ linux-2.6.25-timeout/fs/block_dev.c 2008-04-24 20:45:54.000000000 +0900 @@ -287,6 +287,8 @@ static void init_once(struct kmem_cache /* Initialize semaphore for freeze. */ sema_init(&bdev->bd_freeze_sem, 1); + /* Setup freeze timeout function. */ + INIT_DELAYED_WORK(&bdev->bd_freeze_timeout, freeze_timeout); } static inline void __bd_forget(struct inode *inode) diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-xfs/fs/buffer.c linux-2.6.25-timeout/fs/buffer.c --- linux-2.6.25-xfs/fs/buffer.c 2008-04-24 20:43:59.000000000 +0900 +++ linux-2.6.25-timeout/fs/buffer.c 2008-04-24 20:45:54.000000000 +0900 @@ -190,14 +190,17 @@ int fsync_bdev(struct block_device *bdev /** * freeze_bdev -- lock a filesystem and force it into a consistent state - * @bdev: blockdevice to lock + * @bdev: blockdevice to lock + * @timeout_msec: timeout period * * This takes the block device bd_mount_sem to make sure no new mounts * happen on bdev until thaw_bdev() is called. * If a superblock is found on this device, we take the s_umount semaphore * on it to make sure nobody unmounts until the snapshot creation is done. + * If timeout_msec is bigger than 0, this registers the delayed work for + * timeout of the freeze feature. */ -struct super_block *freeze_bdev(struct block_device *bdev) +struct super_block *freeze_bdev(struct block_device *bdev, long timeout_msec) { struct super_block *sb; @@ -233,6 +236,10 @@ struct super_block *freeze_bdev(struct b sync_blockdev(bdev); + /* Setup unfreeze timer. */ + if (timeout_msec > 0) + add_freeze_timeout(bdev, timeout_msec); + up(&bdev->bd_freeze_sem); return sb; /* thaw_bdev releases s->s_umount and bd_mount_sem */ @@ -255,6 +262,9 @@ void thaw_bdev(struct block_device *bdev return; } + /* Delete unfreeze timer. */ + del_freeze_timeout(bdev); + if (sb) { BUG_ON(sb->s_bdev != bdev); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-xfs/fs/ioctl.c linux-2.6.25-timeout/fs/ioctl.c --- linux-2.6.25-xfs/fs/ioctl.c 2008-04-24 20:44:03.000000000 +0900 +++ linux-2.6.25-timeout/fs/ioctl.c 2008-04-24 20:45:54.000000000 +0900 @@ -184,6 +184,8 @@ int do_vfs_ioctl(struct file *filp, unsi break; case FIFREEZE: { + long timeout_sec; + long timeout_msec; struct super_block *sb = filp->f_path.dentry->d_inode->i_sb; if (!capable(CAP_SYS_ADMIN)) { @@ -197,8 +199,31 @@ int do_vfs_ioctl(struct file *filp, unsi break; } + /* arg(sec) to tick value. */ + error = get_user(timeout_sec, (long __user *) arg); + if (error != 0) + break; + /* + * If 1 is specified as the timeout period, + * it will be changed into 0 to keep the compatibility + * of XFS application(xfs_freeze). + */ + if (timeout_sec < 0) { + error = -EINVAL; + break; + } else if (timeout_sec < 2) { + timeout_sec = 0; + } + + timeout_msec = timeout_sec * 1000; + /* overflow case */ + if (timeout_msec < 0) { + error = -EINVAL; + break; + } + /* Freeze. */ - freeze_bdev(sb->s_bdev); + freeze_bdev(sb->s_bdev, timeout_msec); break; } @@ -216,6 +241,43 @@ int do_vfs_ioctl(struct file *filp, unsi break; } + case FIFREEZE_RESET_TIMEOUT: { + long timeout_sec; + long timeout_msec; + struct super_block *sb + = filp->f_path.dentry->d_inode->i_sb; + + if (!capable(CAP_SYS_ADMIN)) { + error = -EPERM; + break; + } + + /* arg(sec) to tick value */ + error = get_user(timeout_sec, (long __user *) arg); + if (error) + break; + timeout_msec = timeout_sec * 1000; + if (timeout_msec < 0) { + error = -EINVAL; + break; + } + + if (sb) { + down(&sb->s_bdev->bd_freeze_sem); + if (sb->s_frozen == SB_UNFROZEN) { + up(&sb->s_bdev->bd_freeze_sem); + error = -EINVAL; + break; + } + /* setup unfreeze timer */ + if (timeout_msec > 0) + add_freeze_timeout(sb->s_bdev, + timeout_msec); + up(&sb->s_bdev->bd_freeze_sem); + } + break; + } + default: if (S_ISREG(filp->f_path.dentry->d_inode->i_mode)) error = file_ioctl(filp, cmd, arg); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-xfs/fs/super.c linux-2.6.25-timeout/fs/super.c --- linux-2.6.25-xfs/fs/super.c 2008-04-24 20:44:03.000000000 +0900 +++ linux-2.6.25-timeout/fs/super.c 2008-04-24 20:45:54.000000000 +0900 @@ -983,3 +983,55 @@ struct vfsmount *kern_mount_data(struct } EXPORT_SYMBOL_GPL(kern_mount_data); + +/* + * freeze_timeout - Thaw the filesystem. + * + * @work: work queue (delayed_work.work) + * + * Called by the delayed work when elapsing the timeout period. + * Thaw the filesystem. + */ +void freeze_timeout(struct work_struct *work) +{ + struct block_device *bd = container_of(work, + struct block_device, bd_freeze_timeout.work); + + struct super_block *sb = get_super_without_lock(bd); + + thaw_bdev(bd, sb); + + if (sb) + put_super(sb); +} +EXPORT_SYMBOL_GPL(freeze_timeout); + +/* + * add_freeze_timeout - Add timeout for freeze. + * + * @bdev: block device struct + * @timeout_msec: timeout period + * + * Add the delayed work for freeze timeout to the delayed work queue. + */ +void add_freeze_timeout(struct block_device *bdev, long timeout_msec) +{ + s64 timeout_jiffies = msecs_to_jiffies(timeout_msec); + + /* Set delayed work queue */ + cancel_delayed_work(&bdev->bd_freeze_timeout); + schedule_delayed_work(&bdev->bd_freeze_timeout, timeout_jiffies); +} + +/* + * del_freeze_timeout - Delete timeout for freeze. + * + * @bdev: block device struct + * + * Delete the delayed work for freeze timeout from the delayed work queue. + */ +void del_freeze_timeout(struct block_device *bdev) +{ + if (delayed_work_pending(&bdev->bd_freeze_timeout)) + cancel_delayed_work(&bdev->bd_freeze_timeout); +} diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-xfs/fs/xfs/xfs_fsops.c linux-2.6.25-timeout/fs/xfs/xfs_f sops.c --- linux-2.6.25-xfs/fs/xfs/xfs_fsops.c 2008-04-24 20:43:59.000000000 +0900 +++ linux-2.6.25-timeout/fs/xfs/xfs_fsops.c 2008-04-24 20:45:54.000000000 +0900 @@ -623,7 +623,7 @@ xfs_fs_goingdown( { switch (inflags) { case XFS_FSOP_GOING_FLAGS_DEFAULT: { - struct super_block *sb = freeze_bdev(mp->m_super->s_bdev); + struct super_block *sb = freeze_bdev(mp->m_super->s_bdev, 0); if (sb && !IS_ERR(sb)) { xfs_force_shutdown(mp, SHUTDOWN_FORCE_UMOUNT); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-xfs/include/linux/buffer_head.h linux-2.6.25-timeout/inc lude/linux/buffer_head.h --- linux-2.6.25-xfs/include/linux/buffer_head.h 2008-04-24 20:44:04.000000000 +0900 +++ linux-2.6.25-timeout/include/linux/buffer_head.h 2008-04-24 20:45:54.000000000 +0900 @@ -170,7 +170,7 @@ int sync_blockdev(struct block_device *b void __wait_on_buffer(struct buffer_head *); wait_queue_head_t *bh_waitq_head(struct buffer_head *bh); int fsync_bdev(struct block_device *); -struct super_block *freeze_bdev(struct block_device *); +struct super_block *freeze_bdev(struct block_device *, long timeout_msec); void thaw_bdev(struct block_device *, struct super_block *); int fsync_super(struct super_block *); int fsync_no_super(struct block_device *); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.25-xfs/include/linux/fs.h linux-2.6.25-timeout/include/linu x/fs.h --- linux-2.6.25-xfs/include/linux/fs.h 2008-04-24 20:44:04.000000000 +0900 +++ linux-2.6.25-timeout/include/linux/fs.h 2008-04-24 20:45:54.000000000 +0900 @@ -8,6 +8,7 @@ #include #include +#include /* * It's silly to have NR_OPEN bigger than NR_FILE, but you can change @@ -225,6 +226,7 @@ extern int dir_notify_enable; #define FIGETBSZ _IO(0x00,2) /* get the block size used for bmap */ #define FIFREEZE _IOWR('X', 119, int) /* Freeze */ #define FITHAW _IOWR('X', 120, int) /* Thaw */ +#define FIFREEZE_RESET_TIMEOUT _IO(0x00, 3) /* Reset freeze timeout */ #define FS_IOC_GETFLAGS _IOR('f', 1, long) #define FS_IOC_SETFLAGS _IOW('f', 2, long) @@ -551,6 +553,8 @@ struct block_device { */ unsigned long bd_private; + /* Delayed work for freeze */ + struct delayed_work bd_freeze_timeout; /* Semaphore for freeze */ struct semaphore bd_freeze_sem; }; @@ -2104,5 +2108,9 @@ int proc_nr_files(struct ctl_table *tabl int get_filesystem_list(char * buf); +extern void add_freeze_timeout(struct block_device *bdev, long timeout_msec); +extern void del_freeze_timeout(struct block_device *bdev); +extern void freeze_timeout(struct work_struct *work); + #endif /* __KERNEL__ */ #endif /* _LINUX_FS_H */ From owner-xfs@oss.sgi.com Mon Apr 28 05:59:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 06:00:05 -0700 (PDT) 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,STOX_REPLY_TYPE 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 m3SCxc9H018017 for ; Mon, 28 Apr 2008 05:59:46 -0700 X-ASG-Debug-ID: 1209387617-0f4900660000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo202.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0A2429BFDF3 for ; Mon, 28 Apr 2008 06:00:17 -0700 (PDT) Received: from tyo202.gate.nec.co.jp (TYO202.gate.nec.co.jp [202.32.8.206]) by cuda.sgi.com with ESMTP id HnGwzpdYbHEs2YKO for ; Mon, 28 Apr 2008 06:00:17 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate53.nec.co.jp [10.7.69.162]) by tyo202.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m3SCxuSF011118; Mon, 28 Apr 2008 21:59:56 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m3SCxu007373; Mon, 28 Apr 2008 21:59:56 +0900 (JST) Received: from kaishu.jp.nec.com (kaishu.jp.nec.com [10.26.220.5]) by mailsv3.nec.co.jp (8.13.8/8.13.4) with ESMTP id m3SCxudH010980; Mon, 28 Apr 2008 21:59:56 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Mon, 28 Apr 2008 21:59:55 +0900 Message-Id: <2E042A67F72447F6AAA0CC0605DBFA84@nsl.ad.nec.co.jp> From: "Takashi Sato" To: "Christoph Hellwig" Cc: , , , , References: <20080428193123t-sato@mail.jp.nec.com> <20080428103719.GA16030@infradead.org> In-Reply-To: <20080428103719.GA16030@infradead.org> X-ASG-Orig-Subj: Re: [RFC PATCH 1/3] Implement generic freeze feature Subject: Re: [RFC PATCH 1/3] Implement generic freeze feature Date: Mon, 28 Apr 2008 21:59:55 +0900 MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Windows Mail 6.0.6000.16480 X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6000.16545 X-Barracuda-Connect: TYO202.gate.nec.co.jp[202.32.8.206] X-Barracuda-Start-Time: 1209387621 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.1, rules version 3.1.49084 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15646 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs Hi, > On Mon, Apr 28, 2008 at 07:31:23PM +0900, Takashi Sato wrote: >> + /* Initialize semaphore for freeze. */ >> + sema_init(&bdev->bd_freeze_sem, 1); > > The freezing process is already protected by bd_mount_sem, so I don't > think there's need for another one. > [...] >> down(&bdev->bd_mount_sem); >> sb = get_super(bdev); > > I think the protection against double freezes would be better done by > using a trylock on bd_mount_sem. bd_mount_sem can protect against only freezes and cannot protect against unfreezes. If multiple unfreezes run in parallel, the multiple up() for bd_mount_sem might occur incorrectly. > In fact after that it could be changed > from a semaphore to a simple test_and_set_bit. I will consider using test_and_set_bit. >> error = -ENOTTY; >> break; >> + >> + case FIFREEZE: { > > This would be better to split intot a small helper ala ioctl_fibmap() > >> + case FITHAW: { > > Same here. OK. I will split small helper functions. Cheers, Takashi From owner-xfs@oss.sgi.com Mon Apr 28 06:03:23 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 06:03:35 -0700 (PDT) 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 m3SD3LjZ018288 for ; Mon, 28 Apr 2008 06:03:23 -0700 X-ASG-Debug-ID: 1209387839-59d902860000-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 5E3281215C51 for ; Mon, 28 Apr 2008 06:04:00 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id YAPpfPZzaEYj9mG3 for ; Mon, 28 Apr 2008 06:04:00 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JqT1S-0005lQ-LU; Mon, 28 Apr 2008 13:03:58 +0000 Date: Mon, 28 Apr 2008 09:03:58 -0400 From: Christoph Hellwig To: Takashi Sato Cc: Christoph Hellwig , linux-ext4@vger.kernel.org, xfs@oss.sgi.com, dm-devel@redhat.com, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org X-ASG-Orig-Subj: Re: [RFC PATCH 1/3] Implement generic freeze feature Subject: Re: [RFC PATCH 1/3] Implement generic freeze feature Message-ID: <20080428130358.GB2798@infradead.org> References: <20080428193123t-sato@mail.jp.nec.com> <20080428103719.GA16030@infradead.org> <2E042A67F72447F6AAA0CC0605DBFA84@nsl.ad.nec.co.jp> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <2E042A67F72447F6AAA0CC0605DBFA84@nsl.ad.nec.co.jp> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209387845 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.1, rules version 3.1.49083 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15647 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Mon, Apr 28, 2008 at 09:59:55PM +0900, Takashi Sato wrote: >> I think the protection against double freezes would be better done by >> using a trylock on bd_mount_sem. > > bd_mount_sem can protect against only freezes and cannot protect against > unfreezes. If multiple unfreezes run in parallel, the multiple up() for > bd_mount_sem might occur incorrectly. Indeed. The bit flag would fix that because unfreeze could then check for the bit beeing set first. So that's probably the easiest way to go. From owner-xfs@oss.sgi.com Mon Apr 28 09:12:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 09:13:00 -0700 (PDT) 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=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 m3SGCgaf003827 for ; Mon, 28 Apr 2008 09:12:43 -0700 X-ASG-Debug-ID: 1209399204-642702b20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tetsuo.zabbo.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8F01AFBADD for ; Mon, 28 Apr 2008 09:13:24 -0700 (PDT) Received: from tetsuo.zabbo.net (tetsuo.zabbo.net [207.173.201.20]) by cuda.sgi.com with ESMTP id 9ia29zUbqGAtFGG4 for ; Mon, 28 Apr 2008 09:13:24 -0700 (PDT) Received: from Macintosh.local (unknown [192.168.110.240]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by tetsuo.zabbo.net (Postfix) with ESMTP id 684D0D104A8; Mon, 28 Apr 2008 09:13:23 -0700 (PDT) Message-ID: <4815F7A2.7060605@oracle.com> Date: Mon, 28 Apr 2008 09:13:22 -0700 From: Zach Brown User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Denys Vlasenko CC: David Chinner , Benjamin LaHaise , xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-aio@kvack.org X-ASG-Orig-Subj: Re: [PATCH] vfs: reduce stack usage by shrinking struct kiocb Subject: Re: [PATCH] vfs: reduce stack usage by shrinking struct kiocb References: <200804270617.36629.vda.linux@googlemail.com> In-Reply-To: <200804270617.36629.vda.linux@googlemail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: tetsuo.zabbo.net[207.173.201.20] X-Barracuda-Start-Time: 1209399206 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.1, rules version 3.1.49096 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15648 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: zach.brown@oracle.com Precedence: bulk X-list: xfs Denys Vlasenko wrote: > Hi Al, Benjamin, David, > > struct kiocb is placed on stack by, for example, do_sync_write(). > Eventually it contributes to xfs writeout path's stack usage, among others. > This is *the* path which causes 4k stack overflows on i386 with xfs. > > This patch trivially reorders fields of this structure, > and makes some of them smaller. Great, thanks for doing this. I see one fatal bug, though. Can you fix it up and resubmit? - unsigned long ki_flags; + unsigned short ki_flags; /* range: 0..2 */ Careful, ki_flags is used by the bitops routines which require an unsigned long. I'd just leave ki_flags as is. > ki_nr_segs: ulong -> uint: nobody uses 4 billion element writev's > (and it would not work anyway) Indeed. Maybe explicitly mention that it's safe 'cause we pass ki_nbytes to rw_copy_check_uvector() for comparison against UIO_MAXIOV before we store it in the kiocb. + /*unsigned short ki_opcode; - moved up for denser packing */ Don't bother commenting out fields that are moved, just move 'em. Otherwise it looks great, thanks. - z From owner-xfs@oss.sgi.com Mon Apr 28 11:30:19 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 11:30:37 -0700 (PDT) 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=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 m3SIUHai024071 for ; Mon, 28 Apr 2008 11:30:19 -0700 X-ASG-Debug-ID: 1209407458-30d802dc0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.gmx.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id 10E85FCAB5 for ; Mon, 28 Apr 2008 11:30:58 -0700 (PDT) Received: from mail.gmx.net (mail.gmx.net [213.165.64.20]) by cuda.sgi.com with SMTP id 9wPhC0WZjzZJSC9Q for ; Mon, 28 Apr 2008 11:30:58 -0700 (PDT) Received: (qmail invoked by alias); 28 Apr 2008 18:30:57 -0000 Received: from p57AF7818.dip.t-dialin.net (EHLO daniel-basts-powerbook-g4-12.local) [87.175.120.24] by mail.gmx.net (mp030) with SMTP; 28 Apr 2008 20:30:57 +0200 X-Authenticated: #1677461 X-Provags-ID: V01U2FsdGVkX18JrUZb9EUJAdvkfivvgWVzNoBeEgKC6CoPg7kxMV kg84mUj4guC9SC Message-ID: <481617E0.3070801@gmx.net> Date: Mon, 28 Apr 2008 20:30:56 +0200 From: Daniel Bast User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: xfs_admin -c 1 + xfs_repair problem Subject: xfs_admin -c 1 + xfs_repair problem X-Enigmail-Version: 0.95.6 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit X-Y-GMX-Trusted: 0 X-Barracuda-Connect: mail.gmx.net[213.165.64.20] X-Barracuda-Start-Time: 1209407461 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.1, rules version 3.1.49105 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15649 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: daniel.bast@gmx.net Precedence: bulk X-list: xfs Hi, i tried to enable lazy counts with "xfs_admin -c 1 device" with xfs_admin from xfsprogs 2.9.8. Unfortunately that process got stuck without any message. After several hours without any IO or CPU workload i killed the process and started xfs_repair, but that also got stuck (in "Phase 6") without any IO or CPU workload or any extra message. The xfs_repair being stuck in "Phase 6" is reproduceable with a metadump-image of the filesystem. I was able to mount the device but don't want to use it because i'm not sure if everything is ok. How can i resolve that problem? What information do you need? I can provide the metadump image (bzip compressed: 28MB) if necessary. Here are some informations that are maybe useful: xfs_repair -v /dev/sda7 Phase 1 - find and verify superblock... - block cache size set to 11472 entries Phase 2 - using internal log - zero log... zero_log: head block 2 tail block 2 - 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 - agno = 2 - agno = 3 - process newly discovered inodes... Phase 4 - check for duplicate blocks... - setting up duplicate extent list... - check for inodes claiming duplicate blocks... - agno = 0 - agno = 1 - agno = 2 - agno = 3 Phase 5 - rebuild AG headers and trees... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - reset superblock... Phase 6 - check inode connectivity... - resetting contents of realtime bitmap and summary inodes - traversing filesystem ... - agno = 0 after the killed xfs_admin -c 1 and xfs_repair processes: xfs_info /dev/sda7 meta-data=/dev/sda7 isize=256 agcount=4, agsize=24719013 blks = sectsz=512 attr=2 data = bsize=4096 blocks=98876050, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 log =internal bsize=4096 blocks=32768, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=65536 blocks=0, rtextents=0 a new 'xfs_repair -v /dev/sda7' straced: strace -ff -p 6364 Process 6409 attached with 6 threads - interrupt to quit [pid 6364] futex(0x851e2cc, FUTEX_WAIT, 2, NULL [pid 6405] futex(0xb146e3d8, FUTEX_WAIT, 0, NULL [pid 6406] futex(0xb146e358, FUTEX_WAIT, 1, NULL [pid 6407] futex(0xb146e358, FUTEX_WAIT, 2, NULL [pid 6408] futex(0xb146e358, FUTEX_WAIT, 3, NULL [pid 6409] futex(0xb146e358, FUTEX_WAIT, 4, NULL [pid 6406] <... futex resumed> ) = -1 EAGAIN (Resource temporarily unavailable) [pid 6407] <... futex resumed> ) = -1 EAGAIN (Resource temporarily unavailable) [pid 6408] <... futex resumed> ) = -1 EAGAIN (Resource temporarily unavailable) [pid 6406] futex(0xb146e358, FUTEX_WAIT, 4, NULL [pid 6407] futex(0xb146e358, FUTEX_WAIT, 4, NULL [pid 6408] futex(0xb146e358, FUTEX_WAIT, 4, NULL Thanks Daniel P.S. Please CC me, because i'm not subscribed to the list. From owner-xfs@oss.sgi.com Mon Apr 28 14:42:49 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 14:43:08 -0700 (PDT) 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_00,HTML_MESSAGE 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 m3SLgmxV009033 for ; Mon, 28 Apr 2008 14:42:49 -0700 X-ASG-Debug-ID: 1209419008-50aa00ae0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.brightcove.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1798E10C9AE1 for ; Mon, 28 Apr 2008 14:43:28 -0700 (PDT) Received: from mail.brightcove.com (mail.brightcove.com [38.113.27.188]) by cuda.sgi.com with ESMTP id 8I2ljNZMJ1PJ4Swr for ; Mon, 28 Apr 2008 14:43:28 -0700 (PDT) Received: from bcmail1.VIDMARK.LOCAL ([172.20.0.82]) by bcmail1.VIDMARK.LOCAL ([172.20.0.82]) with mapi; Mon, 28 Apr 2008 17:42:50 -0400 From: Lance Reed To: "xfs@oss.sgi.com" Date: Mon, 28 Apr 2008 17:42:40 -0400 X-ASG-Orig-Subj: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Subject: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Thread-Topic: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Thread-Index: AcipeMiK6qXqanDFS7GKU4eimaJMHg== Message-ID: <6A32BC807C106440B7E23208F280DDAF01D21F36FD@bcmail1.VIDMARK.LOCAL> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: en-US MIME-Version: 1.0 X-Barracuda-Connect: mail.brightcove.com[38.113.27.188] X-Barracuda-Start-Time: 1209419011 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=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.49119 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 5336 X-archive-position: 15650 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lreed@brightcove.com Precedence: bulk X-list: xfs I recently experienced a problem trying to expand an existing LVM + XFS installation. The core problem was that xfs_growfs did not correctly resize the XFS filesystem while trying to expand from 11 TB to about 21 TB. The previous setup had 5 x 2.18 TB LUNs using LVM2 for a total of just under 11 TB. This is a 64bit Linux system. Linux nfs3 2.6.18-8.1.15.el5 #1 SMP Mon Oct 22 08:32:28 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux CentOS release 5 (Final) XFS versions: xfsprogs-2.9.4-1.el5.centos xfsdump-2.2.46-1.el5.centos kmod-xfs-0.4-1.2.6.18_8.1.15.el5 LVM: lvm2-2.02.16-3.el5 The plan was to expand to 5 more 2.18 TB LUNs for a total just under 21 TB. This should be allowed since this is a 64 bit install. Five new Physical LVM volumes were created and added into the LVM VG. I extended the LVM Logical Volume by 1 TB to test. # lvextend -L+1T /dev/VolGroupNAS200/LogVolNAS200 Extending logical volume LogVolNAS200 to 11.39 TB Logical volume LogVolNAS200 successfully resized Then used xfs_growfs to extend the XFS filesystem. # xfs_growfs /nas2 meta-data=/dev/VolGroupNAS200/LogVolNAS200 isize=256 agcount=34, agsize=83886080 blks = sectsz=512 attr=0 data = bsize=4096 blocks=2789212160, imaxpct=25 = sunit=0 swidth=0 blks, unwritten=1 naming =version 2 bsize=4096 log =internal bsize=4096 blocks=32768, version=1 = sectsz=512 sunit=0 blks, lazy-count=0 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 2789212160 to 3057647616 This seemed fine and checked the XFS filesystem: # df -Ph /nas2 Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroupNAS200-LogVolNAS200 12T 9.0T 2.5T 79% /nas2 Then decided to add in the rest of the remaining space to the LVM Logical Volume (saving about 512 GB) # lvextend -L+10179G /dev/VolGroupNAS200/LogVolNAS200 Extending logical volume LogVolNAS200 to 21.33 TB Logical volume LogVolNAS200 successfully resized [root@nfs4.arc ~]# vgdisplay VolGroupNAS200 --- Volume group --- VG Name VolGroupNAS200 System ID Format lvm2 Metadata Areas 10 Metadata Sequence No 10 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 10 Act PV 10 VG Size 21.83 TB PE Size 4.00 MB Total PE 5722830 Alloc PE / Size 5591808 / 21.33 TB Free PE / Size 131022 / 511.80 GB VG UUID iNQ6VK-tdaO-fDrk-WwXk-uL3s-2zmw-j5zAcm Then attempted to grow XFS: ~]# xfs_growfs /nas2 meta-data=/dev/VolGroupNAS200/LogVolNAS200 isize=256 agcount=37, agsize=83886080 blks = sectsz=512 attr=0 data = bsize=4096 blocks=3057647616, imaxpct=25 = sunit=0 swidth=0 blks, unwritten=1 naming =version 2 bsize=4096 log =internal bsize=4096 blocks=32768, version=1 = sectsz=512 sunit=0 blks, lazy-count=0 realtime =none extsz=4096 blocks=0, rtextents=0 PROBLEM: The xfs_growfs returned but did not give the "data blocks changed from X to Y". A quick google search confirmed that this would be a problem. Attempting to umount and remount the file system proved to be a problem. When the mount was attempted: Apr 25 00:13:19 nfs3 kernel: SGI XFS with ACLs, security attributes, realtime, large block/inode numbers, no debug enabled Apr 25 00:13:19 nfs3 kernel: SGI XFS Quota Management subsystem Apr 25 00:13:19 nfs3 kernel: attempt to access beyond end of device Apr 25 00:13:19 nfs3 kernel: dm-5: rw=0, want=67155001344, limit=45808091136 Apr 25 00:13:19 nfs3 kernel: I/O error in filesystem ("dm-5") meta-data dev dm-5 block 0xfa2bfffff ("xf s_read_buf") error 5 buf count 512 Apr 25 00:13:19 nfs3 kernel: XFS: size check 2 failed Apr 25 00:13:19 nfs3 Filesystem[4236]: [4293]: ERROR: Couldn't mount filesystem /dev/VolGroupNAS200/LogVolNAS 200 on /nas2 Apr 25 00:13:19 nfs3 Filesystem[4225]: [4294]: ERROR: Generic error The first attempt to run xfs_repair did not succeed, as the terminal lost connection (network). The second attempt to run xfs_repair did succeed . In this case xfs_repaired the sizes and the volume was able to be mounted. However the filesystem is at the size of the last successful xfs_grow of 11664G (Just under 12 TB). XFS mounting filesystem dm-5 Ending clean XFS mount for filesystem: dm-5 So, XFS did not expand correctly. I do not know why. I don't think this is a problem with LVM, as I have used large volumes before on LVM, and this was an expansion from an existing LVM setup that basically went from 5 x 2.18 TB LUNs to 10 x 2.18 TB LUNs. If anyone has any ideas it would be great. I do not know if I should attempt to expand the filesystem in 1 TB amounts using " -D size or -R size ?" option? Should I shrink the LVM Logical volume down to something more reasonable? Thanks in advance for any help.... [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Mon Apr 28 15:22:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 15:22:35 -0700 (PDT) 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.0 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 m3SMMFd5011457 for ; Mon, 28 Apr 2008 15:22:17 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id IAA26386; Tue, 29 Apr 2008 08:22:45 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3SMMfsT149813045; Tue, 29 Apr 2008 08:22:42 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3SMMbxS149756845; Tue, 29 Apr 2008 08:22:37 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 29 Apr 2008 08:22:37 +1000 From: David Chinner To: Christoph Hellwig Cc: David Chinner , Denys Vlasenko , xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org Subject: Re: [PATCH] xfs: reduce stack usage in xfs_page_state_convert() Message-ID: <20080428222237.GE108924158@sgi.com> References: <200804270246.58828.vda.linux@googlemail.com> <20080427232317.GB103491721@sgi.com> <20080428035023.GA14275@infradead.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080428035023.GA14275@infradead.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15651 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Sun, Apr 27, 2008 at 11:50:23PM -0400, Christoph Hellwig wrote: > On Mon, Apr 28, 2008 at 09:23:17AM +1000, David Chinner wrote: > > No. That code is complex enough with only one copy of it around. I don't > > want two copies that differ subtly and hence have two different sets > > of nasty, rarely hit corner cases in them. > > Actually the split makes some sense. I had a ready patch to split out > releasepage which makes the whole code a lot nicer. I didn't go forward > with it because I had this idea that it would get replaced by Chris > extent_map stuff ASAP.. I think we need to move forward on this, Christoph - I've just found the cause of a long standing assert failure (test 083 failing on inode teardown with outstanding delayed allocation extents) and it appears to me that the way XFS handles page invalidation (i.e. ->invalidate_page/->release_page) is completely broken w.r.t. standalone calls to vmtruncate() and state being held on buggerheads. i.e. we're leaving delalloc turds lying around when get_blocks returns an error in __block_prepare_write() and the write is beyond EOF. The problem is that block_invalidate_page() calls discard_buffer() on every buffer head on the page, thereby stripping all the state that xfs_vm_releasepage needs to convert delalloc extents to real extents to avoid the assert failures that occur in different places. Even if we had the state, xfs_vm_releasepage does the wrong thing. We don't want to allocate those extents in this case; we want to remove those extents because we've just truncated them away. The unfortunate part here is that the design appears to have carefully optimised the invalidate page path so we don't need to call xfs_bunmapi in this case, as all normal truncates run through xfs_setattr() and the vmtruncate call is followed by a transaction to free all extents in the range being truncated (see the xfs_itruncate_data() call). The only other place vmtruncate() is called from is block_begin_write(), which assumes that de-allocation is done by the filesystem which is not the case for XFS. This is a bug that has been around for years. Christoph - I think we really need to kill buffer heads as soon as possible and clean up the ugly, ugly mess that makes up the I/O path. I'll talk off-line with you about this.... In the mean time, I'm going to do a nasty hack that picks on !uptodate pages with delalloc extents and xfs_free_file_space() them and see if that works. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 28 15:33:50 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 15:34:09 -0700 (PDT) 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 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 m3SMXnNk012593 for ; Mon, 28 Apr 2008 15:33:49 -0700 X-ASG-Debug-ID: 1209422071-50ab02830000-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 3B64E10D036F for ; Mon, 28 Apr 2008 15:34:31 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id JtL2UB3Vho95FRNo for ; Mon, 28 Apr 2008 15:34:31 -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 BC38818003EE2; Mon, 28 Apr 2008 17:34:29 -0500 (CDT) Message-ID: <481650F5.40205@sandeen.net> Date: Mon, 28 Apr 2008 17:34:29 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Lance Reed CC: "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Subject: Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed References: <6A32BC807C106440B7E23208F280DDAF01D21F36FD@bcmail1.VIDMARK.LOCAL> In-Reply-To: <6A32BC807C106440B7E23208F280DDAF01D21F36FD@bcmail1.VIDMARK.LOCAL> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1209422072 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.1, rules version 3.1.49121 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15652 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Lance Reed wrote: > I recently experienced a problem trying to expand an existing LVM + XFS installation. > The core problem was that xfs_growfs did not correctly resize the XFS filesystem while trying to expand from 11 TB to about 21 TB. > > The previous setup had 5 x 2.18 TB LUNs using LVM2 for a total of just under 11 TB. > This is a 64bit Linux system. > Linux nfs3 2.6.18-8.1.15.el5 #1 SMP Mon Oct 22 08:32:28 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux > CentOS release 5 (Final) > > XFS versions: > xfsprogs-2.9.4-1.el5.centos > xfsdump-2.2.46-1.el5.centos > kmod-xfs-0.4-1.2.6.18_8.1.15.el5 > ... > Thanks in advance for any help.... You probably hit: TAKE 959978 - growing an XFS filesystem by more than 2TB is broken http://oss.sgi.com/archives/xfs/2007-01/msg00053.html which unfortunately probably was never backported to the centos5 xfs module. Hmm maybe I should do that. :( Dave, do you remember what the fs looked like after hitting that bug? You may want to read through the "Repairing a possibly incomplete xfs_growfs command?" thread from earlier, on this list... I assume you need to try to recover this fs...? If so I'd not try shrinking or doing anything else to the fs until there's a chance to see what shape it's in at this point. -Eric From owner-xfs@oss.sgi.com Mon Apr 28 15:40:22 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 15:40:33 -0700 (PDT) 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.8 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 m3SMeLFA013200 for ; Mon, 28 Apr 2008 15:40:21 -0700 X-ASG-Debug-ID: 1209422461-68ce02880000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.brightcove.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 54D7715FED11 for ; Mon, 28 Apr 2008 15:41:01 -0700 (PDT) Received: from mail.brightcove.com (mail.brightcove.com [38.113.27.188]) by cuda.sgi.com with ESMTP id v1TbZpHsthn4tC3R for ; Mon, 28 Apr 2008 15:41:01 -0700 (PDT) Received: from bcmail1.VIDMARK.LOCAL ([172.20.0.82]) by bcmail1.VIDMARK.LOCAL ([172.20.0.82]) with mapi; Mon, 28 Apr 2008 18:40:23 -0400 From: Lance Reed To: Eric Sandeen CC: "xfs@oss.sgi.com" Date: Mon, 28 Apr 2008 18:40:08 -0400 X-ASG-Orig-Subj: RE: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Subject: RE: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Thread-Topic: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Thread-Index: Acipf/DWlL+eYTF8R+qdBW2WHfp8QgAAGVVw Message-ID: <6A32BC807C106440B7E23208F280DDAF01D21F3718@bcmail1.VIDMARK.LOCAL> References: <6A32BC807C106440B7E23208F280DDAF01D21F36FD@bcmail1.VIDMARK.LOCAL> <481650F5.40205@sandeen.net> In-Reply-To: <481650F5.40205@sandeen.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: en-US Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 X-Barracuda-Connect: mail.brightcove.com[38.113.27.188] X-Barracuda-Start-Time: 1209422464 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.82 X-Barracuda-Spam-Status: No, SCORE=-1.82 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_MJ615 X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.49122 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 BSF_SC0_MJ615 Custom Rule MJ615 X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m3SMeNFA013207 X-archive-position: 15653 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lreed@brightcove.com Precedence: bulk X-list: xfs Thanks for the quick response. Actually, I was able to run an xfs_repair and all was well.(took 45 minutes...) But I would love to be able to expand the XFS file system out to the max. I guess I could expand it in < 2TB increments then maybe? Thanks for the update and I will look around. I did find this which I think is related. http://oss.sgi.com/archives/xfs/2008-01/msg00097.html Thanks again. Lance -----Original Message----- Subject: Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Lance Reed wrote: > I recently experienced a problem trying to expand an existing LVM + XFS installation. > The core problem was that xfs_growfs did not correctly resize the XFS filesystem while trying to expand from 11 TB to about 21 TB. > > The previous setup had 5 x 2.18 TB LUNs using LVM2 for a total of just under 11 TB. > This is a 64bit Linux system. > Linux nfs3 2.6.18-8.1.15.el5 #1 SMP Mon Oct 22 08:32:28 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux > CentOS release 5 (Final) > > XFS versions: > xfsprogs-2.9.4-1.el5.centos > xfsdump-2.2.46-1.el5.centos > kmod-xfs-0.4-1.2.6.18_8.1.15.el5 > ... > Thanks in advance for any help.... You probably hit: TAKE 959978 - growing an XFS filesystem by more than 2TB is broken http://oss.sgi.com/archives/xfs/2007-01/msg00053.html which unfortunately probably was never backported to the centos5 xfs module. Hmm maybe I should do that. :( Dave, do you remember what the fs looked like after hitting that bug? You may want to read through the "Repairing a possibly incomplete xfs_growfs command?" thread from earlier, on this list... I assume you need to try to recover this fs...? If so I'd not try shrinking or doing anything else to the fs until there's a chance to see what shape it's in at this point. -Eric From owner-xfs@oss.sgi.com Mon Apr 28 15:59:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 15:59:44 -0700 (PDT) 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 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 m3SMxO9U014712 for ; Mon, 28 Apr 2008 15:59:27 -0700 X-ASG-Debug-ID: 1209423606-4f7c03500000-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 9D7A210D0062 for ; Mon, 28 Apr 2008 16:00:06 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id fgDNpnBvBwR1hzaz for ; Mon, 28 Apr 2008 16:00:06 -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 6C87D18003EE2; Mon, 28 Apr 2008 18:00:06 -0500 (CDT) Message-ID: <481656F6.5030300@sandeen.net> Date: Mon, 28 Apr 2008 18:00:06 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Lance Reed CC: "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Subject: Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed References: <6A32BC807C106440B7E23208F280DDAF01D21F36FD@bcmail1.VIDMARK.LOCAL> <481650F5.40205@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F3718@bcmail1.VIDMARK.LOCAL> In-Reply-To: <6A32BC807C106440B7E23208F280DDAF01D21F3718@bcmail1.VIDMARK.LOCAL> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1209423607 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.1, rules version 3.1.49123 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15654 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Lance Reed wrote: > Thanks for the quick response. > > Actually, I was able to run an xfs_repair and all was well.(took 45 minutes...) > > But I would love to be able to expand the XFS file system out to the max. > > I guess I could expand it in < 2TB increments then maybe? > > Thanks for the update and I will look around. > > I did find this which I think is related. > > http://oss.sgi.com/archives/xfs/2008-01/msg00097.html Yep, I think expanding it in, say, 1T increments should be fine, and it should all (I think...) end up the same as if you'd done it all at once (modulo the bug, of course...) -Eric From owner-xfs@oss.sgi.com Mon Apr 28 16:52:01 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 16:52:20 -0700 (PDT) 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.8 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 m3SNpwnr023312 for ; Mon, 28 Apr 2008 16:52:01 -0700 X-ASG-Debug-ID: 1209426761-5e3103aa0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from postoffice2.aconex.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9CDF4FEA03 for ; Mon, 28 Apr 2008 16:52:42 -0700 (PDT) Received: from postoffice2.aconex.com (prod.aconex.com [203.89.192.138]) by cuda.sgi.com with ESMTP id bHjkUEF830AZoi3p for ; Mon, 28 Apr 2008 16:52:42 -0700 (PDT) Received: from postoffice.aconex.com (localhost [127.0.0.1]) by postoffice2.aconex.com (Spam Firewall) with ESMTP id 447805BA60F; Tue, 29 Apr 2008 09:52:25 +1000 (EST) Received: from postoffice.aconex.com (postoffice.yarra.acx [192.168.3.1]) by postoffice2.aconex.com with ESMTP id n8sa7gFTnPETA81i; Tue, 29 Apr 2008 09:52:25 +1000 (EST) Received: from [192.168.5.76] (unknown [203.89.192.141]) by postoffice.aconex.com (Postfix) with ESMTP id 5DDDA92C0E3; Tue, 29 Apr 2008 09:52:34 +1000 (EST) X-ASG-Orig-Subj: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() Subject: Re: [PATCH] xfs: reduce stack usage in xfs_bmap_btalloc() From: Nathan Scott Reply-To: nscott@aconex.com To: Andi Kleen Cc: Christoph Hellwig , Denys Vlasenko , David Chinner , xfs@oss.sgi.com, Eric Sandeen , Adrian Bunk , linux-kernel@vger.kernel.org In-Reply-To: <4815A7A5.9040507@firstfloor.org> References: <200804261651.02078.vda.linux__2040.04651536724$1209223026$gmane$org@googlemail.com> <87iqy4wfjq.fsf@basil.nowhere.org> <20080426200701.GA10883@infradead.org> <20080426202630.GG17905@one.firstfloor.org> <20080426202323.GA14245@infradead.org> <1209341212.23166.122.camel@edge.scott.net.au> <4815A7A5.9040507@firstfloor.org> Content-Type: text/plain Organization: Aconex Date: Tue, 29 Apr 2008 09:52:33 +1000 Message-Id: <1209426754.23166.160.camel@edge.scott.net.au> Mime-Version: 1.0 X-Mailer: Evolution 2.22.1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: prod.aconex.com[203.89.192.138] X-Barracuda-Start-Time: 1209426762 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.1, rules version 3.1.49128 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15655 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: nscott@aconex.com Precedence: bulk X-list: xfs On Mon, 2008-04-28 at 12:32 +0200, Andi Kleen wrote: > > and > > its a side-effect of needing to do that (all the code > > dealing with specifics of ondisk format is shared). > > But does that really need "STATIC"? Seems doubtful to me. In userspace STATIC is defined to nothing, and the tools (and/or libxfs) directly call into numerous functions that are (really) static in the kernel. cheers. -- Nathan From owner-xfs@oss.sgi.com Mon Apr 28 17:21:35 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 17:21:51 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_65 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 m3T0LU3f025765 for ; Mon, 28 Apr 2008 17:21:34 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA29466; Tue, 29 Apr 2008 10:22:13 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3T0MCsT143014261; Tue, 29 Apr 2008 10:22:12 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3T0MBiB148537680; Tue, 29 Apr 2008 10:22:11 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 29 Apr 2008 10:22:11 +1000 From: David Chinner To: Timothy Shimmin Cc: David Chinner , xfs-dev , xfs-oss Subject: Re: [PATCH, XFSQA] Don't run 175-177 if DMAPI is not supported Message-ID: <20080429002211.GH108924158@sgi.com> References: <20080423013802.GJ103491721@sgi.com> <480EDE04.5080003@sgi.com> <20080424065822.GY103491721@sgi.com> <481515C8.6020601@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <481515C8.6020601@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15656 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 28, 2008 at 10:09:44AM +1000, Timothy Shimmin wrote: > David Chinner wrote: > >On Wed, Apr 23, 2008 at 04:58:12PM +1000, Timothy Shimmin wrote: > >>Hi, > >> > >>_test_punch already does a umount $SCRATCH_MNT. > >>However, IMHO, it would probably be nicer if one could > >>use a _require_dmapi or really it may be simpler if > >>we could roll it into common.dmapi > >>so one just needs to include common.dmapi and > >>it would complain at that point if the kernel > >>didn't support it. > > > >Sure, but we don't have that, and I'm not about to spend the time to > >convert >20 tests to something like this. Right now I just want to > >remove all the bloody silly test failures on mainline kernels. > > > >All the other dmapi tests "not run" just fine, I want these to do > >the same thing. Is that good enough to check in right now? > > > >Cheers, > > > >Dave. > > Sure, that's fine. > > I was really just suggesting to put: > > +# test that we have DMAPI support > +_dmapi_scratch_mount > +unmount $SCRATCH_MNT > /dev/null 2>&1 > > directly into common.dmapi - not as a function > but just as code to always execute. Ok, so i tried this and all the dmapi tests then gave "not run" status even though dmapi was build into the kernel. Don't know why, don't really have time to find out right now. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 28 17:38:50 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 17:39:08 -0700 (PDT) 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.9 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 m3T0cjWR026992 for ; Mon, 28 Apr 2008 17:38:49 -0700 Received: from [134.14.55.13] (dhcp13.melbourne.sgi.com [134.14.55.13]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA29792; Tue, 29 Apr 2008 10:39:20 +1000 Message-ID: <48166E18.10008@sgi.com> Date: Tue, 29 Apr 2008 10:38:48 +1000 From: Mark Goodwin Reply-To: markgw@sgi.com Organization: SGI Engineering User-Agent: Thunderbird 1.5.0.14 (Windows/20071210) MIME-Version: 1.0 To: Eric Sandeen CC: Lance Reed , "xfs@oss.sgi.com" Subject: Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed References: <6A32BC807C106440B7E23208F280DDAF01D21F36FD@bcmail1.VIDMARK.LOCAL> <481650F5.40205@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F3718@bcmail1.VIDMARK.LOCAL> <481656F6.5030300@sandeen.net> In-Reply-To: <481656F6.5030300@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15657 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: markgw@sgi.com Precedence: bulk X-list: xfs Eric Sandeen wrote: > Lance Reed wrote: >> Thanks for the quick response. >> >> Actually, I was able to run an xfs_repair and all was well.(took 45 minutes...) >> >> But I would love to be able to expand the XFS file system out to the max. >> >> I guess I could expand it in < 2TB increments then maybe? >> >> Thanks for the update and I will look around. >> >> I did find this which I think is related. >> >> http://oss.sgi.com/archives/xfs/2008-01/msg00097.html > > Yep, I think expanding it in, say, 1T increments should be fine, and it > should all (I think...) end up the same as if you'd done it all at once > (modulo the bug, of course...) I think we verified a while back that growing in 2T increments is an effective workaround - the bug is due to a signed 32 bit overflow. The fix has been available for some time now, but apparently hasn't made it's way into Centos yet. Cheers -- Mark Goodwin markgw@sgi.com Engineering Manager for XFS and PCP Phone: +61-3-99631937 SGI Australian Software Group Cell: +61-4-18969583 ------------------------------------------------------------- From owner-xfs@oss.sgi.com Mon Apr 28 17:41:10 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 17:41:17 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_53 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 m3T0f5vN027179 for ; Mon, 28 Apr 2008 17:41:07 -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 KAA29816; Tue, 29 Apr 2008 10:41:44 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 757D658C4C15; Tue, 29 Apr 2008 10:41:44 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 979416 - Don't initialise new inode generation numbers to zero Message-Id: <20080429004144.757D658C4C15@chook.melbourne.sgi.com> Date: Tue, 29 Apr 2008 10:41:44 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15658 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Don't initialise new inode generation numbers to zero When we allocation new inode chunks, we initialise the generation numbers to zero. This works fine until we delete a chunk and then reallocate it, resulting in the same inode numbers but with a reset generation count. This can result in inode/generation pairs of different inodes occurring relatively close together. Given that the inode/gen pair makes up the "unique" portion of an NFS filehandle on XFS, this can result in file handles cached on clients being seen on the wire from the server but refer to a different file. This causes .... issues for NFS clients. Hence we need a unique generation number initialisation for each inode to prevent reuse of a small portion of the generation number space. Use a random number to initialise the generation number so we don't need to keep any new state on disk whilst making the new number difficult to guess from previous allocations. Date: Tue Apr 29 10:41:26 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31001a fs/xfs/xfs_ialloc.c - 1.199 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_ialloc.c.diff?r1=text&tr1=1.199&r2=text&tr2=1.198&f=h - use random32() to initialise the generation in newly allocated inodes to prevent short term reuse of inode,gen pairs which can cause ESTALE problems for NFS clients. From owner-xfs@oss.sgi.com Mon Apr 28 17:43:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 17:43:15 -0700 (PDT) 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 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 m3T0h534027383 for ; Mon, 28 Apr 2008 17:43:07 -0700 X-ASG-Debug-ID: 1209429828-1d4602860000-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 0314E10D0B7D for ; Mon, 28 Apr 2008 17:43:48 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id lkbseXJseshRulof for ; Mon, 28 Apr 2008 17:43:48 -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 CB6E318003EE3; Mon, 28 Apr 2008 19:43:46 -0500 (CDT) Message-ID: <48166F42.50104@sandeen.net> Date: Mon, 28 Apr 2008 19:43:46 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: markgw@sgi.com CC: Lance Reed , "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Subject: Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed References: <6A32BC807C106440B7E23208F280DDAF01D21F36FD@bcmail1.VIDMARK.LOCAL> <481650F5.40205@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F3718@bcmail1.VIDMARK.LOCAL> <481656F6.5030300@sandeen.net> <48166E18.10008@sgi.com> In-Reply-To: <48166E18.10008@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1209429829 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.1, rules version 3.1.49131 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15659 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Mark Goodwin wrote: > > Eric Sandeen wrote: >> Lance Reed wrote: >>> Thanks for the quick response. >>> >>> Actually, I was able to run an xfs_repair and all was well.(took 45 minutes...) >>> >>> But I would love to be able to expand the XFS file system out to the max. >>> >>> I guess I could expand it in < 2TB increments then maybe? >>> >>> Thanks for the update and I will look around. >>> >>> I did find this which I think is related. >>> >>> http://oss.sgi.com/archives/xfs/2008-01/msg00097.html >> Yep, I think expanding it in, say, 1T increments should be fine, and it >> should all (I think...) end up the same as if you'd done it all at once >> (modulo the bug, of course...) > > I think we verified a while back that growing in 2T increments is an > effective workaround - the bug is due to a signed 32 bit overflow. > The fix has been available for some time now, but apparently hasn't > made it's way into Centos yet. Honestly, I think nothing makes its way back to Centos... I really don't have the time to maintain it. If anyone on the list uses Centos + xfs and wants to backport patches that appear to be bugfixes, I'm sure it'd be welcomed. I'd be happy to facilitate w/ review or whatnot, but probably won't have time to actually take on this task myself (despite being the instigator of the centos module originally, which was, in retrospect, perhaps a tad irresponsible...) :) -Eric From owner-xfs@oss.sgi.com Mon Apr 28 17:44:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 17:44:08 -0700 (PDT) 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 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 m3T0htpx027490 for ; Mon, 28 Apr 2008 17:43:58 -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 KAA29903; Tue, 29 Apr 2008 10:44:32 +1000 Date: Tue, 29 Apr 2008 10:48:27 +1000 To: "Daniel Bast" , xfs@oss.sgi.com Subject: Re: xfs_admin -c 1 + xfs_repair problem From: "Barry Naujok" Organization: SGI Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <481617E0.3070801@gmx.net> Message-ID: In-Reply-To: <481617E0.3070801@gmx.net> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m3T0i0px027517 X-archive-position: 15660 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Tue, 29 Apr 2008 04:30:56 +1000, Daniel Bast wrote: > Hi, > > i tried to enable lazy counts with "xfs_admin -c 1 device" with > xfs_admin from xfsprogs 2.9.8. Unfortunately that process got stuck > without any message. After several hours without any IO or CPU workload > i killed the process and started xfs_repair, but that also got stuck (in > "Phase 6") without any IO or CPU workload or any extra message. The > xfs_repair being stuck in "Phase 6" is reproduceable with a > metadump-image of the filesystem. > > I was able to mount the device but don't want to use it because i'm not > sure if everything is ok. "xfs_admin -c 1" internally runs xfs_repair and hence why it got stuck too. Your filesystems is fine, the only changes that occured for enabling lazy-counters was in Phase 5, but may not have been written to disk. > How can i resolve that problem? What information do you need? I can > provide the metadump image (bzip compressed: 28MB) if necessary. Run xfs_repair -P to disable prefetch. The metadump would be very useful in finding out why xfs_repair got stuck. Regards, Barry. > Here are some informations that are maybe useful: > > xfs_repair -v /dev/sda7 > Phase 1 - find and verify superblock... > - block cache size set to 11472 entries > Phase 2 - using internal log > - zero log... > zero_log: head block 2 tail block 2 > - 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 > - agno = 2 > - agno = 3 > - process newly discovered inodes... > Phase 4 - check for duplicate blocks... > - setting up duplicate extent list... > - check for inodes claiming duplicate blocks... > - agno = 0 > - agno = 1 > - agno = 2 > - agno = 3 > Phase 5 - rebuild AG headers and trees... > - agno = 0 > - agno = 1 > - agno = 2 > - agno = 3 > - reset superblock... > Phase 6 - check inode connectivity... > - resetting contents of realtime bitmap and summary inodes > - traversing filesystem ... > - agno = 0 > > > after the killed xfs_admin -c 1 and xfs_repair processes: > xfs_info /dev/sda7 > meta-data=/dev/sda7 isize=256 agcount=4, agsize=24719013 > blks > = sectsz=512 attr=2 > data = bsize=4096 blocks=98876050, imaxpct=25 > = sunit=0 swidth=0 blks > naming =version 2 bsize=4096 > log =internal bsize=4096 blocks=32768, version=2 > = sectsz=512 sunit=0 blks, lazy-count=1 > realtime =none extsz=65536 blocks=0, rtextents=0 > > > a new 'xfs_repair -v /dev/sda7' straced: > strace -ff -p 6364 > Process 6409 attached with 6 threads - interrupt to quit > [pid 6364] futex(0x851e2cc, FUTEX_WAIT, 2, NULL > [pid 6405] futex(0xb146e3d8, FUTEX_WAIT, 0, NULL > [pid 6406] futex(0xb146e358, FUTEX_WAIT, 1, NULL > [pid 6407] futex(0xb146e358, FUTEX_WAIT, 2, NULL > [pid 6408] futex(0xb146e358, FUTEX_WAIT, 3, NULL > [pid 6409] futex(0xb146e358, FUTEX_WAIT, 4, NULL > [pid 6406] <... futex resumed> ) = -1 EAGAIN (Resource > temporarily unavailable) > [pid 6407] <... futex resumed> ) = -1 EAGAIN (Resource > temporarily unavailable) > [pid 6408] <... futex resumed> ) = -1 EAGAIN (Resource > temporarily unavailable) > [pid 6406] futex(0xb146e358, FUTEX_WAIT, 4, NULL > [pid 6407] futex(0xb146e358, FUTEX_WAIT, 4, NULL > [pid 6408] futex(0xb146e358, FUTEX_WAIT, 4, NULL > > > Thanks > Daniel > > P.S. Please CC me, because i'm not subscribed to the list. > > From owner-xfs@oss.sgi.com Mon Apr 28 18:59:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 18:59:33 -0700 (PDT) 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.0 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 m3T1xCun032707 for ; Mon, 28 Apr 2008 18:59:14 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA01683; Tue, 29 Apr 2008 11:59:49 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3T1xlsT141853386; Tue, 29 Apr 2008 11:59:48 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3T1xgKr148622772; Tue, 29 Apr 2008 11:59:42 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 29 Apr 2008 11:59:42 +1000 From: David Chinner To: Eric Sandeen Cc: Lance Reed , "xfs@oss.sgi.com" Subject: Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Message-ID: <20080429015942.GL108924158@sgi.com> References: <6A32BC807C106440B7E23208F280DDAF01D21F36FD@bcmail1.VIDMARK.LOCAL> <481650F5.40205@sandeen.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <481650F5.40205@sandeen.net> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15661 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, Apr 28, 2008 at 05:34:29PM -0500, Eric Sandeen wrote: > Lance Reed wrote: > > I recently experienced a problem trying to expand an existing LVM + XFS installation. > > The core problem was that xfs_growfs did not correctly resize the XFS filesystem while trying to expand from 11 TB to about 21 TB. > > > > The previous setup had 5 x 2.18 TB LUNs using LVM2 for a total of just under 11 TB. > > This is a 64bit Linux system. > > Linux nfs3 2.6.18-8.1.15.el5 #1 SMP Mon Oct 22 08:32:28 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux > > CentOS release 5 (Final) > > > > XFS versions: > > xfsprogs-2.9.4-1.el5.centos > > xfsdump-2.2.46-1.el5.centos > > kmod-xfs-0.4-1.2.6.18_8.1.15.el5 > > > ... > > > Thanks in advance for any help.... > > You probably hit: > > TAKE 959978 - growing an XFS filesystem by more than 2TB is broken > http://oss.sgi.com/archives/xfs/2007-01/msg00053.html > > which unfortunately probably was never backported to the centos5 xfs > module. Hmm maybe I should do that. :( > > Dave, do you remember what the fs looked like after hitting that bug? Not exactly. I'd have to read this thread: > > You may want to read through the "Repairing a possibly incomplete > xfs_growfs command?" thread from earlier, on this list... To remind myself. IIRC it shows all the information you need to gather and all the commands needed to put the pieces back together again.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon Apr 28 21:09:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 21:09:57 -0700 (PDT) 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.0 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 m3T49YSs014042 for ; Mon, 28 Apr 2008 21:09:38 -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 OAA04061; Tue, 29 Apr 2008 14:10:12 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1116) id 4FB1B58C4C15; Tue, 29 Apr 2008 14:10:12 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: PARTIAL TAKE 980021 - xfs noattr2 mount option doesn't work Message-Id: <20080429041012.4FB1B58C4C15@chook.melbourne.sgi.com> Date: Tue, 29 Apr 2008 14:10:12 +1000 (EST) From: tes@sgi.com (Tim Shimmin) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15662 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Fix up noattr2 so that it will properly update the versionnum and features2 fields. Previously, mounting with noattr2 failed to achieve anything because although it cleared the attr2 mount flag, it would set it again as soon as it processed the superblock fields. The fix now has an explicit noattr2 flag and uses it later to fix up the versionnum and features2 fields. Date: Tue Apr 29 14:07:41 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/tes/2.6.x-xfs-quilt Inspected by: hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31003a fs/xfs/xfs_sb.h - 1.73 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_sb.h.diff?r1=text&tr1=1.73&r2=text&tr2=1.72&f=h - define xfs_sb_version_removeattr2 fs/xfs/xfs_vfsops.c - 1.563 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vfsops.c.diff?r1=text&tr1=1.563&r2=text&tr2=1.562&f=h - don't turn on attr2 from sb if we are mounted with noattr2. fs/xfs/xfs_clnt.h - 1.58 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_clnt.h.diff?r1=text&tr1=1.58&r2=text&tr2=1.57&f=h - Define XFSMNT_NOATTR2. fs/xfs/xfs_mount.h - 1.265 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.h.diff?r1=text&tr1=1.265&r2=text&tr2=1.264&f=h - define XFS_MOUNT_NOATTR2 fs/xfs/xfs_mount.c - 1.430 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.c.diff?r1=text&tr1=1.430&r2=text&tr2=1.429&f=h - If we have attr2 in sb and have mounted with XFS_MOUNT_NOATTR2 then remove attr2 from sb. fs/xfs/linux-2.6/xfs_super.c - 1.415 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.415&r2=text&tr2=1.414&f=h - Add in flag XFSMNT_NOATTR2. From owner-xfs@oss.sgi.com Mon Apr 28 21:16:31 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 21:16:38 -0700 (PDT) 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.6 required=5.0 tests=AWL,BAYES_00,SUBJ_ALL_CAPS autolearn=no version=3.3.0-r574664 Received: from emu.melbourne.sgi.com (emu.melbourne.sgi.com [134.14.54.11]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m3T4GS39014565 for ; Mon, 28 Apr 2008 21:16:30 -0700 Received: by emu.melbourne.sgi.com (Postfix, from userid 1116) id BCF5A50886E7; Tue, 29 Apr 2008 16:00:11 +1000 (EST) To: xfs@oss.sgi.com, sgi.bugs.xfs@engr.melbourne.sgi.com Subject: TAKE 979606 - Message-Id: <20080429060011.BCF5A50886E7@emu.melbourne.sgi.com> Date: Tue, 29 Apr 2008 16:00:11 +1000 (EST) From: tes@emu.melbourne.sgi.com X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15663 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@emu.melbourne.sgi.com Precedence: bulk X-list: xfs Test out bug in xfs_attr_shortform_bytesfit for its use of m_attroffset instead of di_forkoff. Date: Mon Apr 14 15:24:55 AEST 2008 Workarea: emu.melbourne.sgi.com:/home/tes/isms/xfs-cmds Inspected by: dgc@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:30863a xfstests/186 - 1.1 - new http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/186 xfstests/186.out - 1.1 - new http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/186.out - Test out bug in xfs_attr_shortform_bytesfit for its use of m_attroffset instead of di_forkoff. xfstests/group - 1.119 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/group.diff?r1=text&tr1=1.119&r2=text&tr2=1.118&f=h - Add 186 for attr. Subject: TAKE 980021 - fix noattr2 Test out the fix for 980021 for checking that noattr2 is now working. Date: Tue Apr 29 14:16:20 AEST 2008 Workarea: emu.melbourne.sgi.com:/home/tes/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:31004a xfstests/187 - 1.1 - new http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/187 - check that noattr2 mount option works xfstests/187.out - 1.1 - new http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/187.out - out file for 187 xfstests/group - 1.120 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/group.diff?r1=text&tr1=1.120&r2=text&tr2=1.119&f=h - add 187 From owner-xfs@oss.sgi.com Mon Apr 28 21:19:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 21:19:45 -0700 (PDT) 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.0 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 m3T4JXlj015071 for ; Mon, 28 Apr 2008 21:19:36 -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 OAA04274 for ; Tue, 29 Apr 2008 14:20:17 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1116) id E0E8F58C4C15; Tue, 29 Apr 2008 14:20:16 +1000 (EST) To: xfs@oss.sgi.com, xfs@oss.sgi.com Subject: TAKE 980021 - test fix of noattr2 Message-Id: <20080429042016.E0E8F58C4C15@chook.melbourne.sgi.com> Date: Tue, 29 Apr 2008 14:20:16 +1000 (EST) From: tes@sgi.com (Tim Shimmin) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15664 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Test out the fix for 980021 for checking that noattr2 is now working. Date: Tue Apr 29 14:16:20 AEST 2008 Workarea: emu.melbourne.sgi.com:/home/tes/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:31004a xfstests/187 - 1.1 - new http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/187 - check that noattr2 mount option works xfstests/187.out - 1.1 - new http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/187.out - out file for 187 xfstests/group - 1.120 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/group.diff?r1=text&tr1=1.120&r2=text&tr2=1.119&f=h - add 187 From owner-xfs@oss.sgi.com Mon Apr 28 22:14:51 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 22:15:09 -0700 (PDT) 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.0 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 m3T5EiYN019043 for ; Mon, 28 Apr 2008 22:14:49 -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 PAA05260; Tue, 29 Apr 2008 15:15:24 +1000 Message-ID: <4816AEEB.8090907@sgi.com> Date: Tue, 29 Apr 2008 15:15:23 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: xfs-dev , xfs-oss Subject: review: s/i_flags_lock/i_inner_lock/g Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15665 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Hi there, As part of future plans to cache incore versions of acls off the inode, we want to protect its modification by a spin lock. Dave suggested that we use the i_flags_lock but rename it to reflect its more general purpose on other fields, such as "i_inner_lock". This patch is then basically s/i_flags_lock/i_inner_lock/g. --Tim xfs_inode.c | 2 +- xfs_inode.h | 18 +++++++++--------- xfs_itable.c | 2 +- xfs_vnodeops.c | 12 ++++++------ 4 files changed, 17 insertions(+), 17 deletions(-) Index: 2.6.x-xfs-quilt/fs/xfs/xfs_inode.c =================================================================== --- 2.6.x-xfs-quilt.orig/fs/xfs/xfs_inode.c 2008-04-22 16:59:58.000000000 +1000 +++ 2.6.x-xfs-quilt/fs/xfs/xfs_inode.c 2008-04-29 14:39:30.975728220 +1000 @@ -815,7 +815,7 @@ xfs_iread( ip->i_ino = ino; ip->i_mount = mp; atomic_set(&ip->i_iocount, 0); - spin_lock_init(&ip->i_flags_lock); + spin_lock_init(&ip->i_inner_lock); /* * Get pointer's to the on-disk inode and the buffer containing it. Index: 2.6.x-xfs-quilt/fs/xfs/xfs_inode.h =================================================================== --- 2.6.x-xfs-quilt.orig/fs/xfs/xfs_inode.h 2008-04-22 16:59:58.000000000 +1000 +++ 2.6.x-xfs-quilt/fs/xfs/xfs_inode.h 2008-04-29 15:12:12.705537185 +1000 @@ -226,7 +226,7 @@ typedef struct xfs_inode { sema_t i_flock; /* inode flush lock */ atomic_t i_pincount; /* inode pin count */ wait_queue_head_t i_ipin_wait; /* inode pinning wait queue */ - spinlock_t i_flags_lock; /* inode i_flags lock */ + spinlock_t i_inner_lock; /* an innermost inode field spinlock */ /* Miscellaneous state. */ unsigned short i_flags; /* see defined flags below */ unsigned char i_update_core; /* timestamps/size is dirty */ @@ -275,17 +275,17 @@ __xfs_iflags_set(xfs_inode_t *ip, unsign static inline void xfs_iflags_set(xfs_inode_t *ip, unsigned short flags) { - spin_lock(&ip->i_flags_lock); + spin_lock(&ip->i_inner_lock); __xfs_iflags_set(ip, flags); - spin_unlock(&ip->i_flags_lock); + spin_unlock(&ip->i_inner_lock); } static inline void xfs_iflags_clear(xfs_inode_t *ip, unsigned short flags) { - spin_lock(&ip->i_flags_lock); + spin_lock(&ip->i_inner_lock); ip->i_flags &= ~flags; - spin_unlock(&ip->i_flags_lock); + spin_unlock(&ip->i_inner_lock); } static inline int @@ -298,9 +298,9 @@ static inline int xfs_iflags_test(xfs_inode_t *ip, unsigned short flags) { int ret; - spin_lock(&ip->i_flags_lock); + spin_lock(&ip->i_inner_lock); ret = __xfs_iflags_test(ip, flags); - spin_unlock(&ip->i_flags_lock); + spin_unlock(&ip->i_inner_lock); return ret; } @@ -309,11 +309,11 @@ xfs_iflags_test_and_clear(xfs_inode_t *i { int ret; - spin_lock(&ip->i_flags_lock); + spin_lock(&ip->i_inner_lock); ret = ip->i_flags & flags; if (ret) ip->i_flags &= ~flags; - spin_unlock(&ip->i_flags_lock); + spin_unlock(&ip->i_inner_lock); return ret; } #endif /* __KERNEL__ */ Index: 2.6.x-xfs-quilt/fs/xfs/xfs_itable.c =================================================================== --- 2.6.x-xfs-quilt.orig/fs/xfs/xfs_itable.c 2008-04-22 16:59:58.000000000 +1000 +++ 2.6.x-xfs-quilt/fs/xfs/xfs_itable.c 2008-04-29 14:39:30.999725178 +1000 @@ -601,7 +601,7 @@ xfs_bulkstat( KM_SLEEP); ip->i_ino = ino; ip->i_mount = mp; - spin_lock_init(&ip->i_flags_lock); + spin_lock_init(&ip->i_inner_lock); if (bp) xfs_buf_relse(bp); error = xfs_itobp(mp, NULL, ip, Index: 2.6.x-xfs-quilt/fs/xfs/xfs_vnodeops.c =================================================================== --- 2.6.x-xfs-quilt.orig/fs/xfs/xfs_vnodeops.c 2008-04-22 16:59:59.000000000 +1000 +++ 2.6.x-xfs-quilt/fs/xfs/xfs_vnodeops.c 2008-04-29 14:39:30.991726192 +1000 @@ -3240,7 +3240,7 @@ xfs_reclaim( * When breaking the link, we need to set the XFS_IRECLAIMABLE flag * first to ensure that xfs_iunpin() will never see an xfs inode * that has a linux inode being reclaimed. Synchronisation is provided - * by the i_flags_lock. + * by the i_inner_lock. */ if (!ip->i_update_core && (ip->i_itemp == NULL)) { xfs_ilock(ip, XFS_ILOCK_EXCL); @@ -3251,11 +3251,11 @@ xfs_reclaim( /* Protect sync and unpin from us */ XFS_MOUNT_ILOCK(mp); - spin_lock(&ip->i_flags_lock); + spin_lock(&ip->i_inner_lock); __xfs_iflags_set(ip, XFS_IRECLAIMABLE); vn_to_inode(vp)->i_private = NULL; ip->i_vnode = NULL; - spin_unlock(&ip->i_flags_lock); + spin_unlock(&ip->i_inner_lock); list_add_tail(&ip->i_reclaim, &mp->m_del_inodes); XFS_MOUNT_IUNLOCK(mp); } @@ -3281,10 +3281,10 @@ xfs_finish_reclaim( * us. */ write_lock(&pag->pag_ici_lock); - spin_lock(&ip->i_flags_lock); + spin_lock(&ip->i_inner_lock); if (__xfs_iflags_test(ip, XFS_IRECLAIM) || (!__xfs_iflags_test(ip, XFS_IRECLAIMABLE) && vp == NULL)) { - spin_unlock(&ip->i_flags_lock); + spin_unlock(&ip->i_inner_lock); write_unlock(&pag->pag_ici_lock); if (locked) { xfs_ifunlock(ip); @@ -3293,7 +3293,7 @@ xfs_finish_reclaim( return 1; } __xfs_iflags_set(ip, XFS_IRECLAIM); - spin_unlock(&ip->i_flags_lock); + spin_unlock(&ip->i_inner_lock); write_unlock(&pag->pag_ici_lock); xfs_put_perag(ip->i_mount, pag); From owner-xfs@oss.sgi.com Mon Apr 28 22:37:20 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 22:37:35 -0700 (PDT) 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 m3T5bGW2020722 for ; Mon, 28 Apr 2008 22:37:19 -0700 X-ASG-Debug-ID: 1209447477-6a3a002b0000-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 A99021217708; Mon, 28 Apr 2008 22:37:57 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id IMszBfqr1G0PlkOd; Mon, 28 Apr 2008 22:37:57 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JqiXN-0000PE-4D; Tue, 29 Apr 2008 05:37:57 +0000 Date: Tue, 29 Apr 2008 01:37:57 -0400 From: Christoph Hellwig To: Timothy Shimmin Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: review: s/i_flags_lock/i_inner_lock/g Subject: Re: review: s/i_flags_lock/i_inner_lock/g Message-ID: <20080429053757.GA30708@infradead.org> References: <4816AEEB.8090907@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4816AEEB.8090907@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209447480 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.1, rules version 3.1.49145 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15666 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Tue, Apr 29, 2008 at 03:15:23PM +1000, Timothy Shimmin wrote: > Hi there, > > As part of future plans to cache incore versions of acls > off the inode, we want to protect its modification by a spin lock. > Dave suggested that we use the i_flags_lock but rename it to > reflect its more general purpose on other fields, such as "i_inner_lock". > This patch is then basically s/i_flags_lock/i_inner_lock/g. Not too happpy about that, as I'd rather kill this lock in it's current form and use atomic bitops on the flags. I'd rather use i_lock in the Linux inode for the ACLs. From owner-xfs@oss.sgi.com Mon Apr 28 23:33:50 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 23:34:06 -0700 (PDT) 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=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 m3T6Xmf2024933 for ; Mon, 28 Apr 2008 23:33:50 -0700 X-ASG-Debug-ID: 1209450870-151f00d30000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.gmx.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id 808CAFFDEB for ; Mon, 28 Apr 2008 23:34:31 -0700 (PDT) Received: from mail.gmx.net (mail.gmx.net [213.165.64.20]) by cuda.sgi.com with SMTP id 9qu2V464rHjmpufB for ; Mon, 28 Apr 2008 23:34:31 -0700 (PDT) Received: (qmail invoked by alias); 29 Apr 2008 06:34:29 -0000 Received: from p57AF5AD0.dip.t-dialin.net (EHLO daniel-basts-powerbook-g4-12.local) [87.175.90.208] by mail.gmx.net (mp046) with SMTP; 29 Apr 2008 08:34:29 +0200 X-Authenticated: #1677461 X-Provags-ID: V01U2FsdGVkX19Nbw5imNtNSxCQOpriD0VTDzfrsA5YkLNJLL0IrY /Lzp46HRp/n9uh Message-ID: <4816C175.6090505@gmx.net> Date: Tue, 29 Apr 2008 08:34:29 +0200 From: Daniel Bast User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_admin -c 1 + xfs_repair problem Subject: Re: xfs_admin -c 1 + xfs_repair problem References: <481617E0.3070801@gmx.net> In-Reply-To: X-Enigmail-Version: 0.95.6 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Y-GMX-Trusted: 0 X-Barracuda-Connect: mail.gmx.net[213.165.64.20] X-Barracuda-Start-Time: 1209450872 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.1, rules version 3.1.49150 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15667 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: daniel.bast@gmx.net Precedence: bulk X-list: xfs Hi Barry, 'xfs_repair -P device' ran through and finished without any problem. So everything should be fine? Or should I also run something like 'xfs_repair -P -c lazy-counts=1 device' to make sure that one lazy-count-enable command got through? After one '-P' run another one without '-P' doesn't finish so I'll send you the metadump later after finding out how to send a 28MB eMail attachment. Thanks Daniel Barry Naujok schrieb: > On Tue, 29 Apr 2008 04:30:56 +1000, Daniel Bast > wrote: > >> Hi, >> >> i tried to enable lazy counts with "xfs_admin -c 1 device" with >> xfs_admin from xfsprogs 2.9.8. Unfortunately that process got stuck >> without any message. After several hours without any IO or CPU >> workload i killed the process and started xfs_repair, but that also >> got stuck (in "Phase 6") without any IO or CPU workload or any extra >> message. The xfs_repair being stuck in "Phase 6" is reproduceable with >> a metadump-image of the filesystem. >> >> I was able to mount the device but don't want to use it because i'm >> not sure if everything is ok. > > "xfs_admin -c 1" internally runs xfs_repair and hence why it got stuck > too. Your filesystems is fine, the only changes that occured for enabling > lazy-counters was in Phase 5, but may not have been written to disk. > >> How can i resolve that problem? What information do you need? I can >> provide the metadump image (bzip compressed: 28MB) if necessary. > > Run xfs_repair -P to disable prefetch. > > The metadump would be very useful in finding out why xfs_repair got stuck. > > Regards, > Barry. > >> Here are some informations that are maybe useful: >> >> xfs_repair -v /dev/sda7 >> Phase 1 - find and verify superblock... >> - block cache size set to 11472 entries >> Phase 2 - using internal log >> - zero log... >> zero_log: head block 2 tail block 2 >> - 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 >> - agno = 2 >> - agno = 3 >> - process newly discovered inodes... >> Phase 4 - check for duplicate blocks... >> - setting up duplicate extent list... >> - check for inodes claiming duplicate blocks... >> - agno = 0 >> - agno = 1 >> - agno = 2 >> - agno = 3 >> Phase 5 - rebuild AG headers and trees... >> - agno = 0 >> - agno = 1 >> - agno = 2 >> - agno = 3 >> - reset superblock... >> Phase 6 - check inode connectivity... >> - resetting contents of realtime bitmap and summary inodes >> - traversing filesystem ... >> - agno = 0 >> >> >> after the killed xfs_admin -c 1 and xfs_repair processes: >> xfs_info /dev/sda7 >> meta-data=/dev/sda7 isize=256 agcount=4, >> agsize=24719013 blks >> = sectsz=512 attr=2 >> data = bsize=4096 blocks=98876050, imaxpct=25 >> = sunit=0 swidth=0 blks >> naming =version 2 bsize=4096 >> log =internal bsize=4096 blocks=32768, version=2 >> = sectsz=512 sunit=0 blks, lazy-count=1 >> realtime =none extsz=65536 blocks=0, rtextents=0 >> >> >> a new 'xfs_repair -v /dev/sda7' straced: >> strace -ff -p 6364 >> Process 6409 attached with 6 threads - interrupt to quit >> [pid 6364] futex(0x851e2cc, FUTEX_WAIT, 2, NULL >> [pid 6405] futex(0xb146e3d8, FUTEX_WAIT, 0, NULL >> [pid 6406] futex(0xb146e358, FUTEX_WAIT, 1, NULL >> [pid 6407] futex(0xb146e358, FUTEX_WAIT, 2, NULL >> [pid 6408] futex(0xb146e358, FUTEX_WAIT, 3, NULL >> [pid 6409] futex(0xb146e358, FUTEX_WAIT, 4, NULL >> [pid 6406] <... futex resumed> ) = -1 EAGAIN (Resource >> temporarily unavailable) >> [pid 6407] <... futex resumed> ) = -1 EAGAIN (Resource >> temporarily unavailable) >> [pid 6408] <... futex resumed> ) = -1 EAGAIN (Resource >> temporarily unavailable) >> [pid 6406] futex(0xb146e358, FUTEX_WAIT, 4, NULL >> [pid 6407] futex(0xb146e358, FUTEX_WAIT, 4, NULL >> [pid 6408] futex(0xb146e358, FUTEX_WAIT, 4, NULL >> >> >> Thanks >> Daniel >> >> P.S. Please CC me, because i'm not subscribed to the list. >> >> > > From owner-xfs@oss.sgi.com Mon Apr 28 23:46:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 28 Apr 2008 23:46:54 -0700 (PDT) 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 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 m3T6kWdH025984 for ; Mon, 28 Apr 2008 23:46:35 -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 QAA07385; Tue, 29 Apr 2008 16:47:11 +1000 Date: Tue, 29 Apr 2008 16:48:40 +1000 To: "Daniel Bast" Subject: Re: xfs_admin -c 1 + xfs_repair problem 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: <481617E0.3070801@gmx.net> <4816C175.6090505@gmx.net> Message-ID: In-Reply-To: <4816C175.6090505@gmx.net> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m3T6kbdH025992 X-archive-position: 15668 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Tue, 29 Apr 2008 16:34:29 +1000, Daniel Bast wrote: > Hi Barry, > > 'xfs_repair -P device' ran through and finished without any problem. So > everything should be fine? > Or should I also run something like 'xfs_repair -P -c lazy-counts=1 > device' to make sure that one lazy-count-enable command got through? Once mounted (yes, everything is fine), xfs_info will tell you if lazy-counters was enabled. If it didn't, xfs_repair -P -c lazycount=1 will do it. > After one '-P' run another one without '-P' doesn't finish so I'll send > you the metadump later after finding out how to send a 28MB eMail > attachment. Email is a bit big. Some form of place where you can stash a binary file would be good (ftp server, or some web site like yousendit). You can email me privately with the details. Regards, Barry. > Thanks > Daniel > > > > > Barry Naujok schrieb: >> On Tue, 29 Apr 2008 04:30:56 +1000, Daniel Bast >> wrote: >> >>> Hi, >>> >>> i tried to enable lazy counts with "xfs_admin -c 1 device" with >>> xfs_admin from xfsprogs 2.9.8. Unfortunately that process got stuck >>> without any message. After several hours without any IO or CPU >>> workload i killed the process and started xfs_repair, but that also >>> got stuck (in "Phase 6") without any IO or CPU workload or any extra >>> message. The xfs_repair being stuck in "Phase 6" is reproduceable with >>> a metadump-image of the filesystem. >>> >>> I was able to mount the device but don't want to use it because i'm >>> not sure if everything is ok. >> "xfs_admin -c 1" internally runs xfs_repair and hence why it got stuck >> too. Your filesystems is fine, the only changes that occured for >> enabling >> lazy-counters was in Phase 5, but may not have been written to disk. >> >>> How can i resolve that problem? What information do you need? I can >>> provide the metadump image (bzip compressed: 28MB) if necessary. >> Run xfs_repair -P to disable prefetch. >> The metadump would be very useful in finding out why xfs_repair got >> stuck. >> Regards, >> Barry. >> >>> Here are some informations that are maybe useful: >>> >>> xfs_repair -v /dev/sda7 >>> Phase 1 - find and verify superblock... >>> - block cache size set to 11472 entries >>> Phase 2 - using internal log >>> - zero log... >>> zero_log: head block 2 tail block 2 >>> - 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 >>> - agno = 2 >>> - agno = 3 >>> - process newly discovered inodes... >>> Phase 4 - check for duplicate blocks... >>> - setting up duplicate extent list... >>> - check for inodes claiming duplicate blocks... >>> - agno = 0 >>> - agno = 1 >>> - agno = 2 >>> - agno = 3 >>> Phase 5 - rebuild AG headers and trees... >>> - agno = 0 >>> - agno = 1 >>> - agno = 2 >>> - agno = 3 >>> - reset superblock... >>> Phase 6 - check inode connectivity... >>> - resetting contents of realtime bitmap and summary inodes >>> - traversing filesystem ... >>> - agno = 0 >>> >>> >>> after the killed xfs_admin -c 1 and xfs_repair processes: >>> xfs_info /dev/sda7 >>> meta-data=/dev/sda7 isize=256 agcount=4, >>> agsize=24719013 blks >>> = sectsz=512 attr=2 >>> data = bsize=4096 blocks=98876050, >>> imaxpct=25 >>> = sunit=0 swidth=0 blks >>> naming =version 2 bsize=4096 >>> log =internal bsize=4096 blocks=32768, version=2 >>> = sectsz=512 sunit=0 blks, >>> lazy-count=1 >>> realtime =none extsz=65536 blocks=0, rtextents=0 >>> >>> >>> a new 'xfs_repair -v /dev/sda7' straced: >>> strace -ff -p 6364 >>> Process 6409 attached with 6 threads - interrupt to quit >>> [pid 6364] futex(0x851e2cc, FUTEX_WAIT, 2, NULL >>> [pid 6405] futex(0xb146e3d8, FUTEX_WAIT, 0, NULL >>> [pid 6406] futex(0xb146e358, FUTEX_WAIT, 1, NULL >>> [pid 6407] futex(0xb146e358, FUTEX_WAIT, 2, NULL >>> [pid 6408] futex(0xb146e358, FUTEX_WAIT, 3, NULL >>> [pid 6409] futex(0xb146e358, FUTEX_WAIT, 4, NULL >>> [pid 6406] <... futex resumed> ) = -1 EAGAIN (Resource >>> temporarily unavailable) >>> [pid 6407] <... futex resumed> ) = -1 EAGAIN (Resource >>> temporarily unavailable) >>> [pid 6408] <... futex resumed> ) = -1 EAGAIN (Resource >>> temporarily unavailable) >>> [pid 6406] futex(0xb146e358, FUTEX_WAIT, 4, NULL >>> [pid 6407] futex(0xb146e358, FUTEX_WAIT, 4, NULL >>> [pid 6408] futex(0xb146e358, FUTEX_WAIT, 4, NULL >>> >>> >>> Thanks >>> Daniel >>> >>> P.S. Please CC me, because i'm not subscribed to the list. >>> >>> >> > > From owner-xfs@oss.sgi.com Tue Apr 29 00:55:56 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 00:56:16 -0700 (PDT) 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=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 m3T7trxV004697 for ; Tue, 29 Apr 2008 00:55:56 -0700 X-ASG-Debug-ID: 1209455794-4bc400e10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from kernel.dk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E3B321603FE7 for ; Tue, 29 Apr 2008 00:56:35 -0700 (PDT) Received: from kernel.dk (brick.kernel.dk [87.55.233.238]) by cuda.sgi.com with ESMTP id MqUOLO2Tr0z0xekm for ; Tue, 29 Apr 2008 00:56:35 -0700 (PDT) Received: by kernel.dk (Postfix, from userid 500) id BFA4025725C; Tue, 29 Apr 2008 09:56:31 +0200 (CEST) Date: Tue, 29 Apr 2008 09:56:31 +0200 From: Jens Axboe To: "Raoul Bhatia [IPAX]" Cc: David Chinner , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: call trace after >page allocation failure. order:0, mode:0x10000< Subject: Re: call trace after >page allocation failure. order:0, mode:0x10000< Message-ID: <20080429075631.GH12774@kernel.dk> References: <480DADD2.7060408@ipax.at> <20080423223541.GQ103491721@sgi.com> <20080424104818.GT12774@kernel.dk> <48120094.9070906@ipax.at> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48120094.9070906@ipax.at> X-Barracuda-Connect: brick.kernel.dk[87.55.233.238] X-Barracuda-Start-Time: 1209455795 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=INFO_TLD X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.49152 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 INFO_TLD URI: Contains an URL in the INFO top-level domain X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15669 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jens.axboe@oracle.com Precedence: bulk X-list: xfs On Fri, Apr 25 2008, Raoul Bhatia [IPAX] wrote: > hi, > > so what do you suggest? i will have access to this machine for another > couple of days. then it is handed over to a customer. > > for me, it's not a very important issue, i just meant to report ;) It should not be anything to worry about, as things should proceed fine still. > > cheers, > raoul > > Jens Axboe wrote: > > On Thu, Apr 24 2008, David Chinner wrote: > >> Raoul, > >> > >> You've exhausted the bio mempool. That is not supposed to happen. > >> > >> This is a block layer or configuration issue, not an XFS problem. > >> > >> Jens, have you heard of anything like this recently? > > > > Nope, haven't heard of anything like this. But I don't think your > > analysis is quite right - if you call into mempool_alloc(), it may > > rightfully try to allocate outside of the pool only to fallback to > > pre-allocated entries. So the page allocation failure message isn't a > > bug as such, just the vm running complete OOM. > > > > Now, if mempool_alloc() returned NULL with __GFP_WAIT set, THAT would be > > a bug. > > > >> Cheers, > >> > >> Dave. > >> > >> On Tue, Apr 22, 2008 at 11:20:18AM +0200, Raoul Bhatia [IPAX] wrote: > >>> hi, > >>> > >>> is the following calltrace related to xfs or something else? > >>> it happended during "stress --hdd 20 --hdd-bytes 2g" on a > >>> raid10 volume: > >>> > >>>> # cat /proc/mdstat > >>>> Personalities : [raid1] [raid10] > >>>> md0 : active raid10 sdd5[3] sdc5[2] sdb5[1] sda5[0] > >>>> 39069824 blocks 64K chunks 2 near-copies [4/4] [UUUU] > >>> maybe this is xfs' way to tell "out of diskspace"? :) > >>> > >>>> db-ipax-164:~# uname -a > >>>> Linux db-ipax-164.travian.info 2.6.25-rc8 #2 SMP Mon Apr 7 14:50:22 CEST 2008 x86_64 GNU/Linux > >>> * debian etch 64bit > >>> * libc6 2.3.6.ds1-13etch5 > >>> * xfsprogs 2.8.11-1 > >>> > >>> cheers, > >>> raoul > >>> > >>> > >>>> stress: page allocation failure. order:0, mode:0x10000 > >>>> Pid: 12386, comm: stress Not tainted 2.6.25-rc8 #2 > >>>> > >>>> Call Trace: > >>>> [] __alloc_pages+0x2ea/0x306 > >>>> [] kmem_getpages+0xc6/0x194 > >>>> [] kmem_getpages+0xc6/0x194 > >>>> [] fallback_alloc+0x11a/0x18f > >>>> [] kmem_cache_alloc_node+0xf1/0x122 > >>>> [] cache_grow+0xd5/0x20c > >>>> [] fallback_alloc+0x159/0x18f > >>>> [] kmem_cache_alloc+0xad/0xdc > >>>> [] mempool_alloc+0x24/0xda > >>>> [] :xfs:xfs_cluster_write+0xcd/0xf8 > >>>> [] bio_alloc_bioset+0x89/0xd9 > >>>> [] bio_alloc+0x10/0x20 > >>>> [] :xfs:xfs_alloc_ioend_bio+0x22/0x4e > >>>> [] :xfs:xfs_submit_ioend+0x4d/0xc6 > >>>> [] :xfs:xfs_page_state_convert+0x516/0x565 > >>>> [] :xfs:xfs_vm_writepage+0xb4/0xeb > >>>> [] __writepage+0xa/0x23 > >>>> [] write_cache_pages+0x182/0x2b7 > >>>> [] __writepage+0x0/0x23 > >>>> [] do_writepages+0x20/0x2d > >>>> [] __writeback_single_inode+0x144/0x29d > >>>> [] sync_sb_inodes+0x1b1/0x285 > >>>> [] :xfs:xfs_get_blocks+0x0/0xe > >>>> [] writeback_inodes+0x62/0xb3 > >>>> [] balance_dirty_pages_ratelimited_nr+0x155/0x2b3 > >>>> [] generic_file_buffered_write+0x206/0x633 > >>>> [] thread_return+0x3e/0x9d > >>>> [] current_fs_time+0x1e/0x24 > >>>> [] :xfs:xfs_write+0x52f/0x75a > >>>> [] dummy_file_permission+0x0/0x3 > >>>> [] do_sync_write+0xc9/0x10c > >>>> [] autoremove_wake_function+0x0/0x2e > >>>> [] set_next_entity+0x18/0x3a > >>>> [] vfs_write+0xad/0x136 > >>>> [] sys_write+0x45/0x6e > >>>> [] system_call_after_swapgs+0x7b/0x80 > >>>> > >>>> Mem-info: > >>>> Node 0 DMA per-cpu: > >>>> CPU 0: hi: 0, btch: 1 usd: 0 > >>>> CPU 1: hi: 0, btch: 1 usd: 0 > >>>> CPU 2: hi: 0, btch: 1 usd: 0 > >>>> CPU 3: hi: 0, btch: 1 usd: 0 > >>>> Node 0 DMA32 per-cpu: > >>>> CPU 0: hi: 186, btch: 31 usd: 153 > >>>> CPU 1: hi: 186, btch: 31 usd: 185 > >>>> CPU 2: hi: 186, btch: 31 usd: 141 > >>>> CPU 3: hi: 186, btch: 31 usd: 190 > >>>> Node 0 Normal per-cpu: > >>>> CPU 0: hi: 186, btch: 31 usd: 169 > >>>> CPU 1: hi: 186, btch: 31 usd: 185 > >>>> CPU 2: hi: 186, btch: 31 usd: 44 > >>>> CPU 3: hi: 186, btch: 31 usd: 116 > >>>> Node 1 Normal per-cpu: > >>>> CPU 0: hi: 186, btch: 31 usd: 175 > >>>> CPU 1: hi: 186, btch: 31 usd: 156 > >>>> CPU 2: hi: 186, btch: 31 usd: 33 > >>>> CPU 3: hi: 186, btch: 31 usd: 160 > >>>> Active:35627 inactive:1900080 dirty:48667 writeback:147697 unstable:0 > >>>> free:8797 slab:112757 mapped:1726 pagetables:391 bounce:0 > >>>> Node 0 DMA free:11996kB min:12kB low:12kB high:16kB active:0kB inactive:0kB present:11452kB pages_scanned:0 all_unreclaimable? yes > >>>> lowmem_reserve[]: 0 3000 4010 4010 > >>>> Node 0 DMA32 free:12336kB min:4276kB low:5344kB high:6412kB active:1592kB inactive:2834572kB present:3072160kB pages_scanned:0 all_unreclaimable? no > >>>> lowmem_reserve[]: 0 0 1010 1010 > >>>> Node 0 Normal free:2320kB min:1436kB low:1792kB high:2152kB active:14336kB inactive:973540kB present:1034240kB pages_scanned:0 all_unreclaimable? no > >>>> lowmem_reserve[]: 0 0 0 0 > >>>> Node 1 Normal free:8984kB min:5756kB low:7192kB high:8632kB active:126580kB inactive:3791952kB present:4136960kB pages_scanned:0 all_unreclaimable? no > >>>> lowmem_reserve[]: 0 0 0 0 > >>>> Node 0 DMA: 5*4kB 5*8kB 2*16kB 4*32kB 4*64kB 4*128kB 3*256kB 2*512kB 1*1024kB 0*2048kB 2*4096kB = 11996kB > >>>> Node 0 DMA32: 1301*4kB 17*8kB 1*16kB 1*32kB 1*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 1*2048kB 1*4096kB = 12236kB > >>>> Node 0 Normal: 311*4kB 0*8kB 1*16kB 3*32kB 1*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 0*2048kB 0*4096kB = 2060kB > >>>> Node 1 Normal: 1210*4kB 0*8kB 0*16kB 0*32kB 1*64kB 1*128kB 2*256kB 1*512kB 1*1024kB 1*2048kB 0*4096kB = 9128kB > >>>> 1901879 total pagecache pages > >>>> Swap cache: add 526500, delete 526485, find 153749/161350 > >>>> Free swap = 1999532kB > >>>> Total swap = 2000084kB > >>>> Free swap: 1999532kB > >>>> 2097152 pages of RAM > >>>> 29989 reserved pages > >>>> 1902596 pages shared > >>>> 15 pages swap cached > >>> -- > >>> ____________________________________________________________________ > >>> DI (FH) Raoul Bhatia M.Sc. email. r.bhatia@ipax.at > >>> Technischer Leiter > >>> > >>> IPAX - Aloy Bhatia Hava OEG web. http://www.ipax.at > >>> Barawitzkagasse 10/2/2/11 email. office@ipax.at > >>> 1190 Wien tel. +43 1 3670030 > >>> FN 277995t HG Wien fax. +43 1 3670030 15 > >>> ____________________________________________________________________ > >>> > >> -- > >> Dave Chinner > >> Principal Engineer > >> SGI Australian Software Group > > > > > -- > ____________________________________________________________________ > DI (FH) Raoul Bhatia M.Sc. email. r.bhatia@ipax.at > Technischer Leiter > > IPAX - Aloy Bhatia Hava OEG web. http://www.ipax.at > Barawitzkagasse 10/2/2/11 email. office@ipax.at > 1190 Wien tel. +43 1 3670030 > FN 277995t HG Wien fax. +43 1 3670030 15 > ____________________________________________________________________ -- Jens Axboe From owner-xfs@oss.sgi.com Tue Apr 29 01:20:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 01:20:20 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,WEIRD_PORT 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 m3T8JtEc007175 for ; Tue, 29 Apr 2008 01:19:59 -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 SAA09341; Tue, 29 Apr 2008 18:20:32 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id A323B58C4C15; Tue, 29 Apr 2008 18:20:31 +1000 (EST) Date: Tue, 29 Apr 2008 18:20:31 +1000 To: torvalds@linux-foundation.org Cc: linux-kernel@vger.kernel.org, xfs@oss.sgi.com, akpm@linux-foundation.org Subject: [GIT PULL] XFS update for 2.6.26-rc1 User-Agent: nail 11.25 7/29/05 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-Id: <20080429082031.A323B58C4C15@chook.melbourne.sgi.com> From: lachlan@sgi.com (Lachlan McIlroy) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15670 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Please pull from the for-linus branch: git pull git://oss.sgi.com:8090/xfs/xfs-2.6.git for-linus This will update the following files: fs/xfs/Kconfig | 13 ++ fs/xfs/linux-2.6/mrlock.h | 60 ++++------ fs/xfs/linux-2.6/xfs_buf.c | 2 +- fs/xfs/linux-2.6/xfs_export.c | 2 +- fs/xfs/linux-2.6/xfs_file.c | 75 ----------- fs/xfs/linux-2.6/xfs_ioctl.c | 8 +- fs/xfs/linux-2.6/xfs_iops.c | 3 +- fs/xfs/linux-2.6/xfs_linux.h | 1 - fs/xfs/linux-2.6/xfs_lrw.c | 21 ++-- fs/xfs/linux-2.6/xfs_lrw.h | 1 - fs/xfs/linux-2.6/xfs_super.c | 2 +- fs/xfs/linux-2.6/xfs_vnode.h | 24 ---- fs/xfs/quota/xfs_dquot.c | 4 +- fs/xfs/quota/xfs_qm.c | 27 ++--- fs/xfs/quota/xfs_qm_syscalls.c | 6 - fs/xfs/quota/xfs_quota_priv.h | 5 - fs/xfs/quota/xfs_trans_dquot.c | 2 +- fs/xfs/xfs.h | 2 +- fs/xfs/xfs_acl.c | 53 ++------ fs/xfs/xfs_attr.c | 93 ++++++++------ fs/xfs/xfs_attr.h | 6 +- fs/xfs/xfs_bmap.c | 1 - fs/xfs/xfs_dfrag.c | 4 +- fs/xfs/xfs_fsops.c | 8 +- fs/xfs/xfs_ialloc.c | 10 ++ fs/xfs/xfs_iget.c | 140 +++++++++++---------- fs/xfs/xfs_inode.c | 25 ++-- fs/xfs/xfs_inode.h | 16 +-- fs/xfs/xfs_inode_item.c | 12 +- fs/xfs/xfs_iomap.c | 19 ++-- fs/xfs/xfs_itable.c | 6 - fs/xfs/xfs_mount.c | 83 ++++++------- fs/xfs/xfs_mount.h | 7 +- fs/xfs/xfs_rename.c | 252 ++++++++----------------------------- fs/xfs/xfs_trans_inode.c | 12 +- fs/xfs/xfs_utils.c | 45 +------- fs/xfs/xfs_utils.h | 2 - fs/xfs/xfs_vfsops.c | 1 + fs/xfs/xfs_vnodeops.c | 274 +++++----------------------------------- fs/xfs/xfs_vnodeops.h | 8 +- 40 files changed, 396 insertions(+), 939 deletions(-) through these commits: commit adaa693b845373296631766176ebf0f73a342e10 Author: Stephen Rothwell Date: Tue Apr 22 15:26:13 2008 +1000 [XFS] Fix build failure after enabling CONFIG_XFS_DEBUG Signed-off-by: Stephen Rothwell Signed-off-by: Lachlan McIlroy commit c5acbaf43da139fe014d78d1f0ca7754fa856ddb Author: Christoph Hellwig Date: Mon Apr 21 18:11:13 2008 +1000 [XFS] remove dmapi cruft in xfs_file.c The dmapi cruft in xfs_file.c is totally out of date in mainline vs CVS, and at this point just removing this code which can't be used on mainline at all seems to be the best option to keep it maintainable. Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 3a738a5c73e0617d11b27ac46dd6a1a8f752017b Author: Christoph Hellwig Date: Mon Apr 21 17:25:35 2008 +1000 [XFS] remove sendfile leftovers Remove the last sendfile leftovers in mainline. This code is already gone in CVS. Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 7788fae6cce616fe2c624273fcfe54cf50f5c38b Author: Christoph Hellwig Date: Mon Apr 21 17:22:27 2008 +1000 [XFS] allow enabling CONFIG_XFS_DEBUG Back when I first submitted XFS for mainline inclusion we made the decision that the debug code is far to extensive to be accidentally enabled by users in mainline. But then again it's often quite useful to track problems down and hacking the makefile all the time is rather annoying. Given all the debug options with even more overhead like lockdep or DEBUG_PAGE_ALLOC users (or rather developers) should know by now what they're doing. Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 359346a9655c8800408ed3ca44517ac7ea95c197 Author: David Chinner Date: Tue Apr 29 12:53:32 2008 +1000 [XFS] Don't initialise new inode generation numbers to zero When we allocation new inode chunks, we initialise the generation numbers to zero. This works fine until we delete a chunk and then reallocate it, resulting in the same inode numbers but with a reset generation count. This can result in inode/generation pairs of different inodes occurring relatively close together. Given that the inode/gen pair makes up the "unique" portion of an NFS filehandle on XFS, this can result in file handles cached on clients being seen on the wire from the server but refer to a different file. This causes .... issues for NFS clients. Hence we need a unique generation number initialisation for each inode to prevent reuse of a small portion of the generation number space. Use a random number to initialise the generation number so we don't need to keep any new state on disk whilst making the new number difficult to guess from previous allocations. SGI-PV: 979416 SGI-Modid: xfs-linux-melb:xfs-kern:31001a Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 86c4d62305649848164ae311a0959fc569b0d964 Author: David Chinner Date: Tue Apr 29 12:53:21 2008 +1000 [XFS] Fix check for block zero access in xfs_write_iomap_allocate() The check for block zero access should be done on non-realtime inodes. Fix the logic error in xfs_write_iomap_allocate(), and simplify the logic on all checks for block zero access in xfs_iomap.c SGI-PV: 980888 SGI-Modid: xfs-linux-melb:xfs-kern:30998a Signed-off-by: David Chinner Signed-off-by: Lachlan McIlroy commit d349404ff14758dc9a2d3df032073ed795085860 Author: David Chinner Date: Tue Apr 29 12:53:15 2008 +1000 [XFS] Don't double count reserved block changes on UP. On uniprocessor machines, the incore superblock is used for all in memory accounting of free blocks. in this situation, changes to the reserved block count are accounted twice; once directly and once via xfs_mod_incore_sb(). Seeing as the modification on SMP is done via xfs_mod_incore_sb(), make this the only update mechanism that UP uses as well. SGI-PV: 980654 SGI-Modid: xfs-linux-melb:xfs-kern:30997a Signed-off-by: David Chinner Signed-off-by: Lachlan McIlroy commit fe0754f0e5c0f070bf82b6e7e5e8fa5a188163fc Author: Alexey Dobriyan Date: Tue Apr 29 12:53:08 2008 +1000 [XFS] remove xfs_log_ticket_zone on rmmod Fix bug introduced in commit eb01c9cd87c7a9998c2edf209721ea069e3e3652 aka "[XFS] Remove the xlog_ticket allocator" SGI-PV: 980887 SGI-Modid: xfs-linux-melb:xfs-kern:30995a Signed-off-by: Alexey Dobriyan Signed-off-by: David Chinner Signed-off-by: Lachlan McIlroy commit 7155054c9d8b5974f6e788b46939b419bd5fb020 Author: Eric Sandeen Date: Tue Apr 29 12:53:00 2008 +1000 [XFS] fix non-smp xfs build xfs_reserve_blocks() calls xfs_icsb_sync_counters_locked(), which is not defined if !CONFIG_SMP/!HAVE_PERCPU_SB SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30991a Signed-off-by: Eric Sandeen Signed-off-by: Lachlan McIlroy commit 18d18208daced52123de9ba0808447058d3442d8 Author: Donald Douwsma Date: Tue Apr 22 17:34:56 2008 +1000 [XFS] Fix broken HAVE_SPLICE removal commit. Commit e687330b5ed1ea899fdaf0dea50aba196b6e019a was meant to remove the unused HAVE_SPLICE macro, instead an unrelated change was checked enabling QUOTADEBUG when building DEBUG XFS. Restore the intended changes. SGI-PV: 971046 SGI-Modid: xfs-linux-melb:xfs-kern:30924a Signed-off-by: Donald Douwsma Signed-off-by: Barry Naujok Signed-off-by: Lachlan McIlroy commit ce46193bcaaf3c769718bcec6eae94719b8f53ed Author: Christoph Hellwig Date: Tue Apr 22 17:34:50 2008 +1000 [XFS] kill XFS_ICSB_SB_LOCKED With the last two patches XFS_ICSB_SB_LOCKED is never checked and only superflously passed to xfs_icsb_count, so kill it. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30920a Signed-off-by: Christoph Hellwig Signed-off-by: David Chinner Signed-off-by: Lachlan McIlroy commit 45af6c6de6453b385c80555c0ee40ab5fc4a033b Author: Christoph Hellwig Date: Tue Apr 22 17:34:44 2008 +1000 [XFS] split xfs_icsb_balance_counter Add an xfs_icsb_balance_counter_locked for the case where mp->m_sb_lock is already locked. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30918a Signed-off-by: Christoph Hellwig Signed-off-by: David Chinner Signed-off-by: Lachlan McIlroy commit d4d90b577ee5af5c1b29bd693aca026a77a1a2f1 Author: Christoph Hellwig Date: Tue Apr 22 17:34:37 2008 +1000 [XFS] Add xfs_icsb_sync_counters_locked for when m_sb_lock already held Add a new xfs_icsb_sync_counters_locked for the case where m_sb_lock is already taken and add a flags argument to xfs_icsb_sync_counters so that xfs_icsb_sync_counters_flags is not needed. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30917a Signed-off-by: Christoph Hellwig Signed-off-by: David Chinner Signed-off-by: Lachlan McIlroy commit e8b0ebaa115ac46b21622b103c29927f5805aeaa Author: Barry Naujok Date: Tue Apr 22 17:34:31 2008 +1000 [XFS] Cleanup xfs_attr a bit with xfs_name and remove cred SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30913a Signed-off-by: Barry Naujok Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 5df78e73d328e870a1cd8a9e0f39bf094e42ce9d Author: Christoph Hellwig Date: Tue Apr 22 17:34:24 2008 +1000 [XFS] kill usesless IHOLD calls in xfs_remove and xfs_rmdir The VFS always has an inode reference when we call these functions. So we only need to grab a signle reference to each inode that's joined to a transaction - all the other bumping and dropping is as useless as the comments describing the IRIX semantics. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30912a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 82dab941a192d081dd0b7cde3ed32603372d5acc Author: Christoph Hellwig Date: Tue Apr 22 17:34:18 2008 +1000 [XFS] kill parent == child checks in xfs_remove and xfs_rmdir VFS guaranteed these can't happen. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30911a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 1ac74e01df959e3e91baded7c83399372af945a2 Author: Christoph Hellwig Date: Tue Apr 22 17:34:12 2008 +1000 [XFS] kill usesless IHOLD calls in xfs_rename Similar to to the previous patch for remove and rmdir only grab a reference to inodes when we join them to transaction to balance the decrement on transaction completion. Everything else it taken care of by the VFS. Note that the old case had leaks of inode count when src == target or src or target == one of the parent inodes, but these cases are fortunately already rejected by the VFS. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30904a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit cfa853e47df4fbee441ac0ac3fb592f076233145 Author: Christoph Hellwig Date: Tue Apr 22 17:34:06 2008 +1000 [XFS] remove manual lookup from xfs_rename and simplify locking ->rename already gets the target inode passed if it exits. Pass it down to xfs_rename so that we can avoid looking it up again. Also simplify locking as the first lock section in xfs_rename can go away now: the isdir is an invariant over the lifetime of the inode, and new_parent and the nlink check are namespace topology protected by i_mutex in the VFS. The projid check needs to move into the second lock section anyway to not be racy. Also kill the now unused xfs_dir_lookup_int and remove the now-unused first_locked argumet to xfs_lock_inodes. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30903a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 579aa9caf552c639fc78168db4cfe7ffcf00c3b3 Author: Christoph Hellwig Date: Tue Apr 22 17:34:00 2008 +1000 [XFS] shrink mrlock_t The writer field is not needed for non_DEBU builds so remove it. While we're at i also clean up the interface for is locked asserts to go through and xfs_iget.c helper with an interface like the xfs_ilock routines to isolated the XFS codebase from mrlock internals. That way we can kill mrlock_t entirely once rw_semaphores grow an islocked facility. Also remove unused flags to the ilock family of functions. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30902a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit eca450b7c23f804597b87085b2a05bfc5b3ccb8b Author: Christoph Hellwig Date: Tue Apr 22 17:33:52 2008 +1000 [XFS] simplify xfs_lookup Opencode xfs-kill-xfs_dir_lookup_int here, which gets rid of a lock roundtrip, and lots of stack space. Also kill the di_mode == 0 check that has been done in xfs_iget for a few years now. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30901a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit d4377d84189349357e1812eaff6d0504766eea06 Author: Christoph Hellwig Date: Tue Apr 22 17:33:46 2008 +1000 [XFS] xfs_rename: pass resblks to xfs_dir_removename Similar to rmdir and remove - avoids a potential transaction reservation overrun. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30900a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 6a7f422d47d4af461704ebb9d7a389d9e59766b2 Author: Christoph Hellwig Date: Tue Apr 22 17:33:40 2008 +1000 [XFS] kill di_mode checks after xfs_iget Unless XFS_IGET_CREATE is passed xfs_iget will return ENOENT if it encounters an inode with di_mode == 0. Remove the duplicated checks in the callers. (the log recovery case is not touched for now) SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30898a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 4e5dbb3498e74514b9936d691413afc55fb84ea9 Author: Christoph Hellwig Date: Tue Apr 22 17:33:33 2008 +1000 [XFS] kill xfs_getattr It's currently used by the ACL code to read di_mode/di_uid, but these are simple 32bit scalar values we can just read directly without locking. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30897a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 42173f6860af7e016a950a9a19a66679cfc46d98 Author: Christoph Hellwig Date: Tue Apr 22 17:33:25 2008 +1000 [XFS] Remove VN_IS* macros and related cruft. We can just check i_mode / di_mode directly. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30896a Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy From owner-xfs@oss.sgi.com Tue Apr 29 01:28:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 01:28:54 -0700 (PDT) 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=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 m3T8ShVr008305 for ; Tue, 29 Apr 2008 01:28:46 -0700 X-ASG-Debug-ID: 1209457766-474a01b90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.ipax.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id DFEDE160429A for ; Tue, 29 Apr 2008 01:29:26 -0700 (PDT) Received: from mail.ipax.at (mail.ipax.at [80.64.143.40]) by cuda.sgi.com with ESMTP id 3izPwn18WLZBZM2a for ; Tue, 29 Apr 2008 01:29:26 -0700 (PDT) Received: from [192.168.1.110] (vie-078-142-128-152.dsl.sil.at [78.142.128.152]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.ipax.at (Postfix) with ESMTP id 6F4EF47743A; Tue, 29 Apr 2008 10:29:27 +0200 (CEST) Message-ID: <4816DC65.5060901@ipax.at> Date: Tue, 29 Apr 2008 10:29:25 +0200 From: "Raoul Bhatia [IPAX]" User-Agent: Thunderbird 2.0.0.12 (X11/20080227) MIME-Version: 1.0 To: Jens Axboe Cc: David Chinner , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: call trace after >page allocation failure. order:0, mode:0x10000< Subject: Re: call trace after >page allocation failure. order:0, mode:0x10000< References: <480DADD2.7060408@ipax.at> <20080423223541.GQ103491721@sgi.com> <20080424104818.GT12774@kernel.dk> <48120094.9070906@ipax.at> <20080429075631.GH12774@kernel.dk> In-Reply-To: <20080429075631.GH12774@kernel.dk> X-Enigmail-Version: 0.95.6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail.ipax.at[80.64.143.40] X-Barracuda-Start-Time: 1209457766 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0147 1.0000 -1.9252 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.93 X-Barracuda-Spam-Status: No, SCORE=-1.93 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.1, rules version 3.1.49152 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15671 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: r.bhatia@ipax.at Precedence: bulk X-list: xfs Jens Axboe wrote: > On Fri, Apr 25 2008, Raoul Bhatia [IPAX] wrote: >> hi, >> >> so what do you suggest? i will have access to this machine for another >> couple of days. then it is handed over to a customer. >> >> for me, it's not a very important issue, i just meant to report ;) > > It should not be anything to worry about, as things should proceed fine > still. thank you for your help. mission is done -> unsubscribing now ;) cheers, raoul -- ____________________________________________________________________ DI (FH) Raoul Bhatia M.Sc. email. r.bhatia@ipax.at Technischer Leiter IPAX - Aloy Bhatia Hava OEG web. http://www.ipax.at Barawitzkagasse 10/2/2/11 email. office@ipax.at 1190 Wien tel. +43 1 3670030 FN 277995t HG Wien fax. +43 1 3670030 15 ____________________________________________________________________ From owner-xfs@oss.sgi.com Tue Apr 29 02:59:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 02:59:16 -0700 (PDT) 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=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 m3T9x5ZG016049 for ; Tue, 29 Apr 2008 02:59:08 -0700 X-ASG-Debug-ID: 1209463185-407603890000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailgate-internal3.sri.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id BC20C10D33A6 for ; Tue, 29 Apr 2008 02:59:45 -0700 (PDT) Received: from mailgate-internal3.sri.com (mailgate-internal3.SRI.COM [128.18.84.113]) by cuda.sgi.com with SMTP id CTI0db2F07jsAKsp for ; Tue, 29 Apr 2008 02:59:45 -0700 (PDT) Received: from smssmtp-internal1.sri.com (128.18.84.115) by mailgate-internal3.sri.com with SMTP; 29 Apr 2008 09:59:45 -0000 X-AuditID: 80125473-a9354bb000000a5d-30-4816f190aebe Received: from mx1.csl.sri.com (mx1.csl.sri.com [130.107.1.29]) by smssmtp-internal1.sri.com (Symantec Mail Security) with ESMTP id CD0781B2501 for ; Tue, 29 Apr 2008 02:59:44 -0700 (PDT) Received: from postal.csl.sri.com (postal.csl.sri.com [130.107.1.19]) by mx1.csl.sri.com (8.13.8/8.12.11) with ESMTP id m3T9xiHs011876 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Tue, 29 Apr 2008 02:59:44 -0700 (PDT) (envelope-from pvs-bounces+xfs=oss.sgi.com@csl.sri.com) Received: from postal.csl.sri.com (localhost [127.0.0.1]) by postal.csl.sri.com (8.13.8/8.13.4) with ESMTP id m3T9xi0o055967 for ; Tue, 29 Apr 2008 02:59:44 -0700 (PDT) (envelope-from pvs-bounces+xfs=oss.sgi.com@csl.sri.com) X-ASG-Orig-Subj: The results of your email commands Subject: The results of your email commands From: pvs-bounces@csl.sri.com To: xfs@oss.sgi.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0252467913==" Message-ID: Date: Tue, 29 Apr 2008 02:59:42 -0700 Precedence: bulk X-BeenThere: pvs@csl.sri.com X-Mailman-Version: 2.1.3 X-Brightmail-Tracker: AAAAAA== X-Barracuda-Connect: mailgate-internal3.SRI.COM[128.18.84.113] X-Barracuda-Start-Time: 1209463187 X-Barracuda-Bayes: INNOCENT GLOBAL 0.3837 1.0000 -0.0442 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.51 X-Barracuda-Spam-Status: No, SCORE=0.51 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.49162 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.55 NO_REAL_NAME From: does not include a real name X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15672 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: pvs-bounces@csl.sri.com Precedence: bulk X-list: xfs --===============0252467913== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit This is an automated mailing list command processor for the mailing list that this message was sent to. Refer to your original message attached below. The mailing list's request processor will contain the string '-request' in the email address. The results of your email command are provided below. Attached is your original message. - Results: Ignoring non-text/plain MIME parts - Unprocessed: pvs-request@csl.sri.com was infected with the malicious virus W32.Mydoom!gen and has been deleted because the file cannot be cleaned. - Done. --===============0252467913== Content-Type: message/rfc822 MIME-Version: 1.0 X-Spam-Checker-Version: SpamAssassin 3.1.1 (2006-03-10) on postal.csl.sri.com X-Spam-Status: No, hits=-0.9 required=5.0 tests=ALL_TRUSTED=-1.44, NO_REAL_NAME=0.55 autolearn=failed version=3.1.1 date=Tue, 29 Apr 2008 02:59:41 -0700 X-Spam-Level: Received: from mx1.csl.sri.com (mx1.csl.sri.com [130.107.1.29]) by postal.csl.sri.com (8.13.8/8.13.4) with ESMTP id m3T9xf34055946 for ; Tue, 29 Apr 2008 02:59:41 -0700 (PDT) (envelope-from xfs@oss.sgi.com) Received: from smssmtp-external2.sri.com (smssmtp-external2.SRI.COM [128.18.85.108]) by mx1.csl.sri.com (8.13.8/8.12.11) with ESMTP id m3T9xftj011868 for ; Tue, 29 Apr 2008 02:59:41 -0700 (PDT) (envelope-from xfs@oss.sgi.com) X-AuditID: 8012556c-a90cdbb000000a4a-49-4816f18ac309 From: xfs@oss.sgi.com To: pvs-request@csl.sri.com Subject: pvs-request@csl.sri.com Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=====mte=boundary=number=1=====" X-Brightmail-Tracker: AAAAAA== Message-Id: <20080429095939.C23B619E73F@smssmtp-external2.sri.com> Date: Tue, 29 Apr 2008 02:59:39 -0700 (PDT) X-SRI-Archive: pvs --=====mte=boundary=number=1===== Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit This message has been processed by Symantec AntiVirus. pvs-request@csl.sri.com was infected with the malicious virus W32.Mydoom!gen and has been deleted because the file cannot be cleaned. --=====mte=boundary=number=1===== Content-Type: message/rfc822 X-AuditID: 8012556c-a90cdbb000000a4a-49-4816f18ac309 X-Invalid-Recipients: Received: from mailgate-external2.sri.com (mailgate-external2.SRI.COM [128.18.85.102]) by smssmtp-external2.sri.com (Symantec Mail Security) with SMTP id 738AF103021 for ; Tue, 29 Apr 2008 02:59:38 -0700 (PDT) X-Spam-Status: No, score=0.0 threshold=6.0 X-Spam-Level: Received: from 222251.onlinedirect.bg (HELO oss.sgi.com) (89.215.222.251) by mailgate-external2.sri.com with SMTP; 29 Apr 2008 09:59:36 -0000 From: xfs@oss.sgi.com To: pvs-request@csl.sri.com Subject: pvs-request@csl.sri.com Date: Tue, 29 Apr 2008 02:59:48 -0700 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0010_0FBD3EE8.0927EE52" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2600.0000 X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 Message-Id: <20080429095938.738AF103021@smssmtp-external2.sri.com> This is a multi-part message in MIME format. ------=_NextPart_000_0010_0FBD3EE8.0927EE52 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit The original message was received at Tue, 29 Apr 2008 02:59:48 -0700 from oss.sgi.com [217.184.42.225] ----- The following addresses had permanent fatal errors ----- ----- Transcript of session follows ----- ... while talking to mail server csl.sri.com.: 550 5.1.2 ... Host unknown (Name server: host not found) ------=_NextPart_000_0010_0FBD3EE8.0927EE52-- --=====mte=boundary=number=1=====-- --===============0252467913==-- From owner-xfs@oss.sgi.com Tue Apr 29 03:05:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 03:05:45 -0700 (PDT) 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.0 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 m3TA5Ua5016644 for ; Tue, 29 Apr 2008 03:05:35 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id UAA11280; Tue, 29 Apr 2008 20:06:06 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3TA64sT142102923; Tue, 29 Apr 2008 20:06:05 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3TA615c149695597; Tue, 29 Apr 2008 20:06:01 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 29 Apr 2008 20:06:01 +1000 From: David Chinner To: linux-fsdevel Cc: linux-mm , xfs-oss Subject: correct use of vmtruncate()? Message-ID: <20080429100601.GO108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15673 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Folks, It appears to me that vmtruncate() is not used correctly in block_write_begin() and friends. The short summary is that it appears that the usage in these functions implies that vmtruncate() should cause truncation of blocks on disk but no filesystem appears to do this, nor does the documentation imply they should. The longer story now. For as long as I've worked on XFS we've had intermittent ASSERT failures when tearing down inodes or doing direct I/O where inodes have delayed allocation extents still attached to them where they shouldn't. Because the ASSERT failure has occurred so long after the problem and it only happens once every blue moon, it's been extremely difficult to track down. Lucky for me, I had my main test box start to fall over the problem reliably last week. [ I say lucky, because a customer started to trip over a different symptom of the same problem reliably about a week before that and I have no idea what changed in my code base to make it trigger on every run. ] The problem stems around this piece of the debug trace pulled from KDB after the system died with an ASSERT: PAGE INVALIDATE: ip 0xe0000038805cc600 inode 0xe0000038805bb980 page 0xa07fffffdf8b5180 pgoff 0x0 di_size 0x026b000 isize 0x026b000 offset 0x0320000 delalloc 1 unmapped 0 unwritten 0 pid 2930 ^^^^^^^^^^ PAGE RELEASE: ip 0xe0000038805cc600 inode 0xe0000038805bb980 page 0xa07fffffdf8b5180 pgoff 0x0 di_size 0x026b000 isize 0x026b000 offset 0x0320000 delalloc 0 unmapped 1 unwritten 0 pid 2930 ^^^^^^^^^^ When ->invalidate_page is called, we have a delalloc extent on the page, but by the time ->release_page is called, the delalloc extent is gone. The code path is: ->invalidate_page xfs_vm_invalidatepage block_invalidatepage >>>>> discard_buffer try_to_release_page ->release_page xfs_vm_releasepage The key point here is in this code path, discard buffer is called on all the buffers on the page being invalidated. That is, we do this to them: static void discard_buffer(struct buffer_head * bh) { lock_buffer(bh); clear_buffer_dirty(bh); bh->b_bdev = NULL; clear_buffer_mapped(bh); clear_buffer_req(bh); clear_buffer_new(bh); clear_buffer_delay(bh); clear_buffer_unwritten(bh); unlock_buffer(bh); } We *clear* the delalloc state from the page, and hence we lose the delalloc state before we get to xfs_vm_releasepage(). it also makes the buffers appear unmapped, so just removing the clear_buffer_delay(bh) is not sufficient to enable us to know this is a delalloc buffer without changing other code. The result is that xfs_vm_releasepage() is unable to convert those extents to real extents (beyond eof) because it can't tell they exist by looking at the bufferhead state. Hence if we then extend the file again later we can trip over these delalloc extents. If it's buffered I/O, it's ok. If it's inode reclaim, then we ASSERT fail. If it's direct I/O, we BUG_ON() in __xfs_get_blocks. If it's hole punching, then we ASSERT fail there. Pain, pain and more pain. IOWs, the current path through vmtruncate into XFS and releasing the page does no truncation at all - in fact ->releasepage *allocates* delayed extents as it's semantics imply that the caller will write the page out and needs the blocks allocated. The question I was asking now was "how the hell do we get to ->invalidate_page call with an active extent without having a matching extent removal operation from the filesystem to clean up?" The key to solving the problem came from this ASSERT failure on a very new inode during a hole punch: Assertion failed: imap.br_startblock != DELAYSTARTBLOCK, file: fs/xfs/xfs_vnodeops.c, line: 3619 .... [] assfail+0x60/0x80 sp=e00000381a0dfc40 bsp=e00000381a0d10b8 [] xfs_zero_remaining_bytes+0x2f0/0x560 sp=e00000381a0dfc40 bsp=e00000381a0d1050 [] xfs_free_file_space+0x770/0xbc0 sp=e00000381a0dfc90 bsp=e00000381a0d0fc8 [] xfs_change_file_space+0x320/0x6a0 sp=e00000381a0dfd10 bsp=e00000381a0d0f78 [] xfs_ioc_space+0x1b0/0x1e0 sp=e00000381a0dfdb0 bsp=e00000381a0d0f30 [] xfs_ioctl+0x6b0/0x1260 sp=e00000381a0dfde0 bsp=e00000381a0d0ee0 [] xfs_file_ioctl+0x50/0xe0 sp=e00000381a0dfe10 bsp=e00000381a0d0e98 [] vfs_ioctl+0x90/0x180 sp=e00000381a0dfe10 bsp=e00000381a0d0e58 [] do_vfs_ioctl+0x980/0xa00 sp=e00000381a0dfe10 bsp=e00000381a0d0e10 [] sys_ioctl+0x60/0xc0 sp=e00000381a0dfe20 bsp=e00000381a0d0d90 .... And the trace: [1]kdb> xexlist 0xe000003880774e00 inode 0xe000003880774e00 df extents 0xe000003880774e80 nextents 0x1 0: startoff 41 startblock NULLSTARTBLOCK(5) blockcount 1 flag 0 [1]kdb> xrwtrc 0xe000003880774e00 i_rwtrace = 0xe00000381ca8d4a0 WRITE ENTER: ip 0xe000003880774e00 size 0x00 ptr 0xe00000381a0dfd30 size 1 io offset 0x029a61 ioflags 0x1 new size 0x048fa3 pid 2939 IOMAP WRITE ENTER: ip 0xe000003880774e00 size 0x00 offset 0x029000 count 0x1000 io new size 0x048fa3 pid=2939 ALLOC MAP: ip 0xe000003880774e00 size 0x00 offset 0x029000 count 0x1000 bmapi flags 0x2 iomap off 0x0199a35 delta 0x809f2a00 bsize 0x4815a972 bno 0x0 imap off 0x29 count 0x1 block 0xffffffff IOMAP WRITE ENTER: ip 0xe000003880774e00 size 0x00 offset 0x02a000 count 0x1000 io new size 0x048fa3 pid=2939 IOMAP WRITE NOSPACE: ip 0xe000003880774e00 size 0x00 offset 0x02a000 count 0x1000 io new size 0x048fa3 pid=2939 IOMAP WRITE NOSPACE: ip 0xe000003880774e00 size 0x00 offset 0x02a000 count 0x1000 io new size 0x048fa3 pid=2939 IOMAP WRITE NOSPACE: ip 0xe000003880774e00 size 0x00 offset 0x02a000 count 0x1000 io new size 0x048fa3 pid=2939 IOMAP WRITE NOSPACE: ip 0xe000003880774e00 size 0x00 offset 0x02a000 count 0x1000 io new size 0x048fa3 pid=2939 PAGE INVALIDATE: ip 0xe000003880774e00 inode 0xe000003880767000 page 0xa07fffffdf875a00 pgoff 0x0 di_size 0x00 isize 0x00 offset 0x020000 delalloc 1 unmapped 0 unwritten 0 pid 2939 PAGE RELEASE: ip 0xe000003880774e00 inode 0xe000003880767000 page 0xa07fffffdf875a00 pgoff 0x0 di_size 0x00 isize 0x00 offset 0x020000 delalloc 0 unmapped 1 unwritten 0 pid 2939 ----- And a strategically placed dump_stack() call showed invalidate_page() had come from vmtruncate() via __block_prepare_write(). IOWs, this trace says that xfs_get_blocks() has returned ENOSPC to __block_prepare_write() after the first buffer on the page has been set up for delayed allocation. As a result of this write being beyond the current EOF, block_begin_write() sees this error and decides to roll back the entire change by truncating the addres space beyond the old EOF with a call to vmtruncate(). But, as we've already seen, vmtruncate() does not cause removal of blocks in XFS; only the removal of pages and buffers from the mapping. IOWs, we've just leaked a delayed allocation extent and left a landmine that we can step on later. My understanding is that XFS is behaving correctly with respect to ->invalidate_page and vmtruncate. Looking at the only relevant hit on vmtruncate() in the Documentation directory, filesystems/Locking says: | ->truncate() is never called directly - it's a callback, not a | method. It's called by vmtruncate() - library function normally used by | ->setattr(). Locking information above applies to that call (i.e. is | inherited from ->setattr() - vmtruncate() is used when ATTR_SIZE had been | passed). This implies that vmtruncate() should only be called from within filesystems when the size of the inode is being changed. In XFS, the vmtruncate() call is closely followed by the extent removal transactions, and they are effectively done as an atomic operation due to the locks that are held at the time. So AFAICT XFS is doing the right thing here... [ Indeed, if vmtruncate() were to do the extent removal at this point in time, XFS would totally suck at removing large files as it would need to do a transaction per page as opposed to one every two extents being removed. ] Hence it seems to me that calling vmtruncate() directly from any context other than from with a filesystem whilst a size change is being executed is incorrect use of vmtruncate(). i.e. all the *write_begin implementations that are used by filesystems that support multiple blocks per page are broken because they are relying on vmtruncate() to remove blocks that are allocated via get_block callouts before the failure occurred. The obvious fix for this is that block_write_begin() and friends should be calling ->setattr to do the truncation and hence follow normal convention for truncating blocks off an inode. However, even that appears to have thorns. e.g. in XFS we hold the iolock exclusively when we call block_write_begin(), but it is not held in all cases where ->setattr is currently called. Hence calling ->setattr from block_write_begin in this failure case will deadlock unless we also pass a "nolock" flag as well. XFS already supports this (e.g. see the XFS fallocate implementation) but no other filesystem does (some probably don't need to). Hence I'm not sure what the best way to fix this is. I don't want to have to duplicate all the generic code just to be able to issue a correct, non-deadlocking truncate operation. I don't want to have to commit the hack I already have for ->invalidate page that does: xfs_count_page_state(page, &delalloc, ....) if (delalloc && !PageUptodate(page)) { /* * set up and call xfs_bumapi() to remove the delalloc * extents on this page. */ ..... } block_invalidatepage(page, offset); because it has negative performance impact on several different common workloads and is completely unnecessary except for this rare error case from block_write_begin(). Since it's impossible to uniquely identify the case in ->invalidate_page, the above hack is as good as I can see can be done. All in all, I'd prefer the ->setattr() with a "ATTR_NO_LOCK" flag solution as the simplest way to solve this, but maybe there's something that I've missed. Comments, suggestions are welcome.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Tue Apr 29 08:53:45 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 08:54:02 -0700 (PDT) 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_00,WEIRD_PORT 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 m3TFrijO020274 for ; Tue, 29 Apr 2008 08:53:45 -0700 X-ASG-Debug-ID: 1209484467-7081029d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp1.linux-foundation.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 200C410DAB4F; Tue, 29 Apr 2008 08:54:27 -0700 (PDT) Received: from smtp1.linux-foundation.org (smtp1.linux-foundation.org [140.211.169.13]) by cuda.sgi.com with ESMTP id 9DCI2XZM0A1yS8FX; Tue, 29 Apr 2008 08:54:27 -0700 (PDT) Received: from imap1.linux-foundation.org (imap1.linux-foundation.org [140.211.169.55]) by smtp1.linux-foundation.org (8.14.2/8.13.5/Debian-3ubuntu1.1) with ESMTP id m3TFrree018186 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 29 Apr 2008 08:53:54 -0700 Received: from localhost (localhost [127.0.0.1]) by imap1.linux-foundation.org (8.13.5.20060308/8.13.5/Debian-3ubuntu1.1) with ESMTP id m3TFrqDI028750; Tue, 29 Apr 2008 08:53:52 -0700 Date: Tue, 29 Apr 2008 08:53:52 -0700 (PDT) From: Linus Torvalds To: Lachlan McIlroy cc: linux-kernel@vger.kernel.org, xfs@oss.sgi.com, akpm@linux-foundation.org X-ASG-Orig-Subj: Re: [GIT PULL] XFS update for 2.6.26-rc1 Subject: Re: [GIT PULL] XFS update for 2.6.26-rc1 In-Reply-To: <20080429082031.A323B58C4C15@chook.melbourne.sgi.com> Message-ID: References: <20080429082031.A323B58C4C15@chook.melbourne.sgi.com> User-Agent: Alpine 1.10 (LFD 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-MIMEDefang-Filter: lf$Revision: 1.188 $ X-Scanned-By: MIMEDefang 2.63 on 140.211.169.13 X-Barracuda-Connect: smtp1.linux-foundation.org[140.211.169.13] X-Barracuda-Start-Time: 1209484468 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.1, rules version 3.1.49190 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15674 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: torvalds@linux-foundation.org Precedence: bulk X-list: xfs On Tue, 29 Apr 2008, Lachlan McIlroy wrote: > > Please pull from the for-linus branch: > git pull git://oss.sgi.com:8090/xfs/xfs-2.6.git for-linus Hmm.. "Already up-to-date." Forgot to push? Linus From owner-xfs@oss.sgi.com Tue Apr 29 09:05:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 09:05:32 -0700 (PDT) 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.0 required=5.0 tests=BAYES_50,HTML_MESSAGE 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 m3TG58dw021050 for ; Tue, 29 Apr 2008 09:05:16 -0700 X-ASG-Debug-ID: 1209485149-707403000000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from gate2-sandiego.nmci.navy.mil (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CDD5310DA7E0 for ; Tue, 29 Apr 2008 09:05:49 -0700 (PDT) Received: from gate2-sandiego.nmci.navy.mil (gate2-sandiego.nmci.navy.mil [138.163.0.42]) by cuda.sgi.com with ESMTP id h6AxcuyCEEtEqVDt for ; Tue, 29 Apr 2008 09:05:49 -0700 (PDT) Received: from nawesdnieg06.nadsuswe.nads.navy.mil ([10.0.0.162]) by gate2-sandiego.nmci.navy.mil with Microsoft SMTPSVC(5.0.2195.6872); Tue, 29 Apr 2008 10:03:14 -0700 Received: from nawesdnieb10.nadsuswe.nads.navy.mil ([10.0.10.123]) by nawesdnieg06.nadsuswe.nads.navy.mil with Microsoft SMTPSVC(6.0.3790.1830); Tue, 29 Apr 2008 09:05:48 -0700 Received: from nawechlkeb03.nadsuswe.nads.navy.mil ([10.4.119.13]) by nawesdnieb10.nadsuswe.nads.navy.mil with Microsoft SMTPSVC(6.0.3790.1830); Tue, 29 Apr 2008 09:05:48 -0700 Received: from nawechlkez02.nadsuswe.nads.navy.mil ([10.4.119.29]) by nawechlkeb03.nadsuswe.nads.navy.mil with Microsoft SMTPSVC(6.0.3790.1830); Tue, 29 Apr 2008 09:05:47 -0700 X-MimeOLE: Produced By Microsoft Exchange V6.5 MIME-Version: 1.0 X-ASG-Orig-Subj: Deleting Files Subject: Deleting Files Date: Tue, 29 Apr 2008 09:05:47 -0700 Message-ID: <32600B6A46438141B01042C966B1AE3F274B3C@nawechlkez02.nadsuswe.nads.navy.mil> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: Deleting Files Thread-Index: AciqEuUZB3arEvZkTFiUBNOpdrUeIA== From: "Benson, Aaron D CIV NAVAIR, 414200D" To: X-OriginalArrivalTime: 29 Apr 2008 16:05:47.0840 (UTC) FILETIME=[E339AC00:01C8AA12] X-Barracuda-Connect: gate2-sandiego.nmci.navy.mil[138.163.0.42] X-Barracuda-Start-Time: 1209485150 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=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.49190 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 294 X-archive-position: 15675 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: aaron.benson@navy.mil Precedence: bulk X-list: xfs I was wondering if someone could explain the process of deleting files in an XFS file system. Mostly on how it affect inodes, vnodes and allocation groups. I am struggle trying to find information on the internals of xfs file systems. Thank you in advance. [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Tue Apr 29 09:15:52 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 09:16:14 -0700 (PDT) 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.0 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 m3TGFiUd022130 for ; Tue, 29 Apr 2008 09:15:52 -0700 X-ASG-Debug-ID: 1209485787-758702ed0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.brightcove.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0A80510DAEC7 for ; Tue, 29 Apr 2008 09:16:27 -0700 (PDT) Received: from mail.brightcove.com (mail.brightcove.com [38.113.27.188]) by cuda.sgi.com with ESMTP id mBx5ga6DN0BgmjFe for ; Tue, 29 Apr 2008 09:16:27 -0700 (PDT) Received: from bcmail1.VIDMARK.LOCAL ([172.20.0.82]) by bcmail1.VIDMARK.LOCAL ([172.20.0.82]) with mapi; Tue, 29 Apr 2008 12:15:49 -0400 From: Lance Reed To: Eric Sandeen , "markgw@sgi.com" CC: "xfs@oss.sgi.com" Date: Tue, 29 Apr 2008 12:15:45 -0400 X-ASG-Orig-Subj: RE: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Subject: RE: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Thread-Topic: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Thread-Index: AcipkgAc/1dec9UHQ92VsoBUUBFz9gAgFYAw Message-ID: <6A32BC807C106440B7E23208F280DDAF01D21F384B@bcmail1.VIDMARK.LOCAL> References: <6A32BC807C106440B7E23208F280DDAF01D21F36FD@bcmail1.VIDMARK.LOCAL> <481650F5.40205@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F3718@bcmail1.VIDMARK.LOCAL> <481656F6.5030300@sandeen.net> <48166E18.10008@sgi.com> <48166F42.50104@sandeen.net> In-Reply-To: <48166F42.50104@sandeen.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: en-US Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 X-Barracuda-Connect: mail.brightcove.com[38.113.27.188] X-Barracuda-Start-Time: 1209485788 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.1, rules version 3.1.49193 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m3TGFqUd022167 X-archive-position: 15676 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lreed@brightcove.com Precedence: bulk X-list: xfs Thanks so much for all the info! I am currently looking over the http://oss.sgi.com/archives/xfs/2008-01/msg00097.html post to figure out if I need to do antyhing manual to finish expanding the filesystem. If it is possible to expand in increments less than 2 TB, is there a way to do this via xfs_growfs? I am a bit confused by the -D and -R options and which one would be relevant here. Or do I have to shrink the LVM Logical Volume first and then just run "xfs_grow /mntpoint". Also, can I run with the "-n" option to confirm if the xfs_growfs command "should" complete correctly each time? (looking for docs on this...) Is there any reason I couldn't grab a newerer release of the XFS tools, etc, and compile for CentOs 5.0 and use them in this case? Thanks in advance for the help. Lance -----Original Message----- From: Eric Sandeen [mailto:sandeen@sandeen.net] Sent: Monday, April 28, 2008 8:44 PM To: markgw@sgi.com Cc: Lance Reed; xfs@oss.sgi.com Subject: Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Mark Goodwin wrote: > > Eric Sandeen wrote: >> Lance Reed wrote: >>> Thanks for the quick response. >>> >>> Actually, I was able to run an xfs_repair and all was well.(took 45 minutes...) >>> >>> But I would love to be able to expand the XFS file system out to the max. >>> >>> I guess I could expand it in < 2TB increments then maybe? >>> >>> Thanks for the update and I will look around. >>> >>> I did find this which I think is related. >>> >>> http://oss.sgi.com/archives/xfs/2008-01/msg00097.html >> Yep, I think expanding it in, say, 1T increments should be fine, and it >> should all (I think...) end up the same as if you'd done it all at once >> (modulo the bug, of course...) > > I think we verified a while back that growing in 2T increments is an > effective workaround - the bug is due to a signed 32 bit overflow. > The fix has been available for some time now, but apparently hasn't > made it's way into Centos yet. Honestly, I think nothing makes its way back to Centos... I really don't have the time to maintain it. If anyone on the list uses Centos + xfs and wants to backport patches that appear to be bugfixes, I'm sure it'd be welcomed. I'd be happy to facilitate w/ review or whatnot, but probably won't have time to actually take on this task myself (despite being the instigator of the centos module originally, which was, in retrospect, perhaps a tad irresponsible...) :) -Eric From owner-xfs@oss.sgi.com Tue Apr 29 09:43:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 09:43:43 -0700 (PDT) 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.7 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 m3TGhA7s027069 for ; Tue, 29 Apr 2008 09:43:18 -0700 X-ASG-Debug-ID: 1209487432-60c003420000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx1.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3C074160627F; Tue, 29 Apr 2008 09:43:52 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id VH2B02Muxi6b9anB; Tue, 29 Apr 2008 09:43:52 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id m3TGhpj0024192; Tue, 29 Apr 2008 12:43:51 -0400 Received: from file.rdu.redhat.com (file.rdu.redhat.com [10.11.255.147]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m3TGhpl1029329; Tue, 29 Apr 2008 12:43:51 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by file.rdu.redhat.com (8.13.1/8.13.1) with ESMTP id m3TGhokJ018685; Tue, 29 Apr 2008 12:43:51 -0400 Message-ID: <48175046.5050405@sandeen.net> Date: Tue, 29 Apr 2008 11:43:50 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (X11/20080226) MIME-Version: 1.0 To: Lance Reed CC: "markgw@sgi.com" , "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Subject: Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed References: <6A32BC807C106440B7E23208F280DDAF01D21F36FD@bcmail1.VIDMARK.LOCAL> <481650F5.40205@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F3718@bcmail1.VIDMARK.LOCAL> <481656F6.5030300@sandeen.net> <48166E18.10008@sgi.com> <48166F42.50104@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F384B@bcmail1.VIDMARK.LOCAL> In-Reply-To: <6A32BC807C106440B7E23208F280DDAF01D21F384B@bcmail1.VIDMARK.LOCAL> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 X-Barracuda-Connect: mx1.redhat.com[66.187.233.31] X-Barracuda-Start-Time: 1209487433 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15677 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Lance Reed wrote: > Thanks so much for all the info! > > I am currently looking over the > http://oss.sgi.com/archives/xfs/2008-01/msg00097.html > post to figure out if I need to do antyhing manual to finish expanding the filesystem. > > If it is possible to expand in increments less than 2 TB, is there a way to do this via xfs_growfs? I am a bit confused by the -D and -R options and which one would be relevant here. Or do I have to shrink the LVM Logical Volume first and then just run "xfs_grow /mntpoint". > Also, can I run with the "-n" option to confirm if the xfs_growfs command "should" complete correctly each time? (looking for docs on this...) > > Is there any reason I couldn't grab a newerer release of the XFS tools, etc, and compile for CentOs 5.0 and use them in this case? Well, it's there's a kernel bug when growing by >2T so it's not just a tools issue... From what Mark said it sounds like growing 2T at a time is fine. you can specify sizes on the xfs_growfs commandline, as specified in the man page. -Eric From owner-xfs@oss.sgi.com Tue Apr 29 09:52:34 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 09:52:45 -0700 (PDT) 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.6 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 m3TGqQrv028562 for ; Tue, 29 Apr 2008 09:52:34 -0700 X-ASG-Debug-ID: 1209487989-528100520000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.brightcove.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0C19E10DB3FF for ; Tue, 29 Apr 2008 09:53:09 -0700 (PDT) Received: from mail.brightcove.com (mail.brightcove.com [38.113.27.188]) by cuda.sgi.com with ESMTP id TnrbC88qJc6bdHFG for ; Tue, 29 Apr 2008 09:53:09 -0700 (PDT) Received: from bcmail1.VIDMARK.LOCAL ([172.20.0.82]) by bcmail1.VIDMARK.LOCAL ([172.20.0.82]) with mapi; Tue, 29 Apr 2008 12:52:31 -0400 From: Lance Reed To: Eric Sandeen CC: "markgw@sgi.com" , "xfs@oss.sgi.com" Date: Tue, 29 Apr 2008 12:52:26 -0400 X-ASG-Orig-Subj: RE: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Subject: RE: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Thread-Topic: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Thread-Index: AciqGB7pAj97iLOCQMu3PFHYrAD4NgAANlgQ Message-ID: <6A32BC807C106440B7E23208F280DDAF01D21F3870@bcmail1.VIDMARK.LOCAL> References: <6A32BC807C106440B7E23208F280DDAF01D21F36FD@bcmail1.VIDMARK.LOCAL> <481650F5.40205@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F3718@bcmail1.VIDMARK.LOCAL> <481656F6.5030300@sandeen.net> <48166E18.10008@sgi.com> <48166F42.50104@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F384B@bcmail1.VIDMARK.LOCAL> <48175046.5050405@sandeen.net> In-Reply-To: <48175046.5050405@sandeen.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: en-US Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 X-Barracuda-Connect: mail.brightcove.com[38.113.27.188] X-Barracuda-Start-Time: 1209487990 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0002 1.0000 -2.0199 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.1, rules version 3.1.49194 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m3TGqYrv028584 X-archive-position: 15678 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lreed@brightcove.com Precedence: bulk X-list: xfs Thanks, Sorry, I am a bit confused on the "data section" vs. the "real-time section"? Is it enough to just run "xfs_growfs -D XXX /mntpoint" and the rest should fall into place. Again, sorry for being dense. I really appraciate the rapid feedback. Thanks, Lance -----Original Message----- From: Eric Sandeen [mailto:sandeen@sandeen.net] Sent: Tuesday, April 29, 2008 12:44 PM To: Lance Reed Cc: markgw@sgi.com; xfs@oss.sgi.com Subject: Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Lance Reed wrote: > Thanks so much for all the info! > > I am currently looking over the > http://oss.sgi.com/archives/xfs/2008-01/msg00097.html > post to figure out if I need to do antyhing manual to finish expanding the filesystem. > > If it is possible to expand in increments less than 2 TB, is there a way to do this via xfs_growfs? I am a bit confused by the -D and -R options and which one would be relevant here. Or do I have to shrink the LVM Logical Volume first and then just run "xfs_grow /mntpoint". > Also, can I run with the "-n" option to confirm if the xfs_growfs command "should" complete correctly each time? (looking for docs on this...) > > Is there any reason I couldn't grab a newerer release of the XFS tools, etc, and compile for CentOs 5.0 and use them in this case? Well, it's there's a kernel bug when growing by >2T so it's not just a tools issue... From what Mark said it sounds like growing 2T at a time is fine. you can specify sizes on the xfs_growfs commandline, as specified in the man page. -Eric From owner-xfs@oss.sgi.com Tue Apr 29 09:55:24 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 09:55:52 -0700 (PDT) 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.7 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 m3TGseGO028894 for ; Tue, 29 Apr 2008 09:55:24 -0700 X-ASG-Debug-ID: 1209488123-65d503a90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx1.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3F6611606303; Tue, 29 Apr 2008 09:55:23 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id LXWDh7LX72FlpoDH; Tue, 29 Apr 2008 09:55:23 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id m3TGtMBj029885; Tue, 29 Apr 2008 12:55:22 -0400 Received: from file.rdu.redhat.com (file.rdu.redhat.com [10.11.255.147]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m3TGtMKX004812; Tue, 29 Apr 2008 12:55:22 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by file.rdu.redhat.com (8.13.1/8.13.1) with ESMTP id m3TGtL8K020964; Tue, 29 Apr 2008 12:55:21 -0400 Message-ID: <481752F9.8040600@sandeen.net> Date: Tue, 29 Apr 2008 11:55:21 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (X11/20080226) MIME-Version: 1.0 To: Lance Reed CC: "markgw@sgi.com" , "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Subject: Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed References: <6A32BC807C106440B7E23208F280DDAF01D21F36FD@bcmail1.VIDMARK.LOCAL> <481650F5.40205@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F3718@bcmail1.VIDMARK.LOCAL> <481656F6.5030300@sandeen.net> <48166E18.10008@sgi.com> <48166F42.50104@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F384B@bcmail1.VIDMARK.LOCAL> <48175046.5050405@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F3870@bcmail1.VIDMARK.LOCAL> In-Reply-To: <6A32BC807C106440B7E23208F280DDAF01D21F3870@bcmail1.VIDMARK.LOCAL> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 X-Barracuda-Connect: mx1.redhat.com[66.187.233.31] X-Barracuda-Start-Time: 1209488124 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15679 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Lance Reed wrote: > Thanks, > > Sorry, I am a bit confused on the "data section" vs. the "real-time section"? > > Is it enough to just run "xfs_growfs -D XXX /mntpoint" and the rest should fall into place. > > Again, sorry for being dense. > I really appraciate the rapid feedback. > Unless you specifically made a filesystem with a realtime subvol, just ignore it, it's not created by default. So yes, -D (in blocks) is what you want. A little cumbersome but not too bad :) -Eric From owner-xfs@oss.sgi.com Tue Apr 29 10:10:24 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 10:10:48 -0700 (PDT) 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=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 m3THAItL032574 for ; Tue, 29 Apr 2008 10:10:24 -0700 X-ASG-Debug-ID: 1209489060-528101370000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tetsuo.zabbo.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9191010DB19A for ; Tue, 29 Apr 2008 10:11:00 -0700 (PDT) Received: from tetsuo.zabbo.net (tetsuo.zabbo.net [207.173.201.20]) by cuda.sgi.com with ESMTP id pNtLNkgazzrPVA2b for ; Tue, 29 Apr 2008 10:11:00 -0700 (PDT) Received: from Macintosh.local (unknown [192.168.110.240]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by tetsuo.zabbo.net (Postfix) with ESMTP id 417B4D1049C; Tue, 29 Apr 2008 10:10:59 -0700 (PDT) Message-ID: <481756A3.20601@oracle.com> Date: Tue, 29 Apr 2008 10:10:59 -0700 From: Zach Brown User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: David Chinner CC: linux-fsdevel , linux-mm , xfs-oss X-ASG-Orig-Subj: Re: correct use of vmtruncate()? Subject: Re: correct use of vmtruncate()? References: <20080429100601.GO108924158@sgi.com> In-Reply-To: <20080429100601.GO108924158@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: tetsuo.zabbo.net[207.173.201.20] X-Barracuda-Start-Time: 1209489060 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.1, rules version 3.1.49197 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15680 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: zach.brown@oracle.com Precedence: bulk X-list: xfs > The obvious fix for this is that block_write_begin() and > friends should be calling ->setattr to do the truncation and hence > follow normal convention for truncating blocks off an inode. > However, even that appears to have thorns. e.g. in XFS we hold the > iolock exclusively when we call block_write_begin(), but it is not > held in all cases where ->setattr is currently called. Hence calling > ->setattr from block_write_begin in this failure case will deadlock > unless we also pass a "nolock" flag as well. XFS already > supports this (e.g. see the XFS fallocate implementation) but no other > filesystem does (some probably don't need to). This paragraph in particular reminds me of an outstanding bug with O_DIRECT and ext*. It isn't truncating partial allocations when a dio fails with ENOSPC. This was noticed by a user who saw that fsck found bocks outside i_size in the file that saw ENOSPC if they tried to unmount and check the volume after the failed write. So, whether we decide that failed writes should call setattr or vmtruncate, we should also keep the generic O_DIRECT path in consideration. Today it doesn't even try the supposed generic method of calling vmtrunate(). - z (Though I'm sure XFS' dio code already handles freeing blocks :)) From owner-xfs@oss.sgi.com Tue Apr 29 14:29:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 14:29:25 -0700 (PDT) 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.0 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 m3TLT55r028714 for ; Tue, 29 Apr 2008 14:29:07 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id HAA28985; Wed, 30 Apr 2008 07:29:45 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3TLTisT150794717; Wed, 30 Apr 2008 07:29:45 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3TLThJC149654329; Wed, 30 Apr 2008 07:29:43 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 30 Apr 2008 07:29:43 +1000 From: David Chinner To: Christoph Hellwig Cc: Timothy Shimmin , xfs-dev , xfs-oss Subject: Re: review: s/i_flags_lock/i_inner_lock/g Message-ID: <20080429212942.GQ108924158@sgi.com> References: <4816AEEB.8090907@sgi.com> <20080429053757.GA30708@infradead.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080429053757.GA30708@infradead.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15681 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Tue, Apr 29, 2008 at 01:37:57AM -0400, Christoph Hellwig wrote: > On Tue, Apr 29, 2008 at 03:15:23PM +1000, Timothy Shimmin wrote: > > Hi there, > > > > As part of future plans to cache incore versions of acls > > off the inode, we want to protect its modification by a spin lock. > > Dave suggested that we use the i_flags_lock but rename it to > > reflect its more general purpose on other fields, such as "i_inner_lock". > > This patch is then basically s/i_flags_lock/i_inner_lock/g. > > Not too happpy about that, as I'd rather kill this lock in it's current > form and use atomic bitops on the flags. I'd rather use i_lock in the > Linux inode for the ACLs. The problem with that is that some of the flags work together and can't be used as separate bitops. eg. xfs_finish_reclaim() and xfs_iget_core(). Hence they currently need to be protected by a spinlock. Also, protecting something in the XFs inode with the linux inode lock could have issues with the lifecycle differences between the inodes. Just something to be careful of.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Tue Apr 29 14:51:34 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 14:52:04 -0700 (PDT) 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.0 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 m3TLpVWK030611 for ; Tue, 29 Apr 2008 14:51:32 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id HAA29644; Wed, 30 Apr 2008 07:52:13 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3TLqAsT151009886; Wed, 30 Apr 2008 07:52:11 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3TLq7pe138777699; Wed, 30 Apr 2008 07:52:07 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 30 Apr 2008 07:52:07 +1000 From: David Chinner To: Zach Brown Cc: David Chinner , linux-fsdevel , linux-mm , xfs-oss Subject: Re: correct use of vmtruncate()? Message-ID: <20080429215207.GT108924158@sgi.com> References: <20080429100601.GO108924158@sgi.com> <481756A3.20601@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <481756A3.20601@oracle.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15682 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Tue, Apr 29, 2008 at 10:10:59AM -0700, Zach Brown wrote: > > > The obvious fix for this is that block_write_begin() and > > friends should be calling ->setattr to do the truncation and hence > > follow normal convention for truncating blocks off an inode. > > However, even that appears to have thorns. e.g. in XFS we hold the > > iolock exclusively when we call block_write_begin(), but it is not > > held in all cases where ->setattr is currently called. Hence calling > > ->setattr from block_write_begin in this failure case will deadlock > > unless we also pass a "nolock" flag as well. XFS already > > supports this (e.g. see the XFS fallocate implementation) but no other > > filesystem does (some probably don't need to). > > This paragraph in particular reminds me of an outstanding bug with > O_DIRECT and ext*. It isn't truncating partial allocations when a dio > fails with ENOSPC. This was noticed by a user who saw that fsck found > bocks outside i_size in the file that saw ENOSPC if they tried to > unmount and check the volume after the failed write. That sounds very similar - ENOSPC seems to be one way of "easily" generating the error condition that exposes this condition, but I'm sure there are others as well... > So, whether we decide that failed writes should call setattr or > vmtruncate, we should also keep the generic O_DIRECT path in > consideration. Today it doesn't even try the supposed generic method of > calling vmtrunate(). Certainly, though the locking will certainly be entertaining in this path.... > (Though I'm sure XFS' dio code already handles freeing blocks :)) Not the dio code as such, but the close path does. Blocks beyond EOF get truncated off in ->release or ->clear_inode (unless they were specifically preallocated) and dio does not do delayed allocation so does not suffer from the "need ->setattr issue" to truncate them away on ENOSPC. i.e. after the error occurs and the app closes the fd, the blocks get truncated away. Basically the problem I described is leaving delayed allocation blocks beyond EOF without any page cache mappings to indicate they are there - allocated blocks beyond EOF are not a problem... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Tue Apr 29 16:10:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 16:10:34 -0700 (PDT) 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.0 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 m3TNA32g005079 for ; Tue, 29 Apr 2008 16:10:07 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA01996; Wed, 30 Apr 2008 09:10:39 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3TNAbsT151029818; Wed, 30 Apr 2008 09:10:38 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3TNAY6J151044175; Wed, 30 Apr 2008 09:10:34 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 30 Apr 2008 09:10:34 +1000 From: David Chinner To: "Benson, Aaron D CIV NAVAIR, 414200D" Cc: xfs@oss.sgi.com Subject: Re: Deleting Files Message-ID: <20080429231034.GV108924158@sgi.com> References: <32600B6A46438141B01042C966B1AE3F274B3C@nawechlkez02.nadsuswe.nads.navy.mil> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <32600B6A46438141B01042C966B1AE3F274B3C@nawechlkez02.nadsuswe.nads.navy.mil> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15683 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Tue, Apr 29, 2008 at 09:05:47AM -0700, Benson, Aaron D CIV NAVAIR, 414200D wrote: > I was wondering if someone could explain the process of deleting files > in an XFS file system. Mostly on how it affect inodes, vnodes and > allocation groups. I am struggle trying to find information on the > internals of xfs file systems. Thank you in advance. Start here: http://oss.sgi.com/projects/xfs/publications Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Tue Apr 29 18:09:45 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 18:10:07 -0700 (PDT) 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,STOX_REPLY_TYPE 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 m3U19cFv017688 for ; Tue, 29 Apr 2008 18:09:45 -0700 X-ASG-Debug-ID: 1209517821-5afa01540000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo202.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 85B5010A40A for ; Tue, 29 Apr 2008 18:10:21 -0700 (PDT) Received: from tyo202.gate.nec.co.jp (TYO202.gate.nec.co.jp [202.32.8.206]) by cuda.sgi.com with ESMTP id fn1FGblkTlmXmSEE for ; Tue, 29 Apr 2008 18:10:21 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate54.nec.co.jp [10.7.69.195]) by tyo202.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m3U1AEbA026010; Wed, 30 Apr 2008 10:10:14 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m3U1AE213255; Wed, 30 Apr 2008 10:10:14 +0900 (JST) Received: from saigo.jp.nec.com (saigo.jp.nec.com [10.26.220.6]) by mailsv3.nec.co.jp (8.13.8/8.13.4) with ESMTP id m3U1AD6Q009217; Wed, 30 Apr 2008 10:10:13 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Wed, 30 Apr 2008 10:10:13 +0900 Message-Id: From: "Takashi Sato" To: "Christoph Hellwig" Cc: , , , , References: <20080428193123t-sato@mail.jp.nec.com> <20080428103719.GA16030@infradead.org> <2E042A67F72447F6AAA0CC0605DBFA84@nsl.ad.nec.co.jp> <20080428130358.GB2798@infradead.org> In-Reply-To: <20080428130358.GB2798@infradead.org> X-ASG-Orig-Subj: Re: [RFC PATCH 1/3] Implement generic freeze feature Subject: Re: [RFC PATCH 1/3] Implement generic freeze feature Date: Wed, 30 Apr 2008 10:10:13 +0900 MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset="ISO-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Windows Mail 6.0.6000.16480 X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6000.16545 X-Barracuda-Connect: TYO202.gate.nec.co.jp[202.32.8.206] X-Barracuda-Start-Time: 1209517822 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.1, rules version 3.1.49211 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15684 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs Hi, >> bd_mount_sem can protect against only freezes and cannot protect against >> unfreezes. If multiple unfreezes run in parallel, the multiple up() for >> bd_mount_sem might occur incorrectly. > > Indeed. The bit flag would fix that because unfreeze could then check > for the bit beeing set first. So that's probably the easiest way to go. I think the bit flag is more efficient than the semaphore. So I will consider whether it can be used for the freeze feature. Cheers, Takashi From owner-xfs@oss.sgi.com Tue Apr 29 19:42:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 19:42:45 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,WEIRD_PORT 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 m3U2gKmi022399 for ; Tue, 29 Apr 2008 19:42:24 -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 MAA05967; Wed, 30 Apr 2008 12:42:56 +1000 Message-ID: <4817DCE2.4090706@sgi.com> Date: Wed, 30 Apr 2008 12:43:46 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: Linus Torvalds CC: linux-kernel@vger.kernel.org, xfs@oss.sgi.com, akpm@linux-foundation.org Subject: Re: [GIT PULL] XFS update for 2.6.26-rc1 References: <20080429082031.A323B58C4C15@chook.melbourne.sgi.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15685 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Yup, forgot to push. Fixed now - could you please try again? Linus Torvalds wrote: > > On Tue, 29 Apr 2008, Lachlan McIlroy wrote: >> Please pull from the for-linus branch: >> git pull git://oss.sgi.com:8090/xfs/xfs-2.6.git for-linus > > Hmm.. > > "Already up-to-date." > > Forgot to push? > > Linus > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > From owner-xfs@oss.sgi.com Tue Apr 29 20:46:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 20:46:29 -0700 (PDT) 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.0 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 m3U3jqjK029722 for ; Tue, 29 Apr 2008 20:45:56 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA07330; Wed, 30 Apr 2008 13:46:35 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3U3kXsT151098327; Wed, 30 Apr 2008 13:46:34 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3U3kUNL151115584; Wed, 30 Apr 2008 13:46:30 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 30 Apr 2008 13:46:30 +1000 From: David Chinner To: David Chinner Cc: linux-fsdevel , linux-mm , xfs-oss Subject: Re: correct use of vmtruncate()? Message-ID: <20080430034630.GY108924158@sgi.com> References: <20080429100601.GO108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080429100601.GO108924158@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15686 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Tue, Apr 29, 2008 at 08:06:01PM +1000, David Chinner wrote: > Folks, > > It appears to me that vmtruncate() is not used correctly in > block_write_begin() and friends. The short summary is that it > appears that the usage in these functions implies that vmtruncate() > should cause truncation of blocks on disk but no filesystem > appears to do this, nor does the documentation imply they should. [snip] > All in all, I'd prefer the ->setattr() with a "ATTR_NO_LOCK" flag > solution as the simplest way to solve this, but maybe there's > something that I've missed. Comments, suggestions are welcome.... And the patch to demonstrate this is below. It does appear to fix the problem, so I'd appreciate some feedback from various other fs maintainers on whether this will cause problems or not.... Cheers, Dave. --- fs/buffer.c | 18 ++++++++++++++---- fs/xfs/linux-2.6/xfs_iops.c | 4 ++++ include/linux/fs.h | 1 + 3 files changed, 19 insertions(+), 4 deletions(-) Index: 2.6.x-xfs-new/fs/buffer.c =================================================================== --- 2.6.x-xfs-new.orig/fs/buffer.c 2008-04-30 12:32:59.482687869 +1000 +++ 2.6.x-xfs-new/fs/buffer.c 2008-04-30 12:43:15.595973324 +1000 @@ -2019,8 +2019,13 @@ int block_write_begin(struct file *file, * outside i_size. Trim these off again. Don't need * i_size_read because we hold i_mutex. */ - if (pos + len > inode->i_size) - vmtruncate(inode, inode->i_size); + if (pos + len > inode->i_size) { + struct iattr newattrs; + + newattrs.ia_size = inode->i_size; + newattrs.ia_valid = ATTR_SIZE | ATTR_NO_LOCK; + notify_change(file->f_dentry, &newattrs); + } } goto out; } @@ -2576,8 +2581,13 @@ out_release: page_cache_release(page); *pagep = NULL; - if (pos + len > inode->i_size) - vmtruncate(inode, inode->i_size); + if (pos + len > inode->i_size) { + struct iattr newattrs; + + newattrs.ia_size = inode->i_size; + newattrs.ia_valid = ATTR_SIZE | ATTR_NO_LOCK; + notify_change(file->f_dentry, &newattrs); + } return ret; } Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-04-30 12:32:59.046743585 +1000 +++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_iops.c 2008-04-30 12:33:28.946922244 +1000 @@ -709,6 +709,10 @@ xfs_vn_setattr( if (ia_valid & (ATTR_MTIME_SET | ATTR_ATIME_SET)) flags |= ATTR_UTIME; + + if (ia_valid & ATTR_NO_LOCK) + flags |= ATTR_NOLOCK; + #ifdef ATTR_NO_BLOCK if ((ia_valid & ATTR_NO_BLOCK)) flags |= ATTR_NONBLOCK; Index: 2.6.x-xfs-new/include/linux/fs.h =================================================================== --- 2.6.x-xfs-new.orig/include/linux/fs.h 2008-04-30 12:32:59.094737451 +1000 +++ 2.6.x-xfs-new/include/linux/fs.h 2008-04-30 12:33:28.998915599 +1000 @@ -337,6 +337,7 @@ typedef void (dio_iodone_t)(struct kiocb #define ATTR_FILE 8192 #define ATTR_KILL_PRIV 16384 #define ATTR_OPEN 32768 /* Truncating from open(O_TRUNC) */ +#define ATTR_NO_LOCK 65536 /* calling with fs locks already held */ /* * This is the Inode Attributes structure, used for notify_change(). It -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Tue Apr 29 23:31:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 23:31:19 -0700 (PDT) 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.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_54, J_CHICKENPOX_65,J_CHICKENPOX_66 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 m3U6Uvs8005544 for ; Tue, 29 Apr 2008 23:31:00 -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 QAA10701; Wed, 30 Apr 2008 16:31:36 +1000 Message-ID: <48181247.8010705@sgi.com> Date: Wed, 30 Apr 2008 16:31:35 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: xfs-dev , xfs-oss Subject: review: xfstests/Makefile for dmapi Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15687 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Hi, In some tests I found that Automake 1.9.1 output a "default" target whereas Automake 1.9.6 did not produce a "default" target - in each case they used the "all" target. So change the default Make to build dmapi with the "all" target instead of using SUBDIRS_MAKERULE on default for it. The SUBDIRS_MAKERULE in xfstests only seems to be used for the default target. --Tim diff --git a/xfstests/Makefile b/xfstests/Makefile index 99509ff..0a0fc27 100644 --- a/xfstests/Makefile +++ b/xfstests/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2000-2006 Silicon Graphics, Inc. All Rights Reserved. +# Copyright (c) 2000-2008 Silicon Graphics, Inc. All Rights Reserved. # TOPDIR = . @@ -16,13 +16,16 @@ LSRCFILES = configure configure.in aclocal.m4 README VERSION LDIRT = config.log .dep config.status config.cache confdefs.h conftest* \ check.log check.time -SUBDIRS = include lib ltp src m4 dmapi +SUBDIRS = include lib ltp src m4 default: $(CONFIGURE) $(DMAPI_MAKEFILE) new remake check $(TESTS) ifeq ($(HAVE_BUILDDEFS), no) $(MAKE) $@ else $(SUBDIRS_MAKERULE) + # automake doesn't always support "default" target + # so do dmapi make explicitly with "all" + cd $(TOPDIR)/dmapi; make all endif ifeq ($(HAVE_BUILDDEFS), yes) From owner-xfs@oss.sgi.com Tue Apr 29 23:57:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 23:57:40 -0700 (PDT) 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.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_74 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 m3U6vKCm007101 for ; Tue, 29 Apr 2008 23:57:23 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA11159; Wed, 30 Apr 2008 16:57:57 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3U6vtsT150944310; Wed, 30 Apr 2008 16:57:56 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3U6vsLe151121259; Wed, 30 Apr 2008 16:57:54 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 30 Apr 2008 16:57:54 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [PATCH] Fix non-debug build for random32() use Message-ID: <20080430065754.GB108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15688 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Include linux/random.h in all builds, not just debug. Signed-off-by: Dave Chinner --- fs/xfs/linux-2.6/xfs_linux.h | 1 + fs/xfs/support/debug.h | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_linux.h =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_linux.h 2008-04-22 15:06:11.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_linux.h 2008-04-30 16:38:38.754688626 +1000 @@ -75,6 +75,7 @@ #include #include #include +#include #include #include Index: 2.6.x-xfs-new/fs/xfs/support/debug.h =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/support/debug.h 2007-08-02 22:13:10.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/support/debug.h 2008-04-30 16:38:43.518080606 +1000 @@ -49,8 +49,6 @@ extern void assfail(char *expr, char *f, #else /* DEBUG */ -#include - #define ASSERT(expr) \ (unlikely(expr) ? (void)0 : assfail(#expr, __FILE__, __LINE__)) From owner-xfs@oss.sgi.com Tue Apr 29 23:59:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 29 Apr 2008 23:59:18 -0700 (PDT) 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 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 m3U6x3xh007231 for ; Tue, 29 Apr 2008 23:59:09 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA11193; Wed, 30 Apr 2008 16:59:43 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3U6xgsT150731812; Wed, 30 Apr 2008 16:59:43 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3U6xb6W150462218; Wed, 30 Apr 2008 16:59:37 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 30 Apr 2008 16:59:37 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [PATCH] Fix non-debug build for xfsidbg.c Message-ID: <20080430065937.GC108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15689 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Make the use of l_iclog_bak conditional on debug configs. Signed-off-by: Dave Chinner --- fs/xfs/xfsidbg.c | 5 +++++ 1 file changed, 5 insertions(+) Index: 2.6.x-xfs-new/fs/xfs/xfsidbg.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfsidbg.c 2008-04-30 16:47:06.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfsidbg.c 2008-04-30 16:49:33.615164895 +1000 @@ -5845,9 +5845,14 @@ xfsidbg_xlog(xlog_t *log) kdb_printf("curr_cycle: %d prev_cycle: %d curr_block: %d prev_block: %d\n", log->l_curr_cycle, log->l_prev_cycle, log->l_curr_block, log->l_prev_block); +#ifdef DEBUG kdb_printf("iclog_bak: 0x%p iclog_size: 0x%x (%d) num iclogs: %d\n", log->l_iclog_bak, log->l_iclog_size, log->l_iclog_size, log->l_iclog_bufs); +#else + kdb_printf("iclog_size: 0x%x (%d) num iclogs: %d\n", + log->l_iclog_size, log->l_iclog_size, log->l_iclog_bufs); +#endif kdb_printf("l_iclog_hsize %d l_iclog_heads %d\n", log->l_iclog_hsize, log->l_iclog_heads); kdb_printf("l_sectbb_log %u l_sectbb_mask %u\n", From owner-xfs@oss.sgi.com Wed Apr 30 00:12:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 00:12:10 -0700 (PDT) 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.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_74 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 m3U7BwuX010501 for ; Wed, 30 Apr 2008 00:12:02 -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 RAA11588; Wed, 30 Apr 2008 17:12:38 +1000 Message-ID: <48181C19.1060001@sgi.com> Date: Wed, 30 Apr 2008 17:13:29 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [PATCH] Fix non-debug build for random32() use References: <20080430065754.GB108924158@sgi.com> In-Reply-To: <20080430065754.GB108924158@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15690 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Looks good to me. David Chinner wrote: > Include linux/random.h in all builds, not just debug. > > Signed-off-by: Dave Chinner > --- > fs/xfs/linux-2.6/xfs_linux.h | 1 + > fs/xfs/support/debug.h | 2 -- > 2 files changed, 1 insertion(+), 2 deletions(-) > > Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_linux.h > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_linux.h 2008-04-22 15:06:11.000000000 +1000 > +++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_linux.h 2008-04-30 16:38:38.754688626 +1000 > @@ -75,6 +75,7 @@ > #include > #include > #include > +#include > > #include > #include > Index: 2.6.x-xfs-new/fs/xfs/support/debug.h > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/support/debug.h 2007-08-02 22:13:10.000000000 +1000 > +++ 2.6.x-xfs-new/fs/xfs/support/debug.h 2008-04-30 16:38:43.518080606 +1000 > @@ -49,8 +49,6 @@ extern void assfail(char *expr, char *f, > > #else /* DEBUG */ > > -#include > - > #define ASSERT(expr) \ > (unlikely(expr) ? (void)0 : assfail(#expr, __FILE__, __LINE__)) > > From owner-xfs@oss.sgi.com Wed Apr 30 00:15:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 00:16:06 -0700 (PDT) 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 m3U7Fset011083 for ; Wed, 30 Apr 2008 00:15:56 -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 RAA11696; Wed, 30 Apr 2008 17:16:33 +1000 Message-ID: <48181D04.4030902@sgi.com> Date: Wed, 30 Apr 2008 17:17:24 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [PATCH] Fix non-debug build for xfsidbg.c References: <20080430065937.GC108924158@sgi.com> In-Reply-To: <20080430065937.GC108924158@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15691 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Dave, would the code look cleaner if iclog_bak was printed on a line by itself? That way we wouldn't need the #else and we wouldn't be duplicating code. David Chinner wrote: > Make the use of l_iclog_bak conditional on debug configs. > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfsidbg.c | 5 +++++ > 1 file changed, 5 insertions(+) > > Index: 2.6.x-xfs-new/fs/xfs/xfsidbg.c > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfsidbg.c 2008-04-30 16:47:06.000000000 +1000 > +++ 2.6.x-xfs-new/fs/xfs/xfsidbg.c 2008-04-30 16:49:33.615164895 +1000 > @@ -5845,9 +5845,14 @@ xfsidbg_xlog(xlog_t *log) > kdb_printf("curr_cycle: %d prev_cycle: %d curr_block: %d prev_block: %d\n", > log->l_curr_cycle, log->l_prev_cycle, log->l_curr_block, > log->l_prev_block); > +#ifdef DEBUG > kdb_printf("iclog_bak: 0x%p iclog_size: 0x%x (%d) num iclogs: %d\n", > log->l_iclog_bak, log->l_iclog_size, log->l_iclog_size, > log->l_iclog_bufs); > +#else > + kdb_printf("iclog_size: 0x%x (%d) num iclogs: %d\n", > + log->l_iclog_size, log->l_iclog_size, log->l_iclog_bufs); > +#endif > kdb_printf("l_iclog_hsize %d l_iclog_heads %d\n", > log->l_iclog_hsize, log->l_iclog_heads); > kdb_printf("l_sectbb_log %u l_sectbb_mask %u\n", > From owner-xfs@oss.sgi.com Wed Apr 30 00:24:53 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 00:25:29 -0700 (PDT) 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=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 m3U7Oigs016145 for ; Wed, 30 Apr 2008 00:24:52 -0700 X-ASG-Debug-ID: 1209540312-084702160000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from e28smtp01.in.ibm.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id ED52A1059B7 for ; Wed, 30 Apr 2008 00:25:17 -0700 (PDT) Received: from e28smtp01.in.ibm.com (e28smtp01.in.ibm.com [59.145.155.1]) by cuda.sgi.com with ESMTP id TOmbMs0AlDAwGErU for ; Wed, 30 Apr 2008 00:25:17 -0700 (PDT) Received: from d28relay04.in.ibm.com (d28relay04.in.ibm.com [9.184.220.61]) by e28smtp01.in.ibm.com (8.13.1/8.13.1) with ESMTP id m3U7P71n028348 for ; Wed, 30 Apr 2008 12:55:07 +0530 Received: from d28av04.in.ibm.com (d28av04.in.ibm.com [9.184.220.66]) by d28relay04.in.ibm.com (8.13.8/8.13.8/NCO v8.7) with ESMTP id m3U7P1TK1384448 for ; Wed, 30 Apr 2008 12:55:01 +0530 Received: from d28av04.in.ibm.com (loopback [127.0.0.1]) by d28av04.in.ibm.com (8.13.1/8.13.3) with ESMTP id m3U7P7gH020839 for ; Wed, 30 Apr 2008 07:25:07 GMT Received: from skywalker ([9.124.217.136]) by d28av04.in.ibm.com (8.13.1/8.12.11) with ESMTP id m3U7P1qn020754; Wed, 30 Apr 2008 07:25:02 GMT Date: Wed, 30 Apr 2008 12:54:57 +0530 From: "Aneesh Kumar K.V" To: Zach Brown Cc: David Chinner , linux-fsdevel , linux-mm , xfs-oss X-ASG-Orig-Subj: Re: correct use of vmtruncate()? Subject: Re: correct use of vmtruncate()? Message-ID: <20080430072457.GB7791@skywalker> References: <20080429100601.GO108924158@sgi.com> <481756A3.20601@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <481756A3.20601@oracle.com> User-Agent: Mutt/1.5.17+20080114 (2008-01-14) X-Barracuda-Connect: e28smtp01.in.ibm.com[59.145.155.1] X-Barracuda-Start-Time: 1209540326 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.1, rules version 3.1.49242 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15692 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: aneesh.kumar@linux.vnet.ibm.com Precedence: bulk X-list: xfs On Tue, Apr 29, 2008 at 10:10:59AM -0700, Zach Brown wrote: > > > The obvious fix for this is that block_write_begin() and > > friends should be calling ->setattr to do the truncation and hence > > follow normal convention for truncating blocks off an inode. > > However, even that appears to have thorns. e.g. in XFS we hold the > > iolock exclusively when we call block_write_begin(), but it is not > > held in all cases where ->setattr is currently called. Hence calling > > ->setattr from block_write_begin in this failure case will deadlock > > unless we also pass a "nolock" flag as well. XFS already > > supports this (e.g. see the XFS fallocate implementation) but no other > > filesystem does (some probably don't need to). > > This paragraph in particular reminds me of an outstanding bug with > O_DIRECT and ext*. It isn't truncating partial allocations when a dio > fails with ENOSPC. This was noticed by a user who saw that fsck found > bocks outside i_size in the file that saw ENOSPC if they tried to > unmount and check the volume after the failed write. This patch should be the fix I guess http://lkml.org/lkml/2006/12/18/103 -aneesh From owner-xfs@oss.sgi.com Wed Apr 30 00:42:32 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 00:42:50 -0700 (PDT) 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 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 m3U7gSOu017564 for ; Wed, 30 Apr 2008 00:42:30 -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 RAA12342; Wed, 30 Apr 2008 17:43:07 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 019CC58C4C15; Wed, 30 Apr 2008 17:43:06 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 979416 - Include linux/random.h in all builds Message-Id: <20080430074307.019CC58C4C15@chook.melbourne.sgi.com> Date: Wed, 30 Apr 2008 17:43:06 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15693 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Include linux/random.h in all builds, not just debug builds. Date: Wed Apr 30 17:40:15 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: lachlan@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31008a fs/xfs/support/debug.h - 1.19 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/support/debug.h.diff?r1=text&tr1=1.19&r2=text&tr2=1.18&f=h - Include linux/random.h in all builds. fs/xfs/linux-2.6/xfs_linux.h - 1.165 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_linux.h.diff?r1=text&tr1=1.165&r2=text&tr2=1.164&f=h - Include linux/random.h in all builds. From owner-xfs@oss.sgi.com Wed Apr 30 00:47:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 00:47:38 -0700 (PDT) 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=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 m3U7lHlb018004 for ; Wed, 30 Apr 2008 00:47:25 -0700 X-ASG-Debug-ID: 1209541669-1aac02490000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from e28smtp02.in.ibm.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C653310D187 for ; Wed, 30 Apr 2008 00:47:52 -0700 (PDT) Received: from e28smtp02.in.ibm.com (e28smtp02.in.ibm.com [59.145.155.2]) by cuda.sgi.com with ESMTP id jcZI6CFpfqN59gJs for ; Wed, 30 Apr 2008 00:47:52 -0700 (PDT) Received: from d28relay04.in.ibm.com (d28relay04.in.ibm.com [9.184.220.61]) by e28smtp02.in.ibm.com (8.13.1/8.13.1) with ESMTP id m3U7lmTI021624 for ; Wed, 30 Apr 2008 13:17:48 +0530 Received: from d28av03.in.ibm.com (d28av03.in.ibm.com [9.184.220.65]) by d28relay04.in.ibm.com (8.13.8/8.13.8/NCO v8.7) with ESMTP id m3U7lfUe1171552 for ; Wed, 30 Apr 2008 13:17:41 +0530 Received: from d28av03.in.ibm.com (loopback [127.0.0.1]) by d28av03.in.ibm.com (8.13.1/8.13.3) with ESMTP id m3U7llNO024142 for ; Wed, 30 Apr 2008 07:47:48 GMT Received: from skywalker ([9.124.217.136]) by d28av03.in.ibm.com (8.13.1/8.12.11) with ESMTP id m3U7lg7b024078; Wed, 30 Apr 2008 07:47:44 GMT Date: Wed, 30 Apr 2008 13:17:38 +0530 From: "Aneesh Kumar K.V" To: David Chinner Cc: linux-fsdevel , linux-mm , xfs-oss X-ASG-Orig-Subj: Re: correct use of vmtruncate()? Subject: Re: correct use of vmtruncate()? Message-ID: <20080430074738.GC7791@skywalker> References: <20080429100601.GO108924158@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080429100601.GO108924158@sgi.com> User-Agent: Mutt/1.5.17+20080114 (2008-01-14) X-Barracuda-Connect: e28smtp02.in.ibm.com[59.145.155.2] X-Barracuda-Start-Time: 1209541681 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.1, rules version 3.1.49244 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15694 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: aneesh.kumar@linux.vnet.ibm.com Precedence: bulk X-list: xfs On Tue, Apr 29, 2008 at 08:06:01PM +1000, David Chinner wrote: > Folks, > > It appears to me that vmtruncate() is not used correctly in > block_write_begin() and friends. The short summary is that it > appears that the usage in these functions implies that vmtruncate() > should cause truncation of blocks on disk but no filesystem > appears to do this, nor does the documentation imply they should. Looking at ext*_truncate, I see we are freeing blocks as a part of vmtruncate. Or did I miss something ? -aneesh From owner-xfs@oss.sgi.com Wed Apr 30 01:57:49 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 01:58:13 -0700 (PDT) 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.2 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 m3U8vgNw022382 for ; Wed, 30 Apr 2008 01:57:49 -0700 X-ASG-Debug-ID: 1209545903-442003a30000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.parisc-linux.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CD421160F3E4 for ; Wed, 30 Apr 2008 01:58:23 -0700 (PDT) Received: from mail.parisc-linux.org (palinux.external.hp.com [192.25.206.14]) by cuda.sgi.com with ESMTP id TRD0Zy1GSbOidjaa for ; Wed, 30 Apr 2008 01:58:23 -0700 (PDT) Received: by mail.parisc-linux.org (Postfix, from userid 26919) id 146FA494006; Wed, 30 Apr 2008 02:58:13 -0600 (MDT) Date: Wed, 30 Apr 2008 02:58:12 -0600 From: Matthew Wilcox To: David Chinner Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: [PATCH] Fix current xfs build Subject: [PATCH] Fix current xfs build Message-ID: <20080430085812.GG14976@parisc-linux.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.13 (2006-08-11) X-Barracuda-Connect: palinux.external.hp.com[192.25.206.14] X-Barracuda-Start-Time: 1209545905 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.1, rules version 3.1.49248 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15695 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: matthew@wil.cx Precedence: bulk X-list: xfs Linus' current git tree appears to be missing a header file which makes xfs fail to build. Signed-off-by: Matthew Wilcox diff --git a/fs/xfs/linux-2.6/xfs_linux.h b/fs/xfs/linux-2.6/xfs_linux.h index 1bc9f60..4edc469 100644 --- a/fs/xfs/linux-2.6/xfs_linux.h +++ b/fs/xfs/linux-2.6/xfs_linux.h @@ -75,6 +75,7 @@ #include #include #include +#include #include #include -- Intel are signing my paycheques ... these opinions are still mine "Bill, look, we understand that you're interested in selling us this operating system, but compare it to ours. We can't possibly take such a retrograde step." From owner-xfs@oss.sgi.com Wed Apr 30 02:04:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 02:04:39 -0700 (PDT) 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.7 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 m3U94KoG023006 for ; Wed, 30 Apr 2008 02:04:26 -0700 X-ASG-Debug-ID: 1209546304-1e95004f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.parisc-linux.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 68A74160C447 for ; Wed, 30 Apr 2008 02:05:04 -0700 (PDT) Received: from mail.parisc-linux.org (palinux.external.hp.com [192.25.206.14]) by cuda.sgi.com with ESMTP id freYBHni3bDc7RcJ for ; Wed, 30 Apr 2008 02:05:04 -0700 (PDT) Received: by mail.parisc-linux.org (Postfix, from userid 26919) id 7FF3C494006; Wed, 30 Apr 2008 03:05:03 -0600 (MDT) Date: Wed, 30 Apr 2008 03:05:03 -0600 From: Matthew Wilcox To: David Chinner Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: [PATCH] Remove l_flushsema Subject: [PATCH] Remove l_flushsema Message-ID: <20080430090502.GH14976@parisc-linux.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.13 (2006-08-11) X-Barracuda-Connect: palinux.external.hp.com[192.25.206.14] X-Barracuda-Start-Time: 1209546304 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.1, rules version 3.1.49248 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15696 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: matthew@wil.cx Precedence: bulk X-list: xfs The l_flushsema doesn't exactly have completion semantics, nor mutex semantics. It's used as a list of tasks which are waiting to be notified that a flush has completed. It was also being used in a way that was potentially racy, depending on the semaphore implementation. By using a waitqueue instead of a semaphore we avoid the need for a separate counter, since we know we just need to wake everything on the queue. Signed-off-by: Matthew Wilcox -- I've only given this light testing, it could use some more. fs/xfs/xfs_log.c | 19 +++++++------------ fs/xfs/xfs_log_priv.h | 6 ++---- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index afaee30..d2e3092 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c @@ -1228,7 +1228,7 @@ xlog_alloc_log(xfs_mount_t *mp, spin_lock_init(&log->l_icloglock); spin_lock_init(&log->l_grant_lock); - initnsema(&log->l_flushsema, 0, "ic-flush"); + init_waitqueue_head(&log->l_flush_wq); /* log record size must be multiple of BBSIZE; see xlog_rec_header_t */ ASSERT((XFS_BUF_SIZE(bp) & BBMASK) == 0); @@ -1573,7 +1573,6 @@ xlog_dealloc_log(xlog_t *log) kmem_free(iclog, sizeof(xlog_in_core_t)); iclog = next_iclog; } - freesema(&log->l_flushsema); spinlock_destroy(&log->l_icloglock); spinlock_destroy(&log->l_grant_lock); @@ -2278,14 +2277,9 @@ xlog_state_do_callback( } #endif - flushcnt = 0; - if (log->l_iclog->ic_state & (XLOG_STATE_ACTIVE|XLOG_STATE_IOERROR)) { - flushcnt = log->l_flushcnt; - log->l_flushcnt = 0; - } + if (log->l_iclog->ic_state & (XLOG_STATE_ACTIVE|XLOG_STATE_IOERROR)) + wake_up_all(&log->l_flush_wq); spin_unlock(&log->l_icloglock); - while (flushcnt--) - vsema(&log->l_flushsema); } /* xlog_state_do_callback */ @@ -2385,12 +2379,13 @@ restart: iclog = log->l_iclog; if (! (iclog->ic_state == XLOG_STATE_ACTIVE)) { - log->l_flushcnt++; + DEFINE_WAIT(wait); + prepare_to_wait(&log->l_flush_wq, &wait, TASK_UNINTERRUPTIBLE); spin_unlock(&log->l_icloglock); xlog_trace_iclog(iclog, XLOG_TRACE_SLEEP_FLUSH); XFS_STATS_INC(xs_log_noiclogs); - /* Ensure that log writes happen */ - psema(&log->l_flushsema, PINOD); + /* Wait for log writes to have flushed */ + schedule(); goto restart; } ASSERT(iclog->ic_state == XLOG_STATE_ACTIVE); diff --git a/fs/xfs/xfs_log_priv.h b/fs/xfs/xfs_log_priv.h index 8952a39..a6dff16 100644 --- a/fs/xfs/xfs_log_priv.h +++ b/fs/xfs/xfs_log_priv.h @@ -423,10 +423,8 @@ typedef struct log { int l_logBBsize; /* size of log in BB chunks */ /* The following block of fields are changed while holding icloglock */ - sema_t l_flushsema ____cacheline_aligned_in_smp; - /* iclog flushing semaphore */ - int l_flushcnt; /* # of procs waiting on this - * sema */ + wait_queue_head_t l_flush_wq ____cacheline_aligned_in_smp; + /* waiting for iclog flush */ int l_covered_state;/* state of "covering disk * log entries" */ xlog_in_core_t *l_iclog; /* head log queue */ -- Intel are signing my paycheques ... these opinions are still mine "Bill, look, we understand that you're interested in selling us this operating system, but compare it to ours. We can't possibly take such a retrograde step." From owner-xfs@oss.sgi.com Wed Apr 30 02:23:21 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 02:23:38 -0700 (PDT) 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.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_53 autolearn=no 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 m3U9NDSL024069 for ; Wed, 30 Apr 2008 02:23:20 -0700 X-ASG-Debug-ID: 1209547431-1e8e011a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from knox.decisionsoft.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6C29E160F5C4; Wed, 30 Apr 2008 02:23:51 -0700 (PDT) Received: from knox.decisionsoft.com (knox-be.decisionsoft.com [87.194.172.100]) by cuda.sgi.com with ESMTP id M8FhmFnGzOYQoBjj; Wed, 30 Apr 2008 02:23:51 -0700 (PDT) Received: from kennet.dsl.local ([10.0.0.11]) by knox.decisionsoft.com with esmtp (Exim 4.63) (envelope-from ) id 1Jr8XV-000473-Sd; Wed, 30 Apr 2008 10:23:49 +0100 Message-ID: <48183AA5.9030804@decisionsoft.co.uk> Date: Wed, 30 Apr 2008 10:23:49 +0100 From: Stuart Rowan Reply-To: strr-debian@decisionsoft.co.uk User-Agent: Thunderbird 2.0.0.12 (X11/20080226) MIME-Version: 1.0 To: David Chinner CC: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: TAKE 979416 - Don't initialise new inode generation numbers to zero Subject: Re: TAKE 979416 - Don't initialise new inode generation numbers to zero References: <20080429004144.757D658C4C15@chook.melbourne.sgi.com> In-Reply-To: <20080429004144.757D658C4C15@chook.melbourne.sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-SA-Exim-Connect-IP: 10.0.0.11 X-SA-Exim-Mail-From: strr-debian@decisionsoft.co.uk X-SA-Exim-Scanned: No (on knox.decisionsoft.com); SAEximRunCond expanded to false X-SystemFilter-new-T: not expanding X-SystemFilter-new-S: not expanding X-SystemFilter-new-F: not expanding X-Barracuda-Connect: knox-be.decisionsoft.com[87.194.172.100] X-Barracuda-Start-Time: 1209547436 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.1, rules version 3.1.49250 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15697 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: strr-debian@decisionsoft.co.uk Precedence: bulk X-list: xfs Is this liable to affect the stable releases, 2.6.24.y and 2.6.25.y? If so, is it appropriate for forwarding to the stable team? I only ask because we have a heavily used NFS /home-directory server that uses XFS for the underlying store. Cheers, Stu. David Chinner wrote, on 29/04/08 01:41: > Don't initialise new inode generation numbers to zero > > When we allocation new inode chunks, we initialise the generation > numbers to zero. This works fine until we delete a chunk and then > reallocate it, resulting in the same inode numbers but with a > reset generation count. This can result in inode/generation > pairs of different inodes occurring relatively close together. > > Given that the inode/gen pair makes up the "unique" portion of > an NFS filehandle on XFS, this can result in file handles cached > on clients being seen on the wire from the server but refer to > a different file. This causes .... issues for NFS clients. > > Hence we need a unique generation number initialisation for > each inode to prevent reuse of a small portion of the generation > number space. Use a random number to initialise the generation > number so we don't need to keep any new state on disk whilst > making the new number difficult to guess from previous allocations. > > Date: Tue Apr 29 10:41:26 AEST 2008 > Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs > Inspected by: hch@infradead.org > > The following file(s) were checked into: > longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb > > > Modid: xfs-linux-melb:xfs-kern:31001a > fs/xfs/xfs_ialloc.c - 1.199 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/> xfs_ialloc.c.diff?r1=text&tr1=1.199&r2=text&tr2=1.198&f=h > http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_ialloc.c.diff?r1=text&tr1=1.199&r2=text&tr2=1.198&f=h > - use random32() to initialise the generation in newly allocated > inodes to prevent short term reuse of inode,gen pairs which > can cause ESTALE problems for NFS clients. > > > From owner-xfs@oss.sgi.com Wed Apr 30 03:15:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 03:15:31 -0700 (PDT) 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 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 m3UAEwWQ028057 for ; Wed, 30 Apr 2008 03:15:01 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id UAA15089; Wed, 30 Apr 2008 20:15:36 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3UAFVsT151064342; Wed, 30 Apr 2008 20:15:35 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3UAFPGv151171581; Wed, 30 Apr 2008 20:15:25 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 30 Apr 2008 20:15:25 +1000 From: David Chinner To: "Aneesh Kumar K.V" Cc: David Chinner , linux-fsdevel , linux-mm , xfs-oss Subject: Re: correct use of vmtruncate()? Message-ID: <20080430101525.GJ108924158@sgi.com> References: <20080429100601.GO108924158@sgi.com> <20080430074738.GC7791@skywalker> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080430074738.GC7791@skywalker> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15698 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 30, 2008 at 01:17:38PM +0530, Aneesh Kumar K.V wrote: > On Tue, Apr 29, 2008 at 08:06:01PM +1000, David Chinner wrote: > > Folks, > > > > It appears to me that vmtruncate() is not used correctly in > > block_write_begin() and friends. The short summary is that it > > appears that the usage in these functions implies that vmtruncate() > > should cause truncation of blocks on disk but no filesystem > > appears to do this, nor does the documentation imply they should. > > Looking at ext*_truncate, I see we are freeing blocks as a part of vmtruncate. > Or did I miss something ? No I missed something. I was looking at block_truncate_page() which is called by various truncate methods but does not do truncation itself. Still doesn't help XFS, though, as updating different parts of the inode in different transactions will result in non-atomic ->setattr updates. Which, given that XFS tends to excel at exposing non-atomic modifications in crash recovery, is a really bad thing. Looking further, doing the truncate operation in ->truncate is probably really stupid simply because the interface does not allow errors to be returned to the caller. e.g. ufs_setattr() has this comment: /* * We don't define our `inode->i_op->truncate', and call it here, * because of: * - there is no way to know old size * - there is no way inform user about error, if it happens in `truncate' */ and I've just added a WARN_ON(error) to xfs_vn_truncate() so that errors don't get lost silently. UFS also uses block_write_begin(), so it will have exactly the same problem as XFS - blocks beyond EOF don't get truncated away by vmtruncate if an error occurs in block_write_begin(). AFAICT, gfs2 is another filesystem that does not have a ->truncate callback - truncation is driven through the ->setattr interface. However, gfs2_write_begin() calls vmtruncate() like block_write_begin() on error from block_prepare_write() and hence also has this bug. I'm sure there are other filesystems that, like XFS, UFS and GFS2, don't do block truncation in ->truncate. Hence it really does seem that calling vmtruncate() from anything other than a ->setattr method is a bug because to do so is to make a false assumption about how filesystems are implemented.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 30 03:20:20 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 03:20:32 -0700 (PDT) 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 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 m3UAKAXa028530 for ; Wed, 30 Apr 2008 03:20:14 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id UAA15237; Wed, 30 Apr 2008 20:20:46 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3UAKisT151195383; Wed, 30 Apr 2008 20:20:45 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3UAKdsj151216550; Wed, 30 Apr 2008 20:20:39 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 30 Apr 2008 20:20:39 +1000 From: David Chinner To: Matthew Wilcox Cc: David Chinner , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH] Fix current xfs build Message-ID: <20080430102039.GK108924158@sgi.com> References: <20080430085812.GG14976@parisc-linux.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080430085812.GG14976@parisc-linux.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15699 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 30, 2008 at 02:58:12AM -0600, Matthew Wilcox wrote: > > Linus' current git tree appears to be missing a header file which makes > xfs fail to build. Patch has already been sent to Linus by myself and Andrew. Doesn't look like it's been pushed out yet, though. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 30 03:21:58 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 03:22:10 -0700 (PDT) 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 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 m3UALqt2028684 for ; Wed, 30 Apr 2008 03:21:57 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id UAA15289; Wed, 30 Apr 2008 20:22:35 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3UAMYsT149285700; Wed, 30 Apr 2008 20:22:35 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3UAMWiG151126453; Wed, 30 Apr 2008 20:22:32 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 30 Apr 2008 20:22:32 +1000 From: David Chinner To: Stuart Rowan Cc: David Chinner , sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: Re: TAKE 979416 - Don't initialise new inode generation numbers to zero Message-ID: <20080430102232.GL108924158@sgi.com> References: <20080429004144.757D658C4C15@chook.melbourne.sgi.com> <48183AA5.9030804@decisionsoft.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48183AA5.9030804@decisionsoft.co.uk> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15700 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 30, 2008 at 10:23:49AM +0100, Stuart Rowan wrote: > Is this liable to affect the stable releases, 2.6.24.y and 2.6.25.y? If so, > is it appropriate for forwarding to the stable team? Yes, and I will do so once we've got .26-rc1 out the door. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 30 03:23:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 03:23:56 -0700 (PDT) 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.9 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 m3UANZC5028913 for ; Wed, 30 Apr 2008 03:23:43 -0700 X-ASG-Debug-ID: 1209551058-658002b30000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.parisc-linux.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F23A710E7518 for ; Wed, 30 Apr 2008 03:24:18 -0700 (PDT) Received: from mail.parisc-linux.org (palinux.external.hp.com [192.25.206.14]) by cuda.sgi.com with ESMTP id DVB0S9axUFB2kqeL for ; Wed, 30 Apr 2008 03:24:18 -0700 (PDT) Received: by mail.parisc-linux.org (Postfix, from userid 26919) id 149CE494006; Wed, 30 Apr 2008 04:24:17 -0600 (MDT) Date: Wed, 30 Apr 2008 04:24:17 -0600 From: Matthew Wilcox To: David Chinner Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH] Remove l_flushsema Subject: Re: [PATCH] Remove l_flushsema Message-ID: <20080430102417.GK14976@parisc-linux.org> References: <20080430090502.GH14976@parisc-linux.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080430090502.GH14976@parisc-linux.org> User-Agent: Mutt/1.5.13 (2006-08-11) X-Barracuda-Connect: palinux.external.hp.com[192.25.206.14] X-Barracuda-Start-Time: 1209551059 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.1, rules version 3.1.49253 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15701 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: matthew@wil.cx Precedence: bulk X-list: xfs On Wed, Apr 30, 2008 at 03:05:03AM -0600, Matthew Wilcox wrote: > @@ -2385,12 +2379,13 @@ restart: > > iclog = log->l_iclog; > if (! (iclog->ic_state == XLOG_STATE_ACTIVE)) { > - log->l_flushcnt++; > + DEFINE_WAIT(wait); > + prepare_to_wait(&log->l_flush_wq, &wait, TASK_UNINTERRUPTIBLE); > spin_unlock(&log->l_icloglock); > xlog_trace_iclog(iclog, XLOG_TRACE_SLEEP_FLUSH); > XFS_STATS_INC(xs_log_noiclogs); > - /* Ensure that log writes happen */ > - psema(&log->l_flushsema, PINOD); > + /* Wait for log writes to have flushed */ > + schedule(); > goto restart; > } > ASSERT(iclog->ic_state == XLOG_STATE_ACTIVE); Christoph points out that this is missing a call to finish_wait() after schedule() and he's absolutely right. It only matters if the task was woken up by something other than being on this wait queue, so my testing didn't notice it missing. -- Intel are signing my paycheques ... these opinions are still mine "Bill, look, we understand that you're interested in selling us this operating system, but compare it to ours. We can't possibly take such a retrograde step." From owner-xfs@oss.sgi.com Wed Apr 30 03:41:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 03:41:25 -0700 (PDT) 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 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 m3UAeuCq030647 for ; Wed, 30 Apr 2008 03:41:01 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id UAA15643; Wed, 30 Apr 2008 20:41:32 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3UAfUsT151140099; Wed, 30 Apr 2008 20:41:31 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3UAfPON150979903; Wed, 30 Apr 2008 20:41:25 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 30 Apr 2008 20:41:25 +1000 From: David Chinner To: Matthew Wilcox Cc: David Chinner , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH] Remove l_flushsema Message-ID: <20080430104125.GM108924158@sgi.com> References: <20080430090502.GH14976@parisc-linux.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080430090502.GH14976@parisc-linux.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15702 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 30, 2008 at 03:05:03AM -0600, Matthew Wilcox wrote: > > The l_flushsema doesn't exactly have completion semantics, nor mutex > semantics. It's used as a list of tasks which are waiting to be notified > that a flush has completed. It was also being used in a way that was > potentially racy, depending on the semaphore implementation. > > By using a waitqueue instead of a semaphore we avoid the need for a > separate counter, since we know we just need to wake everything on the > queue. Looks good at first glance. thanks for doing this, Matthew. I've been swamped the last couple of days so I haven't had a chance to do this myself.... > Signed-off-by: Matthew Wilcox > > -- > > I've only given this light testing, it could use some more. Yeah, I've pulled it into my qa tree so it'll get some shaking down. If it survives for a while, I'll push it into the xfs tree. One comment, though: > @@ -2278,14 +2277,9 @@ xlog_state_do_callback( > } > #endif > > - flushcnt = 0; > - if (log->l_iclog->ic_state & (XLOG_STATE_ACTIVE|XLOG_STATE_IOERROR)) { > - flushcnt = log->l_flushcnt; > - log->l_flushcnt = 0; > - } > + if (log->l_iclog->ic_state & (XLOG_STATE_ACTIVE|XLOG_STATE_IOERROR)) > + wake_up_all(&log->l_flush_wq); > spin_unlock(&log->l_icloglock); > - while (flushcnt--) > - vsema(&log->l_flushsema); The only thing that I'm concerned about here is that this will substantially increase the time the l_icloglock is held. This is a severely contended lock on large cpu count machines and putting the wakeup inside this lock will increase the hold time. I guess I can address this by adding a new lock for the waitqueue in a separate patch set. Hmmm - CONFIG_XFS_DEBUG builds break in the xfs-dev tree with this patch (in the xfs kdb module). I'll fix this up as well. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 30 03:57:53 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 03:58:12 -0700 (PDT) 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 m3UAvnt3032142 for ; Wed, 30 Apr 2008 03:57:52 -0700 X-ASG-Debug-ID: 1209553112-656c03a50000-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 44B0710E7A5D; Wed, 30 Apr 2008 03:58:32 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id SAzGxjxKK0vD1tAz; Wed, 30 Apr 2008 03:58:32 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JrA1A-0008Bz-7F; Wed, 30 Apr 2008 10:58:32 +0000 Date: Wed, 30 Apr 2008 06:58:32 -0400 From: Christoph Hellwig To: David Chinner Cc: Matthew Wilcox , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH] Remove l_flushsema Subject: Re: [PATCH] Remove l_flushsema Message-ID: <20080430105832.GA20442@infradead.org> References: <20080430090502.GH14976@parisc-linux.org> <20080430104125.GM108924158@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080430104125.GM108924158@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209553113 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.1, rules version 3.1.49255 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15703 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Wed, Apr 30, 2008 at 08:41:25PM +1000, David Chinner wrote: > The only thing that I'm concerned about here is that this will > substantially increase the time the l_icloglock is held. This is > a severely contended lock on large cpu count machines and putting > the wakeup inside this lock will increase the hold time. > > I guess I can address this by adding a new lock for the waitqueue > in a separate patch set. waitqueues are loked internally and don't need synchronization. With a little bit of re-arranging the code the wake_up could probably be moved out of the critical section. From owner-xfs@oss.sgi.com Wed Apr 30 04:11:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 04:12:02 -0700 (PDT) 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 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 m3UBBZtE000687 for ; Wed, 30 Apr 2008 04:11:38 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id VAA16271; Wed, 30 Apr 2008 21:12:03 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3UBBxsT147784656; Wed, 30 Apr 2008 21:11:59 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3UBBsmC151107218; Wed, 30 Apr 2008 21:11:54 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 30 Apr 2008 21:11:54 +1000 From: David Chinner To: Christoph Hellwig Cc: David Chinner , Matthew Wilcox , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH] Remove l_flushsema Message-ID: <20080430111154.GO108924158@sgi.com> References: <20080430090502.GH14976@parisc-linux.org> <20080430104125.GM108924158@sgi.com> <20080430105832.GA20442@infradead.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080430105832.GA20442@infradead.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15704 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 30, 2008 at 06:58:32AM -0400, Christoph Hellwig wrote: > On Wed, Apr 30, 2008 at 08:41:25PM +1000, David Chinner wrote: > > The only thing that I'm concerned about here is that this will > > substantially increase the time the l_icloglock is held. This is > > a severely contended lock on large cpu count machines and putting > > the wakeup inside this lock will increase the hold time. > > > > I guess I can address this by adding a new lock for the waitqueue > > in a separate patch set. > > waitqueues are loked internally and don't need synchronization. With > a little bit of re-arranging the code the wake_up could probably be > moved out of the critical section. Yeah, I just realised that myself and was about to reply as such.... I'll move the wakeup outside the lock. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 30 04:14:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 04:15:01 -0700 (PDT) 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 m3UBEcTR001047 for ; Wed, 30 Apr 2008 04:14:43 -0700 X-ASG-Debug-ID: 1209554121-699003b50000-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 3739610E69A2; Wed, 30 Apr 2008 04:15:21 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 4w362XFq2uxck7ho; Wed, 30 Apr 2008 04:15:21 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JrAHR-0001v8-53; Wed, 30 Apr 2008 11:15:21 +0000 Date: Wed, 30 Apr 2008 07:15:21 -0400 From: Christoph Hellwig To: David Chinner Cc: Christoph Hellwig , Matthew Wilcox , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] Remove l_flushsema Subject: Re: [PATCH] Remove l_flushsema Message-ID: <20080430111521.GA16571@infradead.org> References: <20080430090502.GH14976@parisc-linux.org> <20080430104125.GM108924158@sgi.com> <20080430105832.GA20442@infradead.org> <20080430111154.GO108924158@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080430111154.GO108924158@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209554122 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.1, rules version 3.1.49257 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15705 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Wed, Apr 30, 2008 at 09:11:54PM +1000, David Chinner wrote: > > waitqueues are loked internally and don't need synchronization. With > > a little bit of re-arranging the code the wake_up could probably be > > moved out of the critical section. > > Yeah, I just realised that myself and was about to reply as such.... > > I'll move the wakeup outside the lock. Below is the version I have now. One of the rare cases where using sv_t actually cleans up the code (althoug the whole sv_ family should probably loose some arguments). Index: linux-2.6-xfs/fs/xfs/xfs_log.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_log.c 2008-04-25 20:11:58.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_log.c 2008-04-30 13:13:48.000000000 +0200 @@ -1228,7 +1228,7 @@ xlog_alloc_log(xfs_mount_t *mp, spin_lock_init(&log->l_icloglock); spin_lock_init(&log->l_grant_lock); - initnsema(&log->l_flushsema, 0, "ic-flush"); + sv_init(&log->l_flush_wait, 0, "flush_wait"); /* log record size must be multiple of BBSIZE; see xlog_rec_header_t */ ASSERT((XFS_BUF_SIZE(bp) & BBMASK) == 0); @@ -1573,7 +1573,6 @@ xlog_dealloc_log(xlog_t *log) kmem_free(iclog, sizeof(xlog_in_core_t)); iclog = next_iclog; } - freesema(&log->l_flushsema); spinlock_destroy(&log->l_icloglock); spinlock_destroy(&log->l_grant_lock); @@ -2097,6 +2096,7 @@ xlog_state_do_callback( int funcdidcallbacks; /* flag: function did callbacks */ int repeats; /* for issuing console warnings if * looping too many times */ + int wake = 0; spin_lock(&log->l_icloglock); first_iclog = iclog = log->l_iclog; @@ -2278,15 +2278,13 @@ xlog_state_do_callback( } #endif - flushcnt = 0; - if (log->l_iclog->ic_state & (XLOG_STATE_ACTIVE|XLOG_STATE_IOERROR)) { - flushcnt = log->l_flushcnt; - log->l_flushcnt = 0; - } + if (log->l_iclog->ic_state & (XLOG_STATE_ACTIVE|XLOG_STATE_IOERROR)) + wake = 1; spin_unlock(&log->l_icloglock); - while (flushcnt--) - vsema(&log->l_flushsema); -} /* xlog_state_do_callback */ + + if (wake) + sv_broadcast(&log->l_flush_wait); +} /* @@ -2384,16 +2382,15 @@ restart: } iclog = log->l_iclog; - if (! (iclog->ic_state == XLOG_STATE_ACTIVE)) { - log->l_flushcnt++; - spin_unlock(&log->l_icloglock); + if (iclog->ic_state != XLOG_STATE_ACTIVE) { xlog_trace_iclog(iclog, XLOG_TRACE_SLEEP_FLUSH); XFS_STATS_INC(xs_log_noiclogs); - /* Ensure that log writes happen */ - psema(&log->l_flushsema, PINOD); + + /* Wait for log writes to have flushed */ + sv_wait(&log->l_flush_wait, 0, &log->l_icloglock, 0); goto restart; } - ASSERT(iclog->ic_state == XLOG_STATE_ACTIVE); + head = &iclog->ic_header; atomic_inc(&iclog->ic_refcnt); /* prevents sync */ Index: linux-2.6-xfs/fs/xfs/xfs_log_priv.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_log_priv.h 2008-04-25 20:11:58.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_log_priv.h 2008-04-30 13:09:33.000000000 +0200 @@ -423,10 +423,8 @@ typedef struct log { int l_logBBsize; /* size of log in BB chunks */ /* The following block of fields are changed while holding icloglock */ - sema_t l_flushsema ____cacheline_aligned_in_smp; - /* iclog flushing semaphore */ - int l_flushcnt; /* # of procs waiting on this - * sema */ + sv_t l_flush_wait ____cacheline_aligned_in_smp; + /* waiting for iclog flush */ int l_covered_state;/* state of "covering disk * log entries" */ xlog_in_core_t *l_iclog; /* head log queue */ Index: linux-2.6-xfs/fs/xfs/xfsidbg.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfsidbg.c 2008-04-30 13:09:58.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfsidbg.c 2008-04-30 13:10:26.000000000 +0200 @@ -5829,8 +5829,8 @@ xfsidbg_xlog(xlog_t *log) }; kdb_printf("xlog at 0x%p\n", log); - kdb_printf("&flushsm: 0x%p flushcnt: %d ICLOG: 0x%p \n", - &log->l_flushsema, log->l_flushcnt, log->l_iclog); + kdb_printf("&flush_wait: 0x%p ICLOG: 0x%p \n", + &log->l_flush_wait, log->l_iclog); kdb_printf("&icloglock: 0x%p tail_lsn: %s last_sync_lsn: %s \n", &log->l_icloglock, xfs_fmtlsn(&log->l_tail_lsn), xfs_fmtlsn(&log->l_last_sync_lsn)); From owner-xfs@oss.sgi.com Wed Apr 30 04:21:51 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 04:22:10 -0700 (PDT) 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 (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 m3UBLc8M006759 for ; Wed, 30 Apr 2008 04:21:50 -0700 X-ASG-Debug-ID: 1209554540-758b02380000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5787C10E3F0 for ; Wed, 30 Apr 2008 04:22:20 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id QcVwFbGlGjGrSzOl for ; Wed, 30 Apr 2008 04:22:20 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3UBMDF3017469 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Wed, 30 Apr 2008 13:22:13 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3UBMDmi017467 for xfs@oss.sgi.com; Wed, 30 Apr 2008 13:22:13 +0200 Date: Wed, 30 Apr 2008 13:22:13 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 1/2] kill attr_capable callbacks Subject: [PATCH 1/2] kill attr_capable callbacks Message-ID: <20080430112213.GA16966@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209554542 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.1, rules version 3.1.49257 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15706 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs No need for addition permission checks in the xattr handler, fs/xattr.c:xattr_permission() already does them, and in fact slightly more strict then what was in the attr_capable handlers. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-04-29 21:32:56.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c 2008-04-29 21:33:30.000000000 +0200 @@ -747,15 +747,11 @@ xfs_vn_setxattr( char *attr = (char *)name; attrnames_t *namesp; int xflags = 0; - int error; namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); if (!namesp) return -EOPNOTSUPP; attr += namesp->attr_namelen; - error = namesp->attr_capable(vp, NULL); - if (error) - return error; /* Convert Linux syscall to XFS internal ATTR flags */ if (flags & XATTR_CREATE) @@ -777,15 +773,11 @@ xfs_vn_getxattr( char *attr = (char *)name; attrnames_t *namesp; int xflags = 0; - ssize_t error; namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); if (!namesp) return -EOPNOTSUPP; attr += namesp->attr_namelen; - error = namesp->attr_capable(vp, NULL); - if (error) - return error; /* Convert Linux syscall to XFS internal ATTR flags */ if (!size) { @@ -825,15 +817,12 @@ xfs_vn_removexattr( char *attr = (char *)name; attrnames_t *namesp; int xflags = 0; - int error; namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); if (!namesp) return -EOPNOTSUPP; attr += namesp->attr_namelen; - error = namesp->attr_capable(vp, NULL); - if (error) - return error; + xflags |= namesp->attr_flag; return namesp->attr_remove(vp, attr, xflags); } Index: linux-2.6-xfs/fs/xfs/xfs_attr.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.c 2008-04-29 21:32:25.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_attr.c 2008-04-29 21:32:51.000000000 +0200 @@ -2622,43 +2622,6 @@ attr_lookup_namespace( return NULL; } -/* - * Some checks to prevent people abusing EAs to get over quota: - * - Don't allow modifying user EAs on devices/symlinks; - * - Don't allow modifying user EAs if sticky bit set; - */ -STATIC int -attr_user_capable( - bhv_vnode_t *vp, - cred_t *cred) -{ - struct inode *inode = vn_to_inode(vp); - - if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) - return -EPERM; - if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode) && - !capable(CAP_SYS_ADMIN)) - return -EPERM; - if (S_ISDIR(inode->i_mode) && (inode->i_mode & S_ISVTX) && - (current_fsuid(cred) != inode->i_uid) && !capable(CAP_FOWNER)) - return -EPERM; - return 0; -} - -STATIC int -attr_trusted_capable( - bhv_vnode_t *vp, - cred_t *cred) -{ - struct inode *inode = vn_to_inode(vp); - - if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) - return -EPERM; - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - return 0; -} - STATIC int attr_system_set( bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) @@ -2709,7 +2672,6 @@ struct attrnames attr_system = { .attr_get = attr_system_get, .attr_set = attr_system_set, .attr_remove = attr_system_remove, - .attr_capable = (attrcapable_t)fs_noerr, }; struct attrnames attr_trusted = { @@ -2719,7 +2681,6 @@ struct attrnames attr_trusted = { .attr_get = attr_generic_get, .attr_set = attr_generic_set, .attr_remove = attr_generic_remove, - .attr_capable = attr_trusted_capable, }; struct attrnames attr_secure = { @@ -2729,7 +2690,6 @@ struct attrnames attr_secure = { .attr_get = attr_generic_get, .attr_set = attr_generic_set, .attr_remove = attr_generic_remove, - .attr_capable = (attrcapable_t)fs_noerr, }; struct attrnames attr_user = { @@ -2738,7 +2698,6 @@ struct attrnames attr_user = { .attr_get = attr_generic_get, .attr_set = attr_generic_set, .attr_remove = attr_generic_remove, - .attr_capable = attr_user_capable, }; struct attrnames *attr_namespaces[] = Index: linux-2.6-xfs/fs/xfs/xfs_attr.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.h 2008-04-29 21:33:38.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_attr.h 2008-04-29 21:33:52.000000000 +0200 @@ -42,7 +42,6 @@ typedef int (*attrset_t)(bhv_vnode_t *, typedef int (*attrget_t)(bhv_vnode_t *, char *, void *, size_t, int); typedef int (*attrremove_t)(bhv_vnode_t *, char *, int); typedef int (*attrexists_t)(bhv_vnode_t *); -typedef int (*attrcapable_t)(bhv_vnode_t *, struct cred *); typedef struct attrnames { char * attr_name; @@ -52,7 +51,6 @@ typedef struct attrnames { attrset_t attr_set; attrremove_t attr_remove; attrexists_t attr_exists; - attrcapable_t attr_capable; } attrnames_t; #define ATTR_NAMECOUNT 4 From owner-xfs@oss.sgi.com Wed Apr 30 04:21:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 04:22:19 -0700 (PDT) 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_61 autolearn=no 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 m3UBLmen006780 for ; Wed, 30 Apr 2008 04:21:56 -0700 X-ASG-Debug-ID: 1209554544-0ed701fb0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8918416064D3 for ; Wed, 30 Apr 2008 04:22:24 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id OVoRXhVDynEDZtvl for ; Wed, 30 Apr 2008 04:22:24 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3UBMHF3017487 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Wed, 30 Apr 2008 13:22:17 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3UBMHpE017485 for xfs@oss.sgi.com; Wed, 30 Apr 2008 13:22:17 +0200 Date: Wed, 30 Apr 2008 13:22:17 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] use generic_*xattr routines Subject: [PATCH] use generic_*xattr routines Message-ID: <20080430112217.GB16966@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209554551 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.82 X-Barracuda-Spam-Status: No, SCORE=-1.82 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_MJ615 X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.49258 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 BSF_SC0_MJ615 Custom Rule MJ615 X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15707 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Use the generic set, get and removexattr methods and supply the s_xattr array with fine-grained handlers. All XFS/Linux highlevel attr handling is rewritten from scratch and placed into fs/xfs/linux-2.6/xfs_xattr.c so that it's separated from the generic low-level code. The code size reduction is not as big as I had hoped, but it's still a worthwile cleanup. I didn't managed to get rid of struct attrnames yet, as it's still used to hack the Linux string prefixes into the output inside the lowest level xattr code. I have some plans to clean that bit up aswell, but that will have to wait for a while. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/Makefile =================================================================== --- linux-2.6-xfs.orig/fs/xfs/Makefile 2008-04-30 08:24:31.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/Makefile 2008-04-30 08:43:49.000000000 +0200 @@ -97,6 +97,7 @@ xfs-y += $(addprefix $(XFS_LINUX)/, \ xfs_lrw.o \ xfs_super.o \ xfs_vnode.o \ + xfs_xattr.o \ xfs_ksyms.o) # Objects in support/ Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-04-30 08:35:43.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c 2008-04-30 08:43:49.000000000 +0200 @@ -282,7 +282,7 @@ xfs_vn_mknod( struct xfs_inode *ip = NULL; xfs_acl_t *default_acl = NULL; struct xfs_name name; - attrexists_t test_default_acl = _ACL_DEFAULT_EXISTS; + int (*test_default_acl)(struct inode *) = _ACL_DEFAULT_EXISTS; int error; /* @@ -735,98 +735,6 @@ xfs_vn_truncate( WARN_ON(error); } -STATIC int -xfs_vn_setxattr( - struct dentry *dentry, - const char *name, - const void *data, - size_t size, - int flags) -{ - bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); - char *attr = (char *)name; - attrnames_t *namesp; - int xflags = 0; - - namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); - if (!namesp) - return -EOPNOTSUPP; - attr += namesp->attr_namelen; - - /* Convert Linux syscall to XFS internal ATTR flags */ - if (flags & XATTR_CREATE) - xflags |= ATTR_CREATE; - if (flags & XATTR_REPLACE) - xflags |= ATTR_REPLACE; - xflags |= namesp->attr_flag; - return namesp->attr_set(vp, attr, (void *)data, size, xflags); -} - -STATIC ssize_t -xfs_vn_getxattr( - struct dentry *dentry, - const char *name, - void *data, - size_t size) -{ - bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); - char *attr = (char *)name; - attrnames_t *namesp; - int xflags = 0; - - namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); - if (!namesp) - return -EOPNOTSUPP; - attr += namesp->attr_namelen; - - /* Convert Linux syscall to XFS internal ATTR flags */ - if (!size) { - xflags |= ATTR_KERNOVAL; - data = NULL; - } - xflags |= namesp->attr_flag; - return namesp->attr_get(vp, attr, (void *)data, size, xflags); -} - -STATIC ssize_t -xfs_vn_listxattr( - struct dentry *dentry, - char *data, - size_t size) -{ - bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); - int error, xflags = ATTR_KERNAMELS; - ssize_t result; - - if (!size) - xflags |= ATTR_KERNOVAL; - xflags |= capable(CAP_SYS_ADMIN) ? ATTR_KERNFULLS : ATTR_KERNORMALS; - - error = attr_generic_list(vp, data, size, xflags, &result); - if (error < 0) - return error; - return result; -} - -STATIC int -xfs_vn_removexattr( - struct dentry *dentry, - const char *name) -{ - bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); - char *attr = (char *)name; - attrnames_t *namesp; - int xflags = 0; - - namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); - if (!namesp) - return -EOPNOTSUPP; - attr += namesp->attr_namelen; - - xflags |= namesp->attr_flag; - return namesp->attr_remove(vp, attr, xflags); -} - STATIC long xfs_vn_fallocate( struct inode *inode, @@ -874,10 +782,10 @@ const struct inode_operations xfs_inode_ .truncate = xfs_vn_truncate, .getattr = xfs_vn_getattr, .setattr = xfs_vn_setattr, - .setxattr = xfs_vn_setxattr, - .getxattr = xfs_vn_getxattr, + .setxattr = generic_setxattr, + .getxattr = generic_getxattr, + .removexattr = generic_removexattr, .listxattr = xfs_vn_listxattr, - .removexattr = xfs_vn_removexattr, .fallocate = xfs_vn_fallocate, }; @@ -894,10 +802,10 @@ const struct inode_operations xfs_dir_in .permission = xfs_vn_permission, .getattr = xfs_vn_getattr, .setattr = xfs_vn_setattr, - .setxattr = xfs_vn_setxattr, - .getxattr = xfs_vn_getxattr, + .setxattr = generic_setxattr, + .getxattr = generic_getxattr, + .removexattr = generic_removexattr, .listxattr = xfs_vn_listxattr, - .removexattr = xfs_vn_removexattr, }; const struct inode_operations xfs_symlink_inode_operations = { @@ -907,8 +815,8 @@ const struct inode_operations xfs_symlin .permission = xfs_vn_permission, .getattr = xfs_vn_getattr, .setattr = xfs_vn_setattr, - .setxattr = xfs_vn_setxattr, - .getxattr = xfs_vn_getxattr, + .setxattr = generic_setxattr, + .getxattr = generic_getxattr, + .removexattr = generic_removexattr, .listxattr = xfs_vn_listxattr, - .removexattr = xfs_vn_removexattr, }; Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_xattr.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_xattr.c 2008-04-30 12:55:33.000000000 +0200 @@ -0,0 +1,266 @@ +/* + * Copyright (C) 2008 Christoph Hellwig. + * Released under GPL v2. + */ + +#include "xfs.h" +#include "xfs_attr.h" +#include "xfs_acl.h" +#include "xfs_vnodeops.h" + +#include +#include + + +/* + * ACL handling. Should eventually be moved into xfs_acl.c + */ + +static int +xfs_decode_acl(const char *name) +{ + if (strcmp(name, "posix_acl_access") == 0) + return _ACL_TYPE_ACCESS; + else if (strcmp(name, "posix_acl_default") == 0) + return _ACL_TYPE_DEFAULT; + return -EINVAL; +} + +static int +xfs_xattr_system_get(struct inode *inode, const char *name, + void *buffer, size_t size) +{ + int acl; + + acl = xfs_decode_acl(name); + if (acl < 0) + return acl; + + return xfs_acl_vget(inode, buffer, size, acl); +} + +static int +xfs_xattr_system_set(struct inode *inode, const char *name, + const void *value, size_t size, int flags) +{ + int error, acl; + + acl = xfs_decode_acl(name); + if (acl < 0) + return acl; + if (flags & XATTR_CREATE) + return -EINVAL; + + if (!value) + return xfs_acl_vremove(inode, acl); + + error = xfs_acl_vset(inode, (void *)value, size, acl); + if (!error) + vn_revalidate(inode); + return error; +} + +static struct xattr_handler xfs_xattr_system_handler = { + .prefix = XATTR_SYSTEM_PREFIX, + .get = xfs_xattr_system_get, + .set = xfs_xattr_system_set, +}; + + +/* + * Real xattr handling. The only difference between the namespaces is + * a flag passed to the low-level attr code. + */ + +static int +__xfs_xattr_get(struct inode *inode, const char *name, + void *value, size_t size, int xflags) +{ + struct xfs_inode *ip = XFS_I(inode); + int error, asize = size; + + if (strcmp(name, "") == 0) + return -EINVAL; + + /* Convert Linux syscall to XFS internal ATTR flags */ + if (!size) { + xflags |= ATTR_KERNOVAL; + value = NULL; + } + + error = -xfs_attr_get(ip, name, value, &asize, xflags); + if (error) + return error; + return asize; +} + +static int +__xfs_xattr_set(struct inode *inode, const char *name, const void *value, + size_t size, int flags, int xflags) +{ + struct xfs_inode *ip = XFS_I(inode); + + if (strcmp(name, "") == 0) + return -EINVAL; + + /* Convert Linux syscall to XFS internal ATTR flags */ + if (flags & XATTR_CREATE) + xflags |= ATTR_CREATE; + if (flags & XATTR_REPLACE) + xflags |= ATTR_REPLACE; + + if (!value) + return -xfs_attr_remove(ip, name, xflags); + return -xfs_attr_set(ip, name, (void *)value, size, xflags); +} + +static int +xfs_xattr_user_get(struct inode *inode, const char *name, + void *value, size_t size) +{ + return __xfs_xattr_get(inode, name, value, size, 0); +} + +static int +xfs_xattr_user_set(struct inode *inode, const char *name, + const void *value, size_t size, int flags) +{ + return __xfs_xattr_set(inode, name, value, size, flags, 0); +} + +struct attrnames attr_user = { + .attr_name = "user.", + .attr_namelen = sizeof("user.") - 1, +}; + +static struct xattr_handler xfs_xattr_user_handler = { + .prefix = XATTR_USER_PREFIX, + .get = xfs_xattr_user_get, + .set = xfs_xattr_user_set, +}; + + +static int +xfs_xattr_trusted_get(struct inode *inode, const char *name, + void *value, size_t size) +{ + return __xfs_xattr_get(inode, name, value, size, ATTR_ROOT); +} + +static int +xfs_xattr_trusted_set(struct inode *inode, const char *name, + const void *value, size_t size, int flags) +{ + return __xfs_xattr_set(inode, name, value, size, flags, ATTR_ROOT); +} + +struct attrnames attr_trusted = { + .attr_name = "trusted.", + .attr_namelen = sizeof("trusted.") - 1, +}; + +static struct xattr_handler xfs_xattr_trusted_handler = { + .prefix = XATTR_TRUSTED_PREFIX, + .get = xfs_xattr_trusted_get, + .set = xfs_xattr_trusted_set, +}; + + +static int +xfs_xattr_secure_get(struct inode *inode, const char *name, + void *value, size_t size) +{ + return __xfs_xattr_get(inode, name, value, size, ATTR_SECURE); +} + +static int +xfs_xattr_secure_set(struct inode *inode, const char *name, + const void *value, size_t size, int flags) +{ + return __xfs_xattr_set(inode, name, value, size, flags, ATTR_SECURE); +} + +struct attrnames attr_secure = { + .attr_name = "security.", + .attr_namelen = sizeof("security.") - 1, +}; + +static struct xattr_handler xfs_xattr_security_handler = { + .prefix = XATTR_SECURITY_PREFIX, + .get = xfs_xattr_secure_get, + .set = xfs_xattr_secure_set, +}; + + +struct xattr_handler *xfs_xattr_handlers[] = { + &xfs_xattr_user_handler, + &xfs_xattr_trusted_handler, + &xfs_xattr_security_handler, + &xfs_xattr_system_handler, + NULL +}; + +static int +list_one_attr(const char *name, const size_t len, void *data, + size_t size, ssize_t *result) +{ + char *p = data + *result; + + *result += len; + if (!size) + return 0; + if (*result > size) + return -ERANGE; + + strcpy(p, name); + p += len; + return 0; +} + +ssize_t +xfs_vn_listxattr(struct dentry *dentry, char *data, size_t size) +{ + struct inode *inode = dentry->d_inode; + struct xfs_inode *ip = XFS_I(inode); + attrlist_cursor_kern_t cursor = { 0 }; + int error, xflags; + ssize_t result; + + xflags = ATTR_KERNAMELS; + if (!size) + xflags |= ATTR_KERNOVAL; + + if (capable(CAP_SYS_ADMIN)) + xflags |= ATTR_KERNFULLS; + else + xflags |= ATTR_KERNORMALS; + + + /* + * First read the regular on-disk attributes. + */ + result = -xfs_attr_list(ip, data, size, xflags, &cursor); + if (result < 0) + return result; + + /* + * Then add the two synthetic ACL attributes. + */ + if (xfs_acl_vhasacl_access(inode)) { + error = list_one_attr(POSIX_ACL_XATTR_ACCESS, + strlen(POSIX_ACL_XATTR_ACCESS) + 1, + data, size, &result); + if (error) + return error; + } + + if (xfs_acl_vhasacl_default(inode)) { + error = list_one_attr(POSIX_ACL_XATTR_DEFAULT, + strlen(POSIX_ACL_XATTR_DEFAULT) + 1, + data, size, &result); + if (error) + return error; + } + + return result; +} Index: linux-2.6-xfs/fs/xfs/xfs_attr.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.c 2008-04-30 08:35:43.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_attr.c 2008-04-30 08:43:49.000000000 +0200 @@ -57,11 +57,6 @@ * Provide the external interfaces to manage attribute lists. */ -#define ATTR_SYSCOUNT 2 -static struct attrnames posix_acl_access; -static struct attrnames posix_acl_default; -static struct attrnames *attr_system_names[ATTR_SYSCOUNT]; - /*======================================================================== * Function prototypes for the kernel. *========================================================================*/ @@ -2435,270 +2430,3 @@ xfs_attr_trace_enter(int type, char *whe (void *)a14, (void *)a15); } #endif /* XFS_ATTR_TRACE */ - - -/*======================================================================== - * System (pseudo) namespace attribute interface routines. - *========================================================================*/ - -STATIC int -posix_acl_access_set( - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) -{ - return xfs_acl_vset(vp, data, size, _ACL_TYPE_ACCESS); -} - -STATIC int -posix_acl_access_remove( - bhv_vnode_t *vp, char *name, int xflags) -{ - return xfs_acl_vremove(vp, _ACL_TYPE_ACCESS); -} - -STATIC int -posix_acl_access_get( - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) -{ - return xfs_acl_vget(vp, data, size, _ACL_TYPE_ACCESS); -} - -STATIC int -posix_acl_access_exists( - bhv_vnode_t *vp) -{ - return xfs_acl_vhasacl_access(vp); -} - -STATIC int -posix_acl_default_set( - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) -{ - return xfs_acl_vset(vp, data, size, _ACL_TYPE_DEFAULT); -} - -STATIC int -posix_acl_default_get( - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) -{ - return xfs_acl_vget(vp, data, size, _ACL_TYPE_DEFAULT); -} - -STATIC int -posix_acl_default_remove( - bhv_vnode_t *vp, char *name, int xflags) -{ - return xfs_acl_vremove(vp, _ACL_TYPE_DEFAULT); -} - -STATIC int -posix_acl_default_exists( - bhv_vnode_t *vp) -{ - return xfs_acl_vhasacl_default(vp); -} - -static struct attrnames posix_acl_access = { - .attr_name = "posix_acl_access", - .attr_namelen = sizeof("posix_acl_access") - 1, - .attr_get = posix_acl_access_get, - .attr_set = posix_acl_access_set, - .attr_remove = posix_acl_access_remove, - .attr_exists = posix_acl_access_exists, -}; - -static struct attrnames posix_acl_default = { - .attr_name = "posix_acl_default", - .attr_namelen = sizeof("posix_acl_default") - 1, - .attr_get = posix_acl_default_get, - .attr_set = posix_acl_default_set, - .attr_remove = posix_acl_default_remove, - .attr_exists = posix_acl_default_exists, -}; - -static struct attrnames *attr_system_names[] = - { &posix_acl_access, &posix_acl_default }; - - -/*======================================================================== - * Namespace-prefix-style attribute name interface routines. - *========================================================================*/ - -STATIC int -attr_generic_set( - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) -{ - return -xfs_attr_set(xfs_vtoi(vp), name, data, size, xflags); -} - -STATIC int -attr_generic_get( - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) -{ - int error, asize = size; - - error = xfs_attr_get(xfs_vtoi(vp), name, data, &asize, xflags); - if (!error) - return asize; - return -error; -} - -STATIC int -attr_generic_remove( - bhv_vnode_t *vp, char *name, int xflags) -{ - return -xfs_attr_remove(xfs_vtoi(vp), name, xflags); -} - -STATIC int -attr_generic_listadd( - attrnames_t *prefix, - attrnames_t *namesp, - void *data, - size_t size, - ssize_t *result) -{ - char *p = data + *result; - - *result += prefix->attr_namelen; - *result += namesp->attr_namelen + 1; - if (!size) - return 0; - if (*result > size) - return -ERANGE; - strcpy(p, prefix->attr_name); - p += prefix->attr_namelen; - strcpy(p, namesp->attr_name); - p += namesp->attr_namelen + 1; - return 0; -} - -STATIC int -attr_system_list( - bhv_vnode_t *vp, - void *data, - size_t size, - ssize_t *result) -{ - attrnames_t *namesp; - int i, error = 0; - - for (i = 0; i < ATTR_SYSCOUNT; i++) { - namesp = attr_system_names[i]; - if (!namesp->attr_exists || !namesp->attr_exists(vp)) - continue; - error = attr_generic_listadd(&attr_system, namesp, - data, size, result); - if (error) - break; - } - return error; -} - -int -attr_generic_list( - bhv_vnode_t *vp, void *data, size_t size, int xflags, ssize_t *result) -{ - attrlist_cursor_kern_t cursor = { 0 }; - int error; - - error = xfs_attr_list(xfs_vtoi(vp), data, size, xflags, &cursor); - if (error > 0) - return -error; - *result = -error; - return attr_system_list(vp, data, size, result); -} - -attrnames_t * -attr_lookup_namespace( - char *name, - struct attrnames **names, - int nnames) -{ - int i; - - for (i = 0; i < nnames; i++) - if (!strncmp(name, names[i]->attr_name, names[i]->attr_namelen)) - return names[i]; - return NULL; -} - -STATIC int -attr_system_set( - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) -{ - attrnames_t *namesp; - int error; - - if (xflags & ATTR_CREATE) - return -EINVAL; - - namesp = attr_lookup_namespace(name, attr_system_names, ATTR_SYSCOUNT); - if (!namesp) - return -EOPNOTSUPP; - error = namesp->attr_set(vp, name, data, size, xflags); - if (!error) - error = vn_revalidate(vp); - return error; -} - -STATIC int -attr_system_get( - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) -{ - attrnames_t *namesp; - - namesp = attr_lookup_namespace(name, attr_system_names, ATTR_SYSCOUNT); - if (!namesp) - return -EOPNOTSUPP; - return namesp->attr_get(vp, name, data, size, xflags); -} - -STATIC int -attr_system_remove( - bhv_vnode_t *vp, char *name, int xflags) -{ - attrnames_t *namesp; - - namesp = attr_lookup_namespace(name, attr_system_names, ATTR_SYSCOUNT); - if (!namesp) - return -EOPNOTSUPP; - return namesp->attr_remove(vp, name, xflags); -} - -struct attrnames attr_system = { - .attr_name = "system.", - .attr_namelen = sizeof("system.") - 1, - .attr_flag = ATTR_SYSTEM, - .attr_get = attr_system_get, - .attr_set = attr_system_set, - .attr_remove = attr_system_remove, -}; - -struct attrnames attr_trusted = { - .attr_name = "trusted.", - .attr_namelen = sizeof("trusted.") - 1, - .attr_flag = ATTR_ROOT, - .attr_get = attr_generic_get, - .attr_set = attr_generic_set, - .attr_remove = attr_generic_remove, -}; - -struct attrnames attr_secure = { - .attr_name = "security.", - .attr_namelen = sizeof("security.") - 1, - .attr_flag = ATTR_SECURE, - .attr_get = attr_generic_get, - .attr_set = attr_generic_set, - .attr_remove = attr_generic_remove, -}; - -struct attrnames attr_user = { - .attr_name = "user.", - .attr_namelen = sizeof("user.") - 1, - .attr_get = attr_generic_get, - .attr_set = attr_generic_set, - .attr_remove = attr_generic_remove, -}; - -struct attrnames *attr_namespaces[] = - { &attr_system, &attr_trusted, &attr_secure, &attr_user }; Index: linux-2.6-xfs/fs/xfs/xfs_attr.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.h 2008-04-30 08:35:43.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_attr.h 2008-04-30 08:43:49.000000000 +0200 @@ -38,30 +38,14 @@ struct cred; struct xfs_attr_list_context; -typedef int (*attrset_t)(bhv_vnode_t *, char *, void *, size_t, int); -typedef int (*attrget_t)(bhv_vnode_t *, char *, void *, size_t, int); -typedef int (*attrremove_t)(bhv_vnode_t *, char *, int); -typedef int (*attrexists_t)(bhv_vnode_t *); - typedef struct attrnames { char * attr_name; unsigned int attr_namelen; - unsigned int attr_flag; - attrget_t attr_get; - attrset_t attr_set; - attrremove_t attr_remove; - attrexists_t attr_exists; } attrnames_t; -#define ATTR_NAMECOUNT 4 extern struct attrnames attr_user; extern struct attrnames attr_secure; -extern struct attrnames attr_system; extern struct attrnames attr_trusted; -extern struct attrnames *attr_namespaces[ATTR_NAMECOUNT]; - -extern attrnames_t *attr_lookup_namespace(char *, attrnames_t **, int); -extern int attr_generic_list(bhv_vnode_t *, void *, size_t, int, ssize_t *); #define ATTR_DONTFOLLOW 0x0001 /* -- unused, from IRIX -- */ #define ATTR_ROOT 0x0002 /* use attrs in root (trusted) namespace */ @@ -69,7 +53,6 @@ extern int attr_generic_list(bhv_vnode_t #define ATTR_SECURE 0x0008 /* use attrs in security namespace */ #define ATTR_CREATE 0x0010 /* pure create: fail if attr already exists */ #define ATTR_REPLACE 0x0020 /* pure set: fail if attr does not exist */ -#define ATTR_SYSTEM 0x0100 /* use attrs in system (pseudo) namespace */ #define ATTR_KERNACCESS 0x0400 /* [kernel] iaccess, inode held io-locked */ #define ATTR_KERNOTIME 0x1000 /* [kernel] don't update inode timestamps */ Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.h 2008-04-30 08:24:31.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.h 2008-04-30 08:43:49.000000000 +0200 @@ -26,6 +26,7 @@ extern const struct file_operations xfs_ extern const struct file_operations xfs_dir_file_operations; extern const struct file_operations xfs_invis_file_operations; +extern ssize_t xfs_vn_listxattr(struct dentry *, char *data, size_t size); struct xfs_inode; extern void xfs_ichgtime(struct xfs_inode *, int); Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-04-30 08:24:32.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-04-30 08:43:49.000000000 +0200 @@ -1328,6 +1328,7 @@ xfs_fs_fill_super( goto fail_vfsop; sb_min_blocksize(sb, BBSIZE); + sb->s_xattr = xfs_xattr_handlers; sb->s_export_op = &xfs_export_operations; sb->s_qcop = &xfs_quotactl_operations; sb->s_op = &xfs_super_operations; Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.h 2008-04-30 08:24:31.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h 2008-04-30 08:43:49.000000000 +0200 @@ -84,6 +84,7 @@ extern void xfs_blkdev_put(struct block_ extern void xfs_blkdev_issue_flush(struct xfs_buftarg *); extern const struct export_operations xfs_export_operations; +extern struct xattr_handler *xfs_xattr_handlers[]; #define XFS_M(sb) ((struct xfs_mount *)((sb)->s_fs_info)) From owner-xfs@oss.sgi.com Wed Apr 30 04:24:21 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 04:24:35 -0700 (PDT) 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 (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 m3UBOB7U007059 for ; Wed, 30 Apr 2008 04:24:20 -0700 X-ASG-Debug-ID: 1209554694-78a202240000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BC29C10E42D for ; Wed, 30 Apr 2008 04:24:54 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id mUbjMGgqtlV5Bril for ; Wed, 30 Apr 2008 04:24:54 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m3UBOmF3017655 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Wed, 30 Apr 2008 13:24:48 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m3UBOmNq017653 for xfs@oss.sgi.com; Wed, 30 Apr 2008 13:24:48 +0200 Date: Wed, 30 Apr 2008 13:24:48 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] kill xfs_igrow_start and xfs_igrow_finish Subject: [PATCH] kill xfs_igrow_start and xfs_igrow_finish Message-ID: <20080430112448.GA17537@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209554695 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.1, rules version 3.1.49257 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15708 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs xfs_igrow_start just expands to xfs_zero_eof with two assers that are useless in the context of the only caller and some rather confusing comments. xfs_igrow_finish is just a few lines of code decorated again with useless asserts and confusing comments. Just kill those two and merge them into xfs_setattr. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/xfs_inode.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_inode.c 2008-04-24 21:18:18.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_inode.c 2008-04-24 21:23:58.000000000 +0200 @@ -1763,67 +1763,6 @@ xfs_itruncate_finish( return 0; } - -/* - * xfs_igrow_start - * - * Do the first part of growing a file: zero any data in the last - * block that is beyond the old EOF. We need to do this before - * the inode is joined to the transaction to modify the i_size. - * That way we can drop the inode lock and call into the buffer - * cache to get the buffer mapping the EOF. - */ -int -xfs_igrow_start( - xfs_inode_t *ip, - xfs_fsize_t new_size, - cred_t *credp) -{ - ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_IOLOCK_EXCL)); - ASSERT(new_size > ip->i_size); - - /* - * Zero any pages that may have been created by - * xfs_write_file() beyond the end of the file - * and any blocks between the old and new file sizes. - */ - return xfs_zero_eof(ip, new_size, ip->i_size); -} - -/* - * xfs_igrow_finish - * - * This routine is called to extend the size of a file. - * The inode must have both the iolock and the ilock locked - * for update and it must be a part of the current transaction. - * The xfs_igrow_start() function must have been called previously. - * If the change_flag is not zero, the inode change timestamp will - * be updated. - */ -void -xfs_igrow_finish( - xfs_trans_t *tp, - xfs_inode_t *ip, - xfs_fsize_t new_size, - int change_flag) -{ - ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_IOLOCK_EXCL)); - ASSERT(ip->i_transp == tp); - ASSERT(new_size > ip->i_size); - - /* - * Update the file size. Update the inode change timestamp - * if change_flag set. - */ - ip->i_d.di_size = new_size; - ip->i_size = new_size; - if (change_flag) - xfs_ichgtime(ip, XFS_ICHGTIME_CHG); - xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); - -} - - /* * This is called when the inode's link count goes to 0. * We place the on-disk inode on a list in the AGI. It Index: linux-2.6-xfs/fs/xfs/xfs_inode.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_inode.h 2008-04-24 21:18:10.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_inode.h 2008-04-24 21:18:14.000000000 +0200 @@ -507,9 +507,6 @@ int xfs_itruncate_start(xfs_inode_t *, int xfs_itruncate_finish(struct xfs_trans **, xfs_inode_t *, xfs_fsize_t, int, int); int xfs_iunlink(struct xfs_trans *, xfs_inode_t *); -int xfs_igrow_start(xfs_inode_t *, xfs_fsize_t, struct cred *); -void xfs_igrow_finish(struct xfs_trans *, xfs_inode_t *, - xfs_fsize_t, int); void xfs_idestroy_fork(xfs_inode_t *, int); void xfs_idestroy(xfs_inode_t *); Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.c 2008-04-24 21:18:18.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.c 2008-04-24 21:24:07.000000000 +0200 @@ -444,7 +444,13 @@ xfs_setattr( code = 0; if ((vap->va_size > ip->i_size) && (flags & ATTR_NOSIZETOK) == 0) { - code = xfs_igrow_start(ip, vap->va_size, credp); + /* + * Do the first part of growing a file: zero any data + * in the last block that is beyond the old EOF. We + * need to do this before the inode is joined to the + * transaction to modify the i_size. + */ + code = xfs_zero_eof(ip, vap->va_size, ip->i_size); } xfs_iunlock(ip, XFS_ILOCK_EXCL); @@ -512,8 +518,11 @@ xfs_setattr( timeflags |= XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG; if (vap->va_size > ip->i_size) { - xfs_igrow_finish(tp, ip, vap->va_size, - !(flags & ATTR_DMI)); + ip->i_d.di_size = vap->va_size; + ip->i_size = vap->va_size; + if (!(flags & ATTR_DMI)) + xfs_ichgtime(ip, XFS_ICHGTIME_CHG); + xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); } else if ((vap->va_size <= ip->i_size) || ((vap->va_size == 0) && ip->i_d.di_nextents)) { /* Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_ksyms.c 2008-04-24 21:24:34.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c 2008-04-24 21:24:37.000000000 +0200 @@ -235,8 +235,6 @@ EXPORT_SYMBOL(xfs_iflock_nowait); EXPORT_SYMBOL(xfs_iflush); EXPORT_SYMBOL(xfs_ifunlock); EXPORT_SYMBOL(xfs_iget); -EXPORT_SYMBOL(xfs_igrow_start); -EXPORT_SYMBOL(xfs_igrow_finish); EXPORT_SYMBOL(xfs_ilock); EXPORT_SYMBOL(xfs_ilock_map_shared); EXPORT_SYMBOL(xfs_ilock_nowait); From owner-xfs@oss.sgi.com Wed Apr 30 04:31:20 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 04:31:48 -0700 (PDT) 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=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 m3UBVCSD007869 for ; Wed, 30 Apr 2008 04:31:20 -0700 X-ASG-Debug-ID: 1209555115-7e2202110000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from munster3.sis.pasteur.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 02F2D10E4B0 for ; Wed, 30 Apr 2008 04:31:55 -0700 (PDT) Received: from munster3.sis.pasteur.fr (munster3.sis.pasteur.fr [157.99.64.214]) by cuda.sgi.com with ESMTP id o0wWfvcrEZbiBap8 for ; Wed, 30 Apr 2008 04:31:55 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by munster3.sis.pasteur.fr (Postfix) with ESMTP id C3463119C6E; Wed, 30 Apr 2008 13:31:54 +0200 (CEST) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Scanned: amavisd-new at pasteur.fr Received: from sillage.bis.pasteur.fr (sillage.bis.pasteur.fr [157.99.90.140]) by munster3.sis.pasteur.fr (Postfix) with ESMTP id 943A2119C38; Wed, 30 Apr 2008 13:31:54 +0200 (CEST) Received: by sillage.bis.pasteur.fr (Postfix, from userid 2765) id 7B0D94F910; Wed, 30 Apr 2008 13:31:54 +0200 (CEST) Date: Wed, 30 Apr 2008 13:31:54 +0200 From: Tru Huynh To: Eric Sandeen Cc: markgw@sgi.com, Lance Reed , "xfs@oss.sgi.com" X-ASG-Orig-Subj: CentOS project? <- (Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed) Subject: CentOS project? <- (Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed) Message-ID: <20080430113154.GA26651@sillage.bis.pasteur.fr> References: <6A32BC807C106440B7E23208F280DDAF01D21F36FD@bcmail1.VIDMARK.LOCAL> <481650F5.40205@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F3718@bcmail1.VIDMARK.LOCAL> <481656F6.5030300@sandeen.net> <48166E18.10008@sgi.com> <48166F42.50104@sandeen.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48166F42.50104@sandeen.net> User-Agent: Mutt/1.5.11 X-Barracuda-Connect: munster3.sis.pasteur.fr[157.99.64.214] X-Barracuda-Start-Time: 1209555116 X-Barracuda-Bayes: INNOCENT GLOBAL 0.3030 1.0000 -0.3353 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.34 X-Barracuda-Spam-Status: No, SCORE=-0.34 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.1, rules version 3.1.49257 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean X-archive-position: 15709 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tru@pasteur.fr Precedence: bulk X-list: xfs On Mon, Apr 28, 2008 at 07:43:46PM -0500, Eric Sandeen wrote: ... > > Honestly, I think nothing makes its way back to Centos... I really don't > have the time to maintain it. If anyone on the list uses Centos + xfs > and wants to backport patches that appear to be bugfixes, I'm sure it'd > be welcomed. I'd be happy to facilitate w/ review or whatnot, but > probably won't have time to actually take on this task myself (despite > being the instigator of the centos module originally, which was, in > retrospect, perhaps a tad irresponsible...) :) Let's start a new CentOS project http://wiki.centos.org/Projects for kmod-xfs CentOS-4 and 5. Cheers, Tru -- Dr Tru Huynh | http://www.pasteur.fr/recherche/unites/Binfs/ mailto:tru@pasteur.fr | tel/fax +33 1 45 68 87 37/19 Institut Pasteur, 25-28 rue du Docteur Roux, 75724 Paris CEDEX 15 France From owner-xfs@oss.sgi.com Wed Apr 30 04:33:54 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 04:34:16 -0700 (PDT) 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 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 m3UBXnOP008276 for ; Wed, 30 Apr 2008 04:33:53 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id VAA16792; Wed, 30 Apr 2008 21:34:27 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3UBYJsT151236514; Wed, 30 Apr 2008 21:34:20 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3UBYIRo151127885; Wed, 30 Apr 2008 21:34:18 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 30 Apr 2008 21:34:18 +1000 From: David Chinner To: Christoph Hellwig Cc: David Chinner , Matthew Wilcox , xfs@oss.sgi.com Subject: Re: [PATCH] Remove l_flushsema Message-ID: <20080430113418.GP108924158@sgi.com> References: <20080430090502.GH14976@parisc-linux.org> <20080430104125.GM108924158@sgi.com> <20080430105832.GA20442@infradead.org> <20080430111154.GO108924158@sgi.com> <20080430111521.GA16571@infradead.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080430111521.GA16571@infradead.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15710 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 30, 2008 at 07:15:21AM -0400, Christoph Hellwig wrote: > On Wed, Apr 30, 2008 at 09:11:54PM +1000, David Chinner wrote: > > > waitqueues are loked internally and don't need synchronization. With > > > a little bit of re-arranging the code the wake_up could probably be > > > moved out of the critical section. > > > > Yeah, I just realised that myself and was about to reply as such.... > > > > I'll move the wakeup outside the lock. > > Below is the version I have now. One of the rare cases where using > sv_t actually cleans up the code (althoug the whole sv_ family should > probably loose some arguments). Yep, much cleaner. Who's signoff goes on this? Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 30 04:37:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 04:37:26 -0700 (PDT) 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 m3UBbAdF008769 for ; Wed, 30 Apr 2008 04:37:13 -0700 X-ASG-Debug-ID: 1209555473-7b5b01460000-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 4259E10E7B26; Wed, 30 Apr 2008 04:37:53 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id ISxMCAA6abF4Pyhv; Wed, 30 Apr 2008 04:37:53 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JrAdF-0004tR-Du; Wed, 30 Apr 2008 11:37:53 +0000 Date: Wed, 30 Apr 2008 07:37:53 -0400 From: Christoph Hellwig To: David Chinner Cc: Christoph Hellwig , Matthew Wilcox , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] Remove l_flushsema Subject: Re: [PATCH] Remove l_flushsema Message-ID: <20080430113753.GA17871@infradead.org> References: <20080430090502.GH14976@parisc-linux.org> <20080430104125.GM108924158@sgi.com> <20080430105832.GA20442@infradead.org> <20080430111154.GO108924158@sgi.com> <20080430111521.GA16571@infradead.org> <20080430113418.GP108924158@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080430113418.GP108924158@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209555474 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.1, rules version 3.1.49259 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15711 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Wed, Apr 30, 2008 at 09:34:18PM +1000, David Chinner wrote: > > probably loose some arguments). > > Yep, much cleaner. Who's signoff goes on this? You can have mine: Signed-off-by: Christoph Hellwig but I think it's till essentially willy's and he should be credited for it. From owner-xfs@oss.sgi.com Wed Apr 30 04:52:19 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 04:52:42 -0700 (PDT) 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.0 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 m3UBqBfD010850 for ; Wed, 30 Apr 2008 04:52:19 -0700 X-ASG-Debug-ID: 1209556374-7b08022b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.parisc-linux.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 51E2A10E7E67 for ; Wed, 30 Apr 2008 04:52:54 -0700 (PDT) Received: from mail.parisc-linux.org (palinux.external.hp.com [192.25.206.14]) by cuda.sgi.com with ESMTP id Azv7qD3smOxPbrWU for ; Wed, 30 Apr 2008 04:52:54 -0700 (PDT) Received: by mail.parisc-linux.org (Postfix, from userid 26919) id 482C4494006; Wed, 30 Apr 2008 05:52:54 -0600 (MDT) Date: Wed, 30 Apr 2008 05:52:53 -0600 From: Matthew Wilcox To: David Chinner Cc: Christoph Hellwig , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH] Remove l_flushsema Subject: Re: [PATCH] Remove l_flushsema Message-ID: <20080430115253.GL14976@parisc-linux.org> References: <20080430090502.GH14976@parisc-linux.org> <20080430104125.GM108924158@sgi.com> <20080430105832.GA20442@infradead.org> <20080430111154.GO108924158@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080430111154.GO108924158@sgi.com> User-Agent: Mutt/1.5.13 (2006-08-11) X-Barracuda-Connect: palinux.external.hp.com[192.25.206.14] X-Barracuda-Start-Time: 1209556375 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.1, rules version 3.1.49259 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15712 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: matthew@wil.cx Precedence: bulk X-list: xfs On Wed, Apr 30, 2008 at 09:11:54PM +1000, David Chinner wrote: > On Wed, Apr 30, 2008 at 06:58:32AM -0400, Christoph Hellwig wrote: > > On Wed, Apr 30, 2008 at 08:41:25PM +1000, David Chinner wrote: > > > The only thing that I'm concerned about here is that this will > > > substantially increase the time the l_icloglock is held. This is > > > a severely contended lock on large cpu count machines and putting > > > the wakeup inside this lock will increase the hold time. > > > > > > I guess I can address this by adding a new lock for the waitqueue > > > in a separate patch set. > > > > waitqueues are loked internally and don't need synchronization. With > > a little bit of re-arranging the code the wake_up could probably be > > moved out of the critical section. > > Yeah, I just realised that myself and was about to reply as such.... > > I'll move the wakeup outside the lock. I can't tell whether this race matters ... probably not: N processes come in and queue up waiting for the flush xlog_state_do_callback() is called it unlocks the spinlock a new task comes in and takes the spinlock wakeups happen ie do we care about 'fairness' here, or is it OK for a new task to jump the queue? -- Intel are signing my paycheques ... these opinions are still mine "Bill, look, we understand that you're interested in selling us this operating system, but compare it to ours. We can't possibly take such a retrograde step." From owner-xfs@oss.sgi.com Wed Apr 30 05:13:50 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 05:14:12 -0700 (PDT) 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 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 m3UCDkw2012526 for ; Wed, 30 Apr 2008 05:13:49 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id WAA17646; Wed, 30 Apr 2008 22:14:19 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m3UCEGsT151017907; Wed, 30 Apr 2008 22:14:18 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m3UCEEMn150966730; Wed, 30 Apr 2008 22:14:14 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 30 Apr 2008 22:14:14 +1000 From: David Chinner To: Matthew Wilcox Cc: David Chinner , Christoph Hellwig , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH] Remove l_flushsema Message-ID: <20080430121414.GQ108924158@sgi.com> References: <20080430090502.GH14976@parisc-linux.org> <20080430104125.GM108924158@sgi.com> <20080430105832.GA20442@infradead.org> <20080430111154.GO108924158@sgi.com> <20080430115253.GL14976@parisc-linux.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080430115253.GL14976@parisc-linux.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15713 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 30, 2008 at 05:52:53AM -0600, Matthew Wilcox wrote: > On Wed, Apr 30, 2008 at 09:11:54PM +1000, David Chinner wrote: > > On Wed, Apr 30, 2008 at 06:58:32AM -0400, Christoph Hellwig wrote: > > > On Wed, Apr 30, 2008 at 08:41:25PM +1000, David Chinner wrote: > > > > The only thing that I'm concerned about here is that this will > > > > substantially increase the time the l_icloglock is held. This is > > > > a severely contended lock on large cpu count machines and putting > > > > the wakeup inside this lock will increase the hold time. > > > > > > > > I guess I can address this by adding a new lock for the waitqueue > > > > in a separate patch set. > > > > > > waitqueues are loked internally and don't need synchronization. With > > > a little bit of re-arranging the code the wake_up could probably be > > > moved out of the critical section. > > > > Yeah, I just realised that myself and was about to reply as such.... > > > > I'll move the wakeup outside the lock. > > I can't tell whether this race matters ... probably not: > > N processes come in and queue up waiting for the flush > xlog_state_do_callback() is called > it unlocks the spinlock > a new task comes in and takes the spinlock > wakeups happen > > ie do we care about 'fairness' here, or is it OK for a new task to jump > the queue? This has always been a possibility here. However, this deep inside the log code I don't think it really matters because the waiters have log space reservations. In overload conditions, fairness is handled when obtaining a reservation via a ordered ticket queue (see xlog_grant_log_space()). Thundering herds tend to be thinned to smaller bursts by this queue, too... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 30 07:54:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 07:54:25 -0700 (PDT) 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.7 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 m3UErvv6023108 for ; Wed, 30 Apr 2008 07:54:03 -0700 X-ASG-Debug-ID: 1209567280-20d302ad0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx1.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BC42A10E919D for ; Wed, 30 Apr 2008 07:54:41 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id 4rWD4z7Hwt53Y463 for ; Wed, 30 Apr 2008 07:54:41 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id m3UEscAc017368; Wed, 30 Apr 2008 10:54:38 -0400 Received: from file.rdu.redhat.com (file.rdu.redhat.com [10.11.255.147]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m3UEschI028943; Wed, 30 Apr 2008 10:54:38 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by file.rdu.redhat.com (8.13.1/8.13.1) with ESMTP id m3UEsb3P031194; Wed, 30 Apr 2008 10:54:37 -0400 Message-ID: <4818882C.5020205@sandeen.net> Date: Wed, 30 Apr 2008 09:54:36 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (X11/20080226) MIME-Version: 1.0 To: Tru Huynh CC: markgw@sgi.com, Lance Reed , "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: CentOS project? <- (Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed) Subject: Re: CentOS project? <- (Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed) References: <6A32BC807C106440B7E23208F280DDAF01D21F36FD@bcmail1.VIDMARK.LOCAL> <481650F5.40205@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F3718@bcmail1.VIDMARK.LOCAL> <481656F6.5030300@sandeen.net> <48166E18.10008@sgi.com> <48166F42.50104@sandeen.net> <20080430113154.GA26651@sillage.bis.pasteur.fr> In-Reply-To: <20080430113154.GA26651@sillage.bis.pasteur.fr> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 X-Barracuda-Connect: mx1.redhat.com[66.187.233.31] X-Barracuda-Start-Time: 1209567281 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15714 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Tru Huynh wrote: > On Mon, Apr 28, 2008 at 07:43:46PM -0500, Eric Sandeen wrote: > ... >> Honestly, I think nothing makes its way back to Centos... I really don't >> have the time to maintain it. If anyone on the list uses Centos + xfs >> and wants to backport patches that appear to be bugfixes, I'm sure it'd >> be welcomed. I'd be happy to facilitate w/ review or whatnot, but >> probably won't have time to actually take on this task myself (despite >> being the instigator of the centos module originally, which was, in >> retrospect, perhaps a tad irresponsible...) :) > > Let's start a new CentOS project http://wiki.centos.org/Projects > for kmod-xfs CentOS-4 and 5. Sounds good to me. I think Karanbir is going to set this up. -Eric > Cheers, > > Tru From owner-xfs@oss.sgi.com Wed Apr 30 08:16:41 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 08:17:03 -0700 (PDT) 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 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 m3UFGWAg024903 for ; Wed, 30 Apr 2008 08:16:41 -0700 X-ASG-Debug-ID: 1209568635-26fd03360000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.parisc-linux.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5B83610E94A2 for ; Wed, 30 Apr 2008 08:17:15 -0700 (PDT) Received: from mail.parisc-linux.org (palinux.external.hp.com [192.25.206.14]) by cuda.sgi.com with ESMTP id bDsthP2RiXUfU6FH for ; Wed, 30 Apr 2008 08:17:15 -0700 (PDT) Received: by mail.parisc-linux.org (Postfix, from userid 26919) id 3CD9F494006; Wed, 30 Apr 2008 09:17:15 -0600 (MDT) Date: Wed, 30 Apr 2008 09:17:14 -0600 From: Matthew Wilcox To: Christoph Hellwig Cc: David Chinner , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] Remove l_flushsema Subject: Re: [PATCH] Remove l_flushsema Message-ID: <20080430151714.GM14976@parisc-linux.org> References: <20080430090502.GH14976@parisc-linux.org> <20080430104125.GM108924158@sgi.com> <20080430105832.GA20442@infradead.org> <20080430111154.GO108924158@sgi.com> <20080430111521.GA16571@infradead.org> <20080430113418.GP108924158@sgi.com> <20080430113753.GA17871@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080430113753.GA17871@infradead.org> User-Agent: Mutt/1.5.13 (2006-08-11) X-Barracuda-Connect: palinux.external.hp.com[192.25.206.14] X-Barracuda-Start-Time: 1209568636 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.1, rules version 3.1.49273 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15715 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: matthew@wil.cx Precedence: bulk X-list: xfs On Wed, Apr 30, 2008 at 07:37:53AM -0400, Christoph Hellwig wrote: > On Wed, Apr 30, 2008 at 09:34:18PM +1000, David Chinner wrote: > > > probably loose some arguments). > > > > Yep, much cleaner. Who's signoff goes on this? > > You can have mine: > > Signed-off-by: Christoph Hellwig > > but I think it's till essentially willy's and he should be credited for > it. I'm fine with adding my S-o-B to this version: Signed-off-by: Matthew Wilcox Here's a little twist on the idea to avoid the thundering herd. A vigorous review of this might not be a bad idea -- the idea is to only wake up sleeping processes when there seems to be enough space in the log to make it worthwhile. So there's a few places where we unlock the l_icloglock and jump back to restart; I didn't add an sv_signal there. But there should be an sv_signal before each exit from the function, and I think I've done that. Signed-off-by: Matthew Wilcox diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index 1bfe3f9..4533a10 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c @@ -2282,7 +2282,7 @@ xlog_state_do_callback( if (log->l_iclog->ic_state & (XLOG_STATE_ACTIVE|XLOG_STATE_IOERROR)) wait = 1; spin_unlock(&log->l_icloglock); - sv_broadcast(&log->l_flush_wait); + sv_signal(&log->l_flush_wait); } /* xlog_state_do_callback */ @@ -2377,6 +2377,7 @@ restart: spin_lock(&log->l_icloglock); if (XLOG_FORCED_SHUTDOWN(log)) { spin_unlock(&log->l_icloglock); + sv_signal(&log->l_flush_wait); return XFS_ERROR(EIO); } @@ -2425,8 +2426,11 @@ restart: /* If I'm the only one writing to this iclog, sync it to disk */ if (atomic_read(&iclog->ic_refcnt) == 1) { spin_unlock(&log->l_icloglock); - if ((error = xlog_state_release_iclog(log, iclog))) + error = xlog_state_release_iclog(log, iclog); + if (error) { + sv_signal(&log->l_flush_wait); return error; + } } else { atomic_dec(&iclog->ic_refcnt); spin_unlock(&log->l_icloglock); @@ -2452,6 +2456,7 @@ restart: ASSERT(iclog->ic_offset <= iclog->ic_size); spin_unlock(&log->l_icloglock); + sv_signal(&log->l_flush_wait); *logoffsetp = log_offset; return 0; -- Intel are signing my paycheques ... these opinions are still mine "Bill, look, we understand that you're interested in selling us this operating system, but compare it to ours. We can't possibly take such a retrograde step." From owner-xfs@oss.sgi.com Wed Apr 30 08:55:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 08:55:39 -0700 (PDT) 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=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 m3UFt2bp031669 for ; Wed, 30 Apr 2008 08:55:11 -0700 X-ASG-Debug-ID: 1209570945-141800ae0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tetsuo.zabbo.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4C8251604E7E for ; Wed, 30 Apr 2008 08:55:46 -0700 (PDT) Received: from tetsuo.zabbo.net (tetsuo.zabbo.net [207.173.201.20]) by cuda.sgi.com with ESMTP id nkXfu28txKzberKg for ; Wed, 30 Apr 2008 08:55:46 -0700 (PDT) Received: from Macintosh.local (unknown [192.168.110.240]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by tetsuo.zabbo.net (Postfix) with ESMTP id 4892FD104A0; Wed, 30 Apr 2008 08:55:45 -0700 (PDT) Message-ID: <48189681.5080504@oracle.com> Date: Wed, 30 Apr 2008 08:55:45 -0700 From: Zach Brown User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: "Aneesh Kumar K.V" CC: David Chinner , linux-fsdevel , linux-mm , xfs-oss X-ASG-Orig-Subj: Re: correct use of vmtruncate()? Subject: Re: correct use of vmtruncate()? References: <20080429100601.GO108924158@sgi.com> <481756A3.20601@oracle.com> <20080430072457.GB7791@skywalker> In-Reply-To: <20080430072457.GB7791@skywalker> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: tetsuo.zabbo.net[207.173.201.20] X-Barracuda-Start-Time: 1209570946 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.1, rules version 3.1.49276 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15716 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: zach.brown@oracle.com Precedence: bulk X-list: xfs >> This paragraph in particular reminds me of an outstanding bug with >> O_DIRECT and ext*. It isn't truncating partial allocations when a dio >> fails with ENOSPC. This was noticed by a user who saw that fsck found >> bocks outside i_size in the file that saw ENOSPC if they tried to >> unmount and check the volume after the failed write. > > This patch should be the fix I guess > http://lkml.org/lkml/2006/12/18/103 That's the thread related to the bug, yes, but that isn't the right fix as David's later messages in the thread indicate. - z From owner-xfs@oss.sgi.com Wed Apr 30 14:53:36 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 14:54:01 -0700 (PDT) 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.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no 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 m3ULrUWT027786 for ; Wed, 30 Apr 2008 14:53:36 -0700 X-ASG-Debug-ID: 1209592453-029c03120000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.brightcove.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E879D16141F0 for ; Wed, 30 Apr 2008 14:54:13 -0700 (PDT) Received: from mail.brightcove.com (mail.brightcove.com [38.113.27.188]) by cuda.sgi.com with ESMTP id CUMoIGBKsOam340T for ; Wed, 30 Apr 2008 14:54:13 -0700 (PDT) Received: from bcmail1.VIDMARK.LOCAL ([172.20.0.82]) by bcmail1.VIDMARK.LOCAL ([172.20.0.82]) with mapi; Wed, 30 Apr 2008 17:53:35 -0400 From: Lance Reed To: Eric Sandeen CC: "xfs@oss.sgi.com" Date: Wed, 30 Apr 2008 17:53:31 -0400 X-ASG-Orig-Subj: RE: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Subject: RE: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Thread-Topic: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Thread-Index: AciqGbqXQyhDIKWIQNisOqyX9VoPsAA8hsLg Message-ID: <6A32BC807C106440B7E23208F280DDAF01D21F3BA8@bcmail1.VIDMARK.LOCAL> References: <6A32BC807C106440B7E23208F280DDAF01D21F36FD@bcmail1.VIDMARK.LOCAL> <481650F5.40205@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F3718@bcmail1.VIDMARK.LOCAL> <481656F6.5030300@sandeen.net> <48166E18.10008@sgi.com> <48166F42.50104@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F384B@bcmail1.VIDMARK.LOCAL> <48175046.5050405@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F3870@bcmail1.VIDMARK.LOCAL> <481752F9.8040600@sandeen.net> In-Reply-To: <481752F9.8040600@sandeen.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: en-US Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 X-Barracuda-Connect: mail.brightcove.com[38.113.27.188] X-Barracuda-Start-Time: 1209592453 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.1, rules version 3.1.49300 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m3ULraWT027793 X-archive-position: 15717 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lreed@brightcove.com Precedence: bulk X-list: xfs Great! That is exactly what I needed to know. One follow up question: Can I assume that the bug: TAKE 959978 - growing an XFS filesystem by more than 2TB is broken is a problem only with the the xfs_growfs code? The reason I asked is that when I first made the original filesystem, I created it using mkfs.xfs and it succeeded fine for 10.5 TB. # mkfs.xfs /dev/VolGroupNAS200/LogVolNAS200 meta-data=/dev/VolGroupNAS200/LogVolNAS200 isize=256 agcount=32, agsize=83886080 blks = sectsz=512 attr=0 data = bsize=4096 blocks=2684354560, imaxpct=25 = sunit=0 swidth=0 blks, unwritten=1 naming =version 2 bsize=4096 log =internal log bsize=4096 blocks=32768, version=1 = sectsz=512 sunit=0 blks, lazy-count=0 realtime =none extsz=4096 blocks=0, rtextents= so I am assuming the rest of the XFS setup can handle large Filesystems fine. I am just trying to confirm that the probem is TAKE 959978 and that doing it in less than 2 TB increments should be fine. Thanks again to the List for all the assitance. Lance -----Original Message----- From: Eric Sandeen [mailto:sandeen@sandeen.net] Sent: Tuesday, April 29, 2008 12:55 PM To: Lance Reed Cc: markgw@sgi.com; xfs@oss.sgi.com Subject: Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Lance Reed wrote: > Thanks, > > Sorry, I am a bit confused on the "data section" vs. the "real-time section"? > > Is it enough to just run "xfs_growfs -D XXX /mntpoint" and the rest should fall into place. > > Again, sorry for being dense. > I really appraciate the rapid feedback. > Unless you specifically made a filesystem with a realtime subvol, just ignore it, it's not created by default. So yes, -D (in blocks) is what you want. A little cumbersome but not too bad :) -Eric From owner-xfs@oss.sgi.com Wed Apr 30 16:24:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 16:24:50 -0700 (PDT) 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 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 m3UNOJPh006451 for ; Wed, 30 Apr 2008 16:24:27 -0700 X-ASG-Debug-ID: 1209597902-09d601a10000-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 A5952AD4646 for ; Wed, 30 Apr 2008 16:25:03 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id YF4GjDBwV4bxUUep for ; Wed, 30 Apr 2008 16:25:03 -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 95B6518004480; Wed, 30 Apr 2008 18:25:00 -0500 (CDT) Message-ID: <4818FFCB.5060106@sandeen.net> Date: Wed, 30 Apr 2008 18:24:59 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Lance Reed CC: "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed Subject: Re: Problems with xfs_grow on large LVM + XFS filesystem 20TB size check 2 failed References: <6A32BC807C106440B7E23208F280DDAF01D21F36FD@bcmail1.VIDMARK.LOCAL> <481650F5.40205@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F3718@bcmail1.VIDMARK.LOCAL> <481656F6.5030300@sandeen.net> <48166E18.10008@sgi.com> <48166F42.50104@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F384B@bcmail1.VIDMARK.LOCAL> <48175046.5050405@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F3870@bcmail1.VIDMARK.LOCAL> <481752F9.8040600@sandeen.net> <6A32BC807C106440B7E23208F280DDAF01D21F3BA8@bcmail1.VIDMARK.LOCAL> In-Reply-To: <6A32BC807C106440B7E23208F280DDAF01D21F3BA8@bcmail1.VIDMARK.LOCAL> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1209597903 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.1, rules version 3.1.49305 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15718 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Lance Reed wrote: > Great! > That is exactly what I needed to know. > > One follow up question: > > Can I assume that the bug: > TAKE 959978 - growing an XFS filesystem by more than 2TB is broken > is a problem only with the the xfs_growfs code? The reason I asked is that when I first made the original filesystem, I created it using mkfs.xfs and it succeeded fine for 10.5 TB. > > # mkfs.xfs /dev/VolGroupNAS200/LogVolNAS200 > meta-data=/dev/VolGroupNAS200/LogVolNAS200 isize=256 agcount=32, agsize=83886080 blks > = sectsz=512 attr=0 > data = bsize=4096 blocks=2684354560, imaxpct=25 > = sunit=0 swidth=0 blks, unwritten=1 > naming =version 2 bsize=4096 > log =internal log bsize=4096 blocks=32768, version=1 > = sectsz=512 sunit=0 blks, lazy-count=0 > realtime =none extsz=4096 blocks=0, rtextents= > > so I am assuming the rest of the XFS setup can handle large Filesystems fine. I am just trying to confirm that the probem is TAKE 959978 and that doing it in less than 2 TB increments should be fine. yes, it was just in the growth path. -Eric From owner-xfs@oss.sgi.com Wed Apr 30 17:48:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 17:49:05 -0700 (PDT) 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 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 m410mgiG012457 for ; Wed, 30 Apr 2008 17:48:46 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA06117; Thu, 1 May 2008 10:49:26 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m410nQsT152237665; Thu, 1 May 2008 10:49:26 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m410nPlo151888858; Thu, 1 May 2008 10:49:25 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 1 May 2008 10:49:25 +1000 From: David Chinner To: Lachlan McIlroy Cc: David Chinner , xfs-dev , xfs-oss Subject: Re: [PATCH] Fix non-debug build for xfsidbg.c Message-ID: <20080501004925.GU108924158@sgi.com> References: <20080430065937.GC108924158@sgi.com> <48181D04.4030902@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48181D04.4030902@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15719 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 30, 2008 at 05:17:24PM +1000, Lachlan McIlroy wrote: > Dave, would the code look cleaner if iclog_bak was printed on a line by > itself? > That way we wouldn't need the #else and we wouldn't be duplicating code. Yup, probably a good idea. I've changed it to match how this is handled in other places in xfsidbg.c: @@ -5846,8 +5846,12 @@ log->l_curr_cycle, log->l_prev_cycle, log->l_curr_block, log->l_prev_block); kdb_printf("iclog_bak: 0x%p iclog_size: 0x%x (%d) num iclogs: %d\n", - log->l_iclog_bak, log->l_iclog_size, log->l_iclog_size, - log->l_iclog_bufs); +#ifdef DEBUG + log->l_iclog_bak, +#else + NULL, +#endif + log->l_iclog_size, log->l_iclog_size, log->l_iclog_bufs); kdb_printf("l_iclog_hsize %d l_iclog_heads %d\n", log->l_iclog_hsize, log->l_iclog_heads); kdb_printf("l_sectbb_log %u l_sectbb_mask %u\n", Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 30 18:18:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 18:19:10 -0700 (PDT) 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 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 m411IdAJ014299 for ; Wed, 30 Apr 2008 18:18:44 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA06720; Thu, 1 May 2008 11:19:17 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m411JDsT152101390; Thu, 1 May 2008 11:19:17 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m411JC24151747450; Thu, 1 May 2008 11:19:12 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 1 May 2008 11:19:12 +1000 From: David Chinner To: Matthew Wilcox Cc: Christoph Hellwig , David Chinner , xfs@oss.sgi.com Subject: Re: [PATCH] Remove l_flushsema Message-ID: <20080501011912.GZ108924158@sgi.com> References: <20080430090502.GH14976@parisc-linux.org> <20080430104125.GM108924158@sgi.com> <20080430105832.GA20442@infradead.org> <20080430111154.GO108924158@sgi.com> <20080430111521.GA16571@infradead.org> <20080430113418.GP108924158@sgi.com> <20080430113753.GA17871@infradead.org> <20080430151714.GM14976@parisc-linux.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080430151714.GM14976@parisc-linux.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15720 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, Apr 30, 2008 at 09:17:14AM -0600, Matthew Wilcox wrote: > On Wed, Apr 30, 2008 at 07:37:53AM -0400, Christoph Hellwig wrote: > > On Wed, Apr 30, 2008 at 09:34:18PM +1000, David Chinner wrote: > > > > probably loose some arguments). > > > > > > Yep, much cleaner. Who's signoff goes on this? > > > > You can have mine: > > > > Signed-off-by: Christoph Hellwig > > > > but I think it's till essentially willy's and he should be credited for > > it. > > I'm fine with adding my S-o-B to this version: > > Signed-off-by: Matthew Wilcox > > Here's a little twist on the idea to avoid the thundering herd. > A vigorous review of this might not be a bad idea -- the idea is to only > wake up sleeping processes when there seems to be enough space in the > log to make it worthwhile. So there's a few places where we unlock the > l_icloglock and jump back to restart; I didn't add an sv_signal there. > But there should be an sv_signal before each exit from the function, > and I think I've done that. That might work. I'll have to look at it more detail later and do some performance testing when I'm not so busy with other stuff. FWIW, in all the error or shutdown cases, it may as well be a broadcast as every subsequent process through this code will get the same error. i.e. once a log error occurs, the filesystem gets shut down.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 30 18:40:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 18:40:49 -0700 (PDT) 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 m411eRan015607 for ; Wed, 30 Apr 2008 18:40:29 -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 LAA07187; Thu, 1 May 2008 11:41:07 +1000 Message-ID: <48191FE8.9080607@sgi.com> Date: Thu, 01 May 2008 11:42:00 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [PATCH] Fix non-debug build for xfsidbg.c References: <20080430065937.GC108924158@sgi.com> <48181D04.4030902@sgi.com> <20080501004925.GU108924158@sgi.com> In-Reply-To: <20080501004925.GU108924158@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15721 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Sorry I should have been clearer. What I actually meant was something like this: --- a/fs/xfs/xfsidbg.c 2008-05-01 11:34:55.000000000 +1000 +++ b/fs/xfs/xfsidbg.c 2008-05-01 11:35:18.000000000 +1000 @@ -5845,9 +5845,11 @@ kdb_printf("curr_cycle: %d prev_cycle: %d curr_block: %d prev_block: %d\n", log->l_curr_cycle, log->l_prev_cycle, log->l_curr_block, log->l_prev_block); - kdb_printf("iclog_bak: 0x%p iclog_size: 0x%x (%d) num iclogs: %d\n", - log->l_iclog_bak, log->l_iclog_size, log->l_iclog_size, - log->l_iclog_bufs); +#ifdef DEBUG + kdb_printf("iclog_bak: 0x%p\n", log->l_iclog_bak); +#endif + kdb_printf("iclog_size: 0x%x (%d) num iclogs: %d\n", + log->l_iclog_size, log->l_iclog_size, log->l_iclog_bufs); kdb_printf("l_iclog_hsize %d l_iclog_heads %d\n", log->l_iclog_hsize, log->l_iclog_heads); kdb_printf("l_sectbb_log %u l_sectbb_mask %u\n", This way there is no code duplicated between the debug and non-debug cases. But I'm fine with your approach too. Lachlan David Chinner wrote: > On Wed, Apr 30, 2008 at 05:17:24PM +1000, Lachlan McIlroy wrote: >> Dave, would the code look cleaner if iclog_bak was printed on a line by >> itself? >> That way we wouldn't need the #else and we wouldn't be duplicating code. > > Yup, probably a good idea. I've changed it to match how this is handled > in other places in xfsidbg.c: > > @@ -5846,8 +5846,12 @@ > log->l_curr_cycle, log->l_prev_cycle, log->l_curr_block, > log->l_prev_block); > kdb_printf("iclog_bak: 0x%p iclog_size: 0x%x (%d) num iclogs: %d\n", > - log->l_iclog_bak, log->l_iclog_size, log->l_iclog_size, > - log->l_iclog_bufs); > +#ifdef DEBUG > + log->l_iclog_bak, > +#else > + NULL, > +#endif > + log->l_iclog_size, log->l_iclog_size, log->l_iclog_bufs); > kdb_printf("l_iclog_hsize %d l_iclog_heads %d\n", > log->l_iclog_hsize, log->l_iclog_heads); > kdb_printf("l_sectbb_log %u l_sectbb_mask %u\n", > > Cheers, > > Dave. From owner-xfs@oss.sgi.com Wed Apr 30 20:01:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 20:01:28 -0700 (PDT) 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 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 m41317HX019971 for ; Wed, 30 Apr 2008 20:01:09 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA09062; Thu, 1 May 2008 13:01:51 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4131osT152295842; Thu, 1 May 2008 13:01:50 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4131nLl152300105; Thu, 1 May 2008 13:01:49 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 1 May 2008 13:01:49 +1000 From: David Chinner To: Lachlan McIlroy Cc: David Chinner , xfs-dev , xfs-oss Subject: Re: [PATCH] Fix non-debug build for xfsidbg.c Message-ID: <20080501030149.GC108924158@sgi.com> References: <20080430065937.GC108924158@sgi.com> <48181D04.4030902@sgi.com> <20080501004925.GU108924158@sgi.com> <48191FE8.9080607@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48191FE8.9080607@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15722 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, May 01, 2008 at 11:42:00AM +1000, Lachlan McIlroy wrote: > Sorry I should have been clearer. What I actually meant was something > like this: Whatever. It's not worth arguing about. I just want to get it fixed. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed Apr 30 21:35:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 21:36:00 -0700 (PDT) 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.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_29, J_CHICKENPOX_35,J_CHICKENPOX_36,J_CHICKENPOX_37,J_CHICKENPOX_38, J_CHICKENPOX_39,J_CHICKENPOX_42,J_CHICKENPOX_43,J_CHICKENPOX_47, J_CHICKENPOX_61,J_CHICKENPOX_64,J_CHICKENPOX_72,J_CHICKENPOX_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 m414ZV20028944 for ; Wed, 30 Apr 2008 21:35:34 -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 OAA10605; Thu, 1 May 2008 14:36:13 +1000 Date: Thu, 01 May 2008 14:37:11 +1000 To: "xfs@oss.sgi.com" Subject: REVIEW: ASCII CI support in xfsprogs From: "Barry Naujok" Organization: SGI Cc: xfs-dev Content-Type: multipart/mixed; boundary=----------IXmiutYgjYq48aBi7Ucq48 MIME-Version: 1.0 Message-ID: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15723 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs ------------IXmiutYgjYq48aBi7Ucq48 Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 Content-Transfer-Encoding: Quoted-Printable I've reworked xfsprogs userspace tools from scratch with ASCII CI support only. Much simpler than previous patches with Unicode CI. One issue that sort of bugs me a bit is I've maintained the same output as the original IRIX mkfs.xfs with CI mode: naming =3Dversion 2 bsize=3D4096 mixed-case=3DY|N where "N" =3D CI enabled and "Y" =3D normal case-senstive filesystem. Should this be changed to something clearer? Barry. -- --- xfsprogs/db/check.c | 2 - xfsprogs/db/sb.c | 2 + xfsprogs/growfs/xfs_growfs.c | 15 +++++--- xfsprogs/include/libxfs.h | 1 xfsprogs/include/xfs_da_btree.h | 21 +++++++++++ xfsprogs/include/xfs_fs.h | 1 xfsprogs/include/xfs_sb.h | 10 +++++ xfsprogs/libxfs/xfs_da_btree.c | 12 ++++++ xfsprogs/libxfs/xfs_dir2.c | 63=20=20 +++++++++++++++++++++++++++++++++-- xfsprogs/libxfs/xfs_dir2_block.c | 5 +- xfsprogs/libxfs/xfs_dir2_data.c | 2 - xfsprogs/man/man8/mkfs.xfs.8 | 27 +++++++++------ xfsprogs/mkfs/xfs_mkfs.c | 69=20=20 +++++++++++++++++---------------------- xfsprogs/mkfs/xfs_mkfs.h | 9 ++--- xfsprogs/repair/phase6.c | 11 +++--- 15 files changed, 178 insertions(+), 72 deletions(-) Index: ci/xfsprogs/db/check.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/db/check.c +++ ci/xfsprogs/db/check.c @@ -2317,7 +2317,7 @@ process_data_dir_v2( tag_err +=3D INT_GET(*tagp, ARCH_CONVERT) !=3D (char *)dep - (char *)da= ta; addr =3D XFS_DIR2_DB_OFF_TO_DATAPTR(mp, db, (char *)dep - (char *)data); - hash =3D libxfs_da_hashname((uchar_t *)dep->name, dep->namelen); + hash =3D mp->m_dirnameops->hashname((uchar_t *)dep->name, dep->namelen); dir_hash_add(hash, addr); ptr +=3D XFS_DIR2_DATA_ENTSIZE(dep->namelen); count++; Index: ci/xfsprogs/db/sb.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/db/sb.c +++ ci/xfsprogs/db/sb.c @@ -605,6 +605,8 @@ version_string( strcat(s, ",EXTFLG"); if (XFS_SB_VERSION_HASSECTOR(sbp)) strcat(s, ",SECTOR"); + if (xfs_sb_version_hasasciici(sbp)) + strcat(s, ",ASCII_CI"); if (XFS_SB_VERSION_HASMOREBITS(sbp)) strcat(s, ",MOREBITS"); if (XFS_SB_VERSION_HASATTR2(sbp)) Index: ci/xfsprogs/growfs/xfs_growfs.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/growfs/xfs_growfs.c +++ ci/xfsprogs/growfs/xfs_growfs.c @@ -61,14 +61,15 @@ report_info( int lazycount, int dirversion, int logversion, - int attrversion) + int attrversion, + int cimode) { printf(_( "meta-data=3D%-22s isize=3D%-6u agcount=3D%u, agsize=3D%u blks\n" " =3D%-22s sectsz=3D%-5u attr=3D%u\n" "data =3D%-22s bsize=3D%-6u blocks=3D%llu, imaxpct=3D%u\n" " =3D%-22s sunit=3D%-6u swidth=3D%u blks\n" - "naming =3Dversion %-14u bsize=3D%-6u\n" + "naming =3Dversion %-14u bsize=3D%-6u mixed-case=3D%c\n" "log =3D%-22s bsize=3D%-6u blocks=3D%u, version=3D%u\n" " =3D%-22s sectsz=3D%-5u sunit=3D%u blks, lazy-count=3D%u\n" "realtime =3D%-22s extsz=3D%-6u blocks=3D%llu, rtextents=3D%llu\n"), @@ -78,7 +79,7 @@ report_info( "", geo.blocksize, (unsigned long long)geo.datablocks, geo.imaxpct, "", geo.sunit, geo.swidth, - dirversion, geo.dirblocksize, + dirversion, geo.dirblocksize, cimode ? 'N' : 'Y', isint ? _("internal") : logname ? logname : _("external"), geo.blocksize, geo.logblocks, logversion, "", geo.logsectsize, geo.logsunit / geo.blocksize, lazycount, @@ -114,6 +115,7 @@ main(int argc, char **argv) xfs_fsop_geom_t ngeo; /* new fs geometry */ int rflag; /* -r flag */ long long rsize; /* new rt size in fs blocks */ + int ci; /* ASCII case-insensitive fs */ int lazycount; /* lazy superblock counters */ int xflag; /* -x flag */ char *fname; /* mount point name */ @@ -131,6 +133,7 @@ main(int argc, char **argv) maxpct =3D esize =3D 0; dsize =3D lsize =3D rsize =3D 0LL; aflag =3D dflag =3D iflag =3D lflag =3D mflag =3D nflag =3D rflag =3D xf= lag =3D 0; + ci =3D 0; while ((c =3D getopt(argc, argv, "dD:e:ilL:m:np:rR:t:xV")) !=3D EOF) { switch (c) { @@ -239,11 +242,11 @@ main(int argc, char **argv) logversion =3D geo.flags & XFS_FSOP_GEOM_FLAGS_LOGV2 ? 2 : 1; attrversion =3D geo.flags & XFS_FSOP_GEOM_FLAGS_ATTR2 ? 2 : \ (geo.flags & XFS_FSOP_GEOM_FLAGS_ATTR ? 1 : 0); - + ci =3D geo.flags & XFS_FSOP_GEOM_FLAGS_DIRV2CI ? 1 : 0; if (nflag) { report_info(geo, datadev, isint, logdev, rtdev, lazycount, dirversion, logversion, - attrversion); + attrversion, ci); exit(0); } @@ -280,7 +283,7 @@ main(int argc, char **argv) report_info(geo, datadev, isint, logdev, rtdev, lazycount, dirversion, logversion, - attrversion); + attrversion, ci); ddsize =3D xi.dsize; dlsize =3D ( xi.logBBsize? xi.logBBsize : Index: ci/xfsprogs/include/libxfs.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/include/libxfs.h +++ ci/xfsprogs/include/libxfs.h @@ -175,6 +175,7 @@ typedef struct xfs_mount { int m_attr_magicpct;/* 37% of the blocksize */ int m_dir_magicpct; /* 37% of the dir blocksize */ __uint8_t m_dirversion; /* 1 or 2 */ + const struct xfs_nameops *m_dirnameops; /* vector of dir name ops */ int m_dirblksize; /* directory block sz--bytes */ int m_dirblkfsbs; /* directory block sz--fsbs */ xfs_dablk_t m_dirdatablk; /* blockno of dir data v2 */ Index: ci/xfsprogs/include/xfs_da_btree.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/include/xfs_da_btree.h +++ ci/xfsprogs/include/xfs_da_btree.h @@ -103,6 +103,15 @@ typedef struct xfs_da_node_entry xfs_da_ *=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*/ /* + * Search comparison results + */ +enum xfs_dacmp { + XFS_CMP_DIFFERENT, /* names are completely different */ + XFS_CMP_EXACT, /* names are exactly the same */ + XFS_CMP_CASE /* names are same but differ in case */ +}; + +/* * Structure to ease passing around component names. */ typedef struct xfs_da_args { @@ -131,6 +140,7 @@ typedef struct xfs_da_args { unsigned char rename; /* T/F: this is an atomic rename op */ unsigned char addname; /* T/F: this is an add operation */ unsigned char oknoent; /* T/F: ok to return ENOENT, else die */ + enum xfs_dacmp cmpresult; /* name compare result for lookups */ } xfs_da_args_t; /* @@ -205,6 +215,14 @@ typedef struct xfs_da_state { (uint)(XFS_DA_LOGOFF(BASE, ADDR)), \ (uint)(XFS_DA_LOGOFF(BASE, ADDR)+(SIZE)-1) +/* + * Name ops for directory and/or attr name operations + */ +struct xfs_nameops { + xfs_dahash_t (*hashname)(const uchar_t *, int); + enum xfs_dacmp (*compname)(const uchar_t *, int, const uchar_t *, int); +}; + #ifdef __KERNEL__ /*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D @@ -253,6 +271,9 @@ int xfs_da_shrink_inode(xfs_da_args_t *a xfs_dabuf_t *dead_buf); uint xfs_da_hashname(const uchar_t *name_string, int name_length); +enum xfs_dacmp xfs_da_compname(const uchar_t *name1, int len1, + const uchar_t *name2, int len2); + uint xfs_da_log2_roundup(uint i); xfs_da_state_t *xfs_da_state_alloc(void); void xfs_da_state_free(xfs_da_state_t *state); Index: ci/xfsprogs/include/xfs_fs.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/include/xfs_fs.h +++ ci/xfsprogs/include/xfs_fs.h @@ -241,6 +241,7 @@ typedef struct xfs_fsop_resblks { #define XFS_FSOP_GEOM_FLAGS_LOGV2 0x0100 /* log format version 2 */ #define XFS_FSOP_GEOM_FLAGS_SECTOR 0x0200 /* sector sizes >1BB */ #define XFS_FSOP_GEOM_FLAGS_ATTR2 0x0400 /* inline attributes rework */ +#define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x1000 /* ASCII only CI names */ #define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x4000 /* lazy superblock counters */ Index: ci/xfsprogs/include/xfs_sb.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/include/xfs_sb.h +++ ci/xfsprogs/include/xfs_sb.h @@ -46,10 +46,12 @@ struct xfs_mount; #define XFS_SB_VERSION_SECTORBIT 0x0800 #define XFS_SB_VERSION_EXTFLGBIT 0x1000 #define XFS_SB_VERSION_DIRV2BIT 0x2000 +#define XFS_SB_VERSION_BORGBIT 0x4000 #define XFS_SB_VERSION_MOREBITSBIT 0x8000 #define XFS_SB_VERSION_OKSASHFBITS \ (XFS_SB_VERSION_EXTFLGBIT | \ - XFS_SB_VERSION_DIRV2BIT) + XFS_SB_VERSION_DIRV2BIT | \ + XFS_SB_VERSION_BORGBIT) #define XFS_SB_VERSION_OKREALFBITS \ (XFS_SB_VERSION_ATTRBIT | \ XFS_SB_VERSION_NLINKBIT | \ @@ -416,6 +418,12 @@ static inline int xfs_sb_version_hassect ((sbp)->sb_versionnum & XFS_SB_VERSION_SECTORBIT); } +static inline int xfs_sb_version_hasasciici(xfs_sb_t *sbp) +{ + return (XFS_SB_VERSION_NUM(sbp) =3D=3D XFS_SB_VERSION_4) && \ + (sbp->sb_versionnum & XFS_SB_VERSION_BORGBIT); +} + #define XFS_SB_VERSION_HASMOREBITS(sbp) xfs_sb_version_hasmorebits(sbp) static inline int xfs_sb_version_hasmorebits(xfs_sb_t *sbp) { Index: ci/xfsprogs/libxfs/xfs_da_btree.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/libxfs/xfs_da_btree.c +++ ci/xfsprogs/libxfs/xfs_da_btree.c @@ -1540,6 +1540,18 @@ xfs_da_hashname(const uchar_t *name, int } } +enum xfs_dacmp +xfs_da_compname(const uchar_t *name1, int len1, const uchar_t *name2, int= =20=20 len2) +{ + return (len1 =3D=3D len2 && memcmp(name1, name2, len1) =3D=3D 0) ? + XFS_CMP_EXACT : XFS_CMP_DIFFERENT; +} + +const struct xfs_nameops xfs_default_nameops =3D { + .hashname =3D xfs_da_hashname, + .compname =3D xfs_da_compname +}; + /* * Add a block to the btree ahead of the file. * Return the new block number to the caller. Index: ci/xfsprogs/libxfs/xfs_dir2.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/libxfs/xfs_dir2.c +++ ci/xfsprogs/libxfs/xfs_dir2.c @@ -23,6 +23,57 @@ #include +extern const struct xfs_nameops xfs_default_nameops; + +/* + * V1/OLDCI case-insensitive support for directories that was used in=20= =20 IRIX. + * + * This is ASCII only case support, ie. A-Z. + */ +static xfs_dahash_t +xfs_ascii_ci_hashname( + const uchar_t *name, + int len) +{ + xfs_dahash_t hash; + int i; + + for (i =3D 0, hash =3D 0; i < len; i++) + hash =3D tolower(name[i]) ^ rol32(hash, 7); + + return hash; +} + +static enum xfs_dacmp +xfs_ascii_ci_compname( + const uchar_t *name1, + int len1, + const uchar_t *name2, + int len2) +{ + enum xfs_dacmp result; + int i; + + if (len1 !=3D len2) + return XFS_CMP_DIFFERENT; + + result =3D XFS_CMP_EXACT; + for (i =3D 0; i < len1; i++) { + if (name1[i] =3D=3D name2[i]) + continue; + if (tolower(name1[i]) !=3D tolower(name2[i])) + return XFS_CMP_DIFFERENT; + result =3D XFS_CMP_CASE; + } + + return result; +} + +static const struct xfs_nameops xfs_ascii_ci_nameops =3D { + .hashname =3D xfs_ascii_ci_hashname, + .compname =3D xfs_ascii_ci_compname, +}; + /* * Initialize directory-related fields in the mount structure. @@ -46,6 +97,10 @@ xfs_dir2_mount( (mp->m_dirblksize - (uint)sizeof(xfs_da_node_hdr_t)) / (uint)sizeof(xfs_da_node_entry_t); mp->m_dir_magicpct =3D (mp->m_dirblksize * 37) / 100; + if (xfs_sb_version_hasasciici(&mp->m_sb)) + mp->m_dirnameops =3D &xfs_ascii_ci_nameops; + else + mp->m_dirnameops =3D &xfs_default_nameops; } /* @@ -98,7 +153,7 @@ xfs_dir2_createname( */ args.name =3D name; args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.hashval =3D dp->i_mount->m_dirnameops->hashname(name, namelen); args.inumber =3D inum; args.dp =3D dp; args.firstblock =3D first; @@ -149,7 +204,7 @@ xfs_dir2_lookup( */ args.name =3D name; args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.hashval =3D dp->i_mount->m_dirnameops->hashname(name, namelen); args.inumber =3D 0; args.dp =3D dp; args.firstblock =3D NULL; @@ -206,7 +261,7 @@ xfs_dir2_removename( */ args.name =3D name; args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.hashval =3D dp->i_mount->m_dirnameops->hashname(name, namelen); args.inumber =3D ino; args.dp =3D dp; args.firstblock =3D first; @@ -261,7 +316,7 @@ xfs_dir2_replace( */ args.name =3D name; args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.hashval =3D dp->i_mount->m_dirnameops->hashname(name, namelen); args.inumber =3D inum; args.dp =3D dp; args.firstblock =3D first; Index: ci/xfsprogs/libxfs/xfs_dir2_block.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/libxfs/xfs_dir2_block.c +++ ci/xfsprogs/libxfs/xfs_dir2_block.c @@ -1046,8 +1046,9 @@ xfs_dir2_sf_to_block( tagp =3D XFS_DIR2_DATA_ENTRY_TAG_P(dep); INT_SET(*tagp, ARCH_CONVERT, (xfs_dir2_data_off_t)((char *)dep - (char= =20=20 *)block)); xfs_dir2_data_log_entry(tp, bp, dep); - INT_SET(blp[2 + i].hashval, ARCH_CONVERT, xfs_da_hashname((const=20=20 uchar_t *)sfep->name, sfep->namelen)); - INT_SET(blp[2 + i].address, ARCH_CONVERT, XFS_DIR2_BYTE_TO_DATAPTR(mp, + blp[2 + i].hashval =3D cpu_to_be32(mp->m_dirnameops->hashname( + sfep->name, sfep->namelen)); + blp[2 + i].address =3D cpu_to_be32(xfs_dir2_byte_to_dataptr(mp, (char *)dep - (char *)block)); offset =3D (int)((char *)(tagp + 1) - (char *)block); if (++i =3D=3D INT_GET(sfp->hdr.count, ARCH_CONVERT)) Index: ci/xfsprogs/libxfs/xfs_dir2_data.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/libxfs/xfs_dir2_data.c +++ ci/xfsprogs/libxfs/xfs_dir2_data.c @@ -126,7 +126,7 @@ xfs_dir2_data_check( addr =3D XFS_DIR2_DB_OFF_TO_DATAPTR(mp, mp->m_dirdatablk, (xfs_dir2_data_aoff_t) ((char *)dep - (char *)d)); - hash =3D xfs_da_hashname((char *)dep->name, dep->namelen); + hash =3D mp->m_dirnameops->hashname(dep->name, dep->namelen); for (i =3D 0; i < INT_GET(btp->count, ARCH_CONVERT); i++) { if (INT_GET(lep[i].address, ARCH_CONVERT) =3D=3D addr && INT_GET(lep[i].hashval, ARCH_CONVERT) =3D=3D hash) Index: ci/xfsprogs/man/man8/mkfs.xfs.8 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/man/man8/mkfs.xfs.8 +++ ci/xfsprogs/man/man8/mkfs.xfs.8 @@ -302,8 +302,8 @@ bits. .TP .BI maxpct=3D value This specifies the maximum percentage of space in the filesystem that -can be allocated to inodes. The default -.I value +can be allocated to inodes. The default +.I value is 25% for filesystems under 1TB, 5% for filesystems under 50TB and 1% for filesystems over 50TB. .IP @@ -314,14 +314,14 @@ allocator will avoid these low blocks to maxpct, so a high value may result in a filesystem with nothing but inodes in a significant portion of the lower blocks of the filesystem. (This restriction is not present when the filesystem is mounted with -the -.I "inode64" +the +.I "inode64" option on 64-bit platforms). .IP Setting the value to 0 means that essentially all of the filesystem can become inode blocks, subject to inode32 restrictions. .IP -This value can be modified with +This value can be modified with .Ixfs_growfs(8) . .TP @@ -340,7 +340,7 @@ filesystem needs to be mountable by a ve that does not have the inode alignment feature (any release of IRIX before 6.2, and IRIX 6.2 without XFS patches). .TP -.BI attr=3D value +.BI attr=3D value This is used to specify the version of extended attribute inline allocation policy to be used. By default, this is 2, which uses an efficient algorithm for managing the available inline inode space @@ -489,10 +489,17 @@ filesystem block size. .BI version=3D value The naming (directory) version .I value -can be either 1 or 2, defaulting to 2 if unspecified. -With version 2 directories, -the directory block size can be any power of 2 size -from the filesystem block size up to 65536. +can be either 2 or 'ci', defaulting to 2 if unspecified. +With version 2 directories, the directory block size can be +any power of 2 size from the filesystem block size up to 65536. +.IP +The +.B version=3Dci +option enables ASCII only case-insensitive filename lookup and version +2 directories. Filenames are case-preserving, that is, the names +are stored in directories using the case they were created with. +.IP +Note: Version 1 directories are not supported. .RE .TP .BI \-p " protofile" Index: ci/xfsprogs/mkfs/xfs_mkfs.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/mkfs/xfs_mkfs.c +++ ci/xfsprogs/mkfs/xfs_mkfs.c @@ -678,6 +678,7 @@ main( xfs_alloc_rec_t *nrec; int nsflag; int nvflag; + int nci; int Nflag; char *p; char *protofile; @@ -720,8 +721,9 @@ main( loginternal =3D 1; logversion =3D 2; logagno =3D logblocks =3D rtblocks =3D rtextblocks =3D 0; - Nflag =3D nlflag =3D nsflag =3D nvflag =3D 0; - dirblocklog =3D dirblocksize =3D dirversion =3D 0; + Nflag =3D nlflag =3D nsflag =3D nvflag =3D nci =3D 0; + dirblocklog =3D dirblocksize =3D 0; + dirversion =3D XFS_DFL_DIR_VERSION; qflag =3D 0; imaxpct =3D inodelog =3D inopblock =3D isize =3D 0; iaflag =3D XFS_IFLAG_ALIGN; @@ -1236,9 +1238,14 @@ main( reqval('n', nopts, N_VERSION); if (nvflag) respec('n', nopts, N_VERSION); - dirversion =3D atoi(value); - if (dirversion < 1 || dirversion > 2) - illegal(value, "n version"); + if (!strcmp(value, "ci")) { + nci =3D 1; /* ASCII CI mode */ + } else { + dirversion =3D atoi(value); + if (dirversion !=3D 2) + illegal(value, + "n version"); + } nvflag =3D 1; break; default: @@ -1412,33 +1419,19 @@ main( logversion =3D 2; } - if (!nvflag) - dirversion =3D (nsflag || nlflag) ? 2 : XFS_DFL_DIR_VERSION; - switch (dirversion) { - case 1: - if ((nsflag || nlflag) && dirblocklog !=3D blocklog) { + if (nsflag || nlflag) { + if (dirblocksize < blocksize || + dirblocksize > XFS_MAX_BLOCKSIZE) { fprintf(stderr, _("illegal directory block size %d\n"), dirblocksize); usage(); } - break; - case 2: - if (nsflag || nlflag) { - if (dirblocksize < blocksize || - dirblocksize > XFS_MAX_BLOCKSIZE) { - fprintf(stderr, - _("illegal directory block size %d\n"), - dirblocksize); - usage(); - } - } else { - if (blocksize < (1 << XFS_MIN_REC_DIRSIZE)) - dirblocklog =3D XFS_MIN_REC_DIRSIZE; - else - dirblocklog =3D blocklog; - dirblocksize =3D 1 << dirblocklog; - } - break; + } else { + if (blocksize < (1 << XFS_MIN_REC_DIRSIZE)) + dirblocklog =3D XFS_MIN_REC_DIRSIZE; + else + dirblocklog =3D blocklog; + dirblocksize =3D 1 << dirblocklog; } if (daflag && dasize) { @@ -2024,7 +2017,7 @@ an AG size that is one stripe unit small " =3D%-22s sectsz=3D%-5u attr=3D%u\n" "data =3D%-22s bsize=3D%-6u blocks=3D%llu, imaxpct=3D%u\n" " =3D%-22s sunit=3D%-6u swidth=3D%u blks\n" - "naming =3Dversion %-14u bsize=3D%-6u\n" + "naming =3Dversion %-14u bsize=3D%-6u mixed-case=3D%c\n" "log =3D%-22s bsize=3D%-6d blocks=3D%lld, version=3D%d\n" " =3D%-22s sectsz=3D%-5u sunit=3D%d blks, lazy-count=3D%d\n" "realtime =3D%-22s extsz=3D%-6d blocks=3D%lld, rtextents=3D%lld\n"), @@ -2033,7 +2026,7 @@ an AG size that is one stripe unit small "", blocksize, (long long)dblocks, calc_default_imaxpct(blocklog, dblocks), "", dsunit, dswidth, - dirversion, dirversion =3D=3D 1 ? blocksize : dirblocksize, + dirversion, dirblocksize, nci ? 'N' : 'Y', logfile, 1 << blocklog, (long long)logblocks, logversion, "", lsectorsize, lsunit, lazy_sb_counters, rtfile, rtextblocks << blocklog, @@ -2078,8 +2071,7 @@ an AG size that is one stripe unit small sbp->sb_qflags =3D 0; sbp->sb_unit =3D dsunit; sbp->sb_width =3D dswidth; - if (dirversion =3D=3D 2) - sbp->sb_dirblklog =3D dirblocklog - blocklog; + sbp->sb_dirblklog =3D dirblocklog - blocklog; if (logversion =3D=3D 2) { /* This is stored in bytes */ lsunit =3D (lsunit =3D=3D 0) ? 1 : XFS_FSB_TO_B(mp, lsunit); sbp->sb_logsunit =3D lsunit; @@ -2097,12 +2089,13 @@ an AG size that is one stripe unit small sbp->sb_logsectlog =3D 0; sbp->sb_logsectsize =3D 0; } - sbp->sb_features2 =3D XFS_SB_VERSION2_MKFS(lazy_sb_counters, attrversion= =20=20 =3D=3D 2, 0); - sbp->sb_versionnum =3D XFS_SB_VERSION_MKFS( - iaflag, dsunit !=3D 0, - dirversion =3D=3D 2, logversion =3D=3D 2, attrversion =3D=3D 1, - (sectorsize !=3D BBSIZE || lsectorsize !=3D BBSIZE), - sbp->sb_features2 !=3D 0); + sbp->sb_features2 =3D XFS_SB_VERSION2_MKFS(lazy_sb_counters, + attrversion =3D=3D 2, 0); + sbp->sb_versionnum =3D XFS_SB_VERSION_MKFS(iaflag, dsunit !=3D 0, + logversion =3D=3D 2, attrversion =3D=3D 1, + (sectorsize !=3D BBSIZE || + lsectorsize !=3D BBSIZE), + nci, sbp->sb_features2 !=3D 0); /* * Due to a structure alignment issue, sb_features2 ended up in one * of two locations, the second "incorrect" location represented by Index: ci/xfsprogs/mkfs/xfs_mkfs.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/mkfs/xfs_mkfs.h +++ ci/xfsprogs/mkfs/xfs_mkfs.h @@ -20,17 +20,18 @@ #define XFS_DFL_SB_VERSION_BITS \ (XFS_SB_VERSION_NLINKBIT | \ - XFS_SB_VERSION_EXTFLGBIT) + XFS_SB_VERSION_EXTFLGBIT | \ + XFS_SB_VERSION_DIRV2BIT) -#define XFS_SB_VERSION_MKFS(ia,dia,dir2,log2,attr1,sflag,more) (\ - ((ia)||(dia)||(dir2)||(log2)||(attr1)||(sflag)||(more)) ? \ +#define XFS_SB_VERSION_MKFS(ia,dia,log2,attr1,sflag,ci,more) (\ + ((ia)||(dia)||(log2)||(attr1)||(sflag)||(ci)||(more)) ? \ ( XFS_SB_VERSION_4 | \ ((ia) ? XFS_SB_VERSION_ALIGNBIT : 0) | \ ((dia) ? XFS_SB_VERSION_DALIGNBIT : 0) | \ - ((dir2) ? XFS_SB_VERSION_DIRV2BIT : 0) | \ ((log2) ? XFS_SB_VERSION_LOGV2BIT : 0) | \ ((attr1) ? XFS_SB_VERSION_ATTRBIT : 0) | \ ((sflag) ? XFS_SB_VERSION_SECTORBIT : 0) | \ + ((ci) ? XFS_SB_VERSION_BORGBIT : 0) | \ ((more) ? XFS_SB_VERSION_MOREBITSBIT : 0) | \ XFS_DFL_SB_VERSION_BITS | \ 0 ) : XFS_SB_VERSION_1 ) Index: ci/xfsprogs/repair/phase6.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/repair/phase6.c +++ ci/xfsprogs/repair/phase6.c @@ -93,6 +93,7 @@ typedef struct freetab { */ static int dir_hash_add( + xfs_mount_t *mp, dir_hash_tab_t *hashtab, __uint32_t addr, xfs_ino_t inum, @@ -113,7 +114,7 @@ dir_hash_add( dup =3D 0; if (!junk) { - hash =3D libxfs_da_hashname(name, namelen); + hash =3D mp->m_dirnameops->hashname(name, namelen); byhash =3D DIR_HASH_FUNC(hashtab, hash); /* @@ -1589,7 +1590,7 @@ lf_block_dir_entry_check(xfs_mount_t *m /* * check for duplicate names in directory. */ - if (!dir_hash_add(hashtab, (da_bno << mp->m_sb.sb_blocklog) + + if (!dir_hash_add(mp, hashtab, (da_bno << mp->m_sb.sb_blocklog) + entry->nameidx, lino, entry->namelen, namest->name)) { nbad++; @@ -2260,7 +2261,7 @@ longform_dir2_entry_check_data( /* * check for duplicate names in directory. */ - if (!dir_hash_add(hashtab, addr, inum, dep->namelen, + if (!dir_hash_add(mp, hashtab, addr, inum, dep->namelen, dep->name)) { nbad++; if (entry_junked(_("entry \"%s\" (ino %llu) in dir " @@ -2870,7 +2871,7 @@ shortform_dir_entry_check(xfs_mount_t *m /* * check for duplicate names in directory. */ - if (!dir_hash_add(hashtab, + if (!dir_hash_add(mp, hashtab, (xfs_dir2_dataptr_t)(sf_entry - &sf->list[0]), lino, sf_entry->namelen, sf_entry->name)) { do_warn(_("entry \"%s\" (ino %llu) in dir %llu is a " @@ -3275,7 +3276,7 @@ shortform_dir2_entry_check(xfs_mount_t * /* * check for duplicate names in directory. */ - if (!dir_hash_add(hashtab, (xfs_dir2_dataptr_t) + if (!dir_hash_add(mp, hashtab, (xfs_dir2_dataptr_t) (sfep - XFS_DIR2_SF_FIRSTENTRY(sfp)), lino, sfep->namelen, sfep->name)) { do_warn(_("entry \"%s\" (ino %llu) in dir %llu is a " ------------IXmiutYgjYq48aBi7Ucq48 Content-Disposition: attachment; filename=ascii_ci.patch Content-Type: text/x-patch; name=ascii_ci.patch Content-Transfer-Encoding: Quoted-Printable --- xfsprogs/db/check.c | 2 - xfsprogs/db/sb.c | 2 + xfsprogs/growfs/xfs_growfs.c | 15 +++++--- xfsprogs/include/libxfs.h | 1=20 xfsprogs/include/xfs_da_btree.h | 21 +++++++++++ xfsprogs/include/xfs_fs.h | 1=20 xfsprogs/include/xfs_sb.h | 10 +++++ xfsprogs/libxfs/xfs_da_btree.c | 12 ++++++ xfsprogs/libxfs/xfs_dir2.c | 63 +++++++++++++++++++++++++++++++++-- xfsprogs/libxfs/xfs_dir2_block.c | 5 +- xfsprogs/libxfs/xfs_dir2_data.c | 2 - xfsprogs/man/man8/mkfs.xfs.8 | 27 +++++++++------ xfsprogs/mkfs/xfs_mkfs.c | 69 +++++++++++++++++-----------------= ----- xfsprogs/mkfs/xfs_mkfs.h | 9 ++--- xfsprogs/repair/phase6.c | 11 +++--- 15 files changed, 178 insertions(+), 72 deletions(-) Index: ci/xfsprogs/db/check.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/db/check.c +++ ci/xfsprogs/db/check.c @@ -2317,7 +2317,7 @@ process_data_dir_v2( tag_err +=3D INT_GET(*tagp, ARCH_CONVERT) !=3D (char *)dep - (char *)dat= a; addr =3D XFS_DIR2_DB_OFF_TO_DATAPTR(mp, db, (char *)dep - (char *)data); - hash =3D libxfs_da_hashname((uchar_t *)dep->name, dep->namelen); + hash =3D mp->m_dirnameops->hashname((uchar_t *)dep->name, dep->namelen); dir_hash_add(hash, addr); ptr +=3D XFS_DIR2_DATA_ENTSIZE(dep->namelen); count++; Index: ci/xfsprogs/db/sb.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/db/sb.c +++ ci/xfsprogs/db/sb.c @@ -605,6 +605,8 @@ version_string( strcat(s, ",EXTFLG"); if (XFS_SB_VERSION_HASSECTOR(sbp)) strcat(s, ",SECTOR"); + if (xfs_sb_version_hasasciici(sbp)) + strcat(s, ",ASCII_CI"); if (XFS_SB_VERSION_HASMOREBITS(sbp)) strcat(s, ",MOREBITS"); if (XFS_SB_VERSION_HASATTR2(sbp)) Index: ci/xfsprogs/growfs/xfs_growfs.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/growfs/xfs_growfs.c +++ ci/xfsprogs/growfs/xfs_growfs.c @@ -61,14 +61,15 @@ report_info( int lazycount, int dirversion, int logversion, - int attrversion) + int attrversion, + int cimode) { printf(_( "meta-data=3D%-22s isize=3D%-6u agcount=3D%u, agsize=3D%u blks\n" " =3D%-22s sectsz=3D%-5u attr=3D%u\n" "data =3D%-22s bsize=3D%-6u blocks=3D%llu, imaxpct=3D%u\n" " =3D%-22s sunit=3D%-6u swidth=3D%u blks\n" - "naming =3Dversion %-14u bsize=3D%-6u\n" + "naming =3Dversion %-14u bsize=3D%-6u mixed-case=3D%c\n" "log =3D%-22s bsize=3D%-6u blocks=3D%u, version=3D%u\n" " =3D%-22s sectsz=3D%-5u sunit=3D%u blks, lazy-count=3D%u\n" "realtime =3D%-22s extsz=3D%-6u blocks=3D%llu, rtextents=3D%llu\n"), @@ -78,7 +79,7 @@ report_info( "", geo.blocksize, (unsigned long long)geo.datablocks, geo.imaxpct, "", geo.sunit, geo.swidth, - dirversion, geo.dirblocksize, + dirversion, geo.dirblocksize, cimode ? 'N' : 'Y', isint ? _("internal") : logname ? logname : _("external"), geo.blocksize, geo.logblocks, logversion, "", geo.logsectsize, geo.logsunit / geo.blocksize, lazycount, @@ -114,6 +115,7 @@ main(int argc, char **argv) xfs_fsop_geom_t ngeo; /* new fs geometry */ int rflag; /* -r flag */ long long rsize; /* new rt size in fs blocks */ + int ci; /* ASCII case-insensitive fs */ int lazycount; /* lazy superblock counters */ int xflag; /* -x flag */ char *fname; /* mount point name */ @@ -131,6 +133,7 @@ main(int argc, char **argv) maxpct =3D esize =3D 0; dsize =3D lsize =3D rsize =3D 0LL; aflag =3D dflag =3D iflag =3D lflag =3D mflag =3D nflag =3D rflag =3D xfl= ag =3D 0; + ci =3D 0; =20 while ((c =3D getopt(argc, argv, "dD:e:ilL:m:np:rR:t:xV")) !=3D EOF) { switch (c) { @@ -239,11 +242,11 @@ main(int argc, char **argv) logversion =3D geo.flags & XFS_FSOP_GEOM_FLAGS_LOGV2 ? 2 : 1; attrversion =3D geo.flags & XFS_FSOP_GEOM_FLAGS_ATTR2 ? 2 : \ (geo.flags & XFS_FSOP_GEOM_FLAGS_ATTR ? 1 : 0); - + ci =3D geo.flags & XFS_FSOP_GEOM_FLAGS_DIRV2CI ? 1 : 0; if (nflag) { report_info(geo, datadev, isint, logdev, rtdev, lazycount, dirversion, logversion, - attrversion); + attrversion, ci); exit(0); } =20 @@ -280,7 +283,7 @@ main(int argc, char **argv) =20 report_info(geo, datadev, isint, logdev, rtdev, lazycount, dirversion, logversion, - attrversion); + attrversion, ci); =20 ddsize =3D xi.dsize; dlsize =3D ( xi.logBBsize? xi.logBBsize : Index: ci/xfsprogs/include/libxfs.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/include/libxfs.h +++ ci/xfsprogs/include/libxfs.h @@ -175,6 +175,7 @@ typedef struct xfs_mount { int m_attr_magicpct;/* 37% of the blocksize */ int m_dir_magicpct; /* 37% of the dir blocksize */ __uint8_t m_dirversion; /* 1 or 2 */ + const struct xfs_nameops *m_dirnameops; /* vector of dir name ops */ int m_dirblksize; /* directory block sz--bytes */ int m_dirblkfsbs; /* directory block sz--fsbs */ xfs_dablk_t m_dirdatablk; /* blockno of dir data v2 */ Index: ci/xfsprogs/include/xfs_da_btree.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/include/xfs_da_btree.h +++ ci/xfsprogs/include/xfs_da_btree.h @@ -103,6 +103,15 @@ typedef struct xfs_da_node_entry xfs_da_ *=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*/ =20 /* + * Search comparison results + */ +enum xfs_dacmp { + XFS_CMP_DIFFERENT, /* names are completely different */ + XFS_CMP_EXACT, /* names are exactly the same */ + XFS_CMP_CASE /* names are same but differ in case */ +}; + +/* * Structure to ease passing around component names. */ typedef struct xfs_da_args { @@ -131,6 +140,7 @@ typedef struct xfs_da_args { unsigned char rename; /* T/F: this is an atomic rename op */ unsigned char addname; /* T/F: this is an add operation */ unsigned char oknoent; /* T/F: ok to return ENOENT, else die */ + enum xfs_dacmp cmpresult; /* name compare result for lookups */ } xfs_da_args_t; =20 /* @@ -205,6 +215,14 @@ typedef struct xfs_da_state { (uint)(XFS_DA_LOGOFF(BASE, ADDR)), \ (uint)(XFS_DA_LOGOFF(BASE, ADDR)+(SIZE)-1) =20 +/* + * Name ops for directory and/or attr name operations + */ +struct xfs_nameops { + xfs_dahash_t (*hashname)(const uchar_t *, int); + enum xfs_dacmp (*compname)(const uchar_t *, int, const uchar_t *, int); +}; + =20 #ifdef __KERNEL__ /*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D @@ -253,6 +271,9 @@ int xfs_da_shrink_inode(xfs_da_args_t *a xfs_dabuf_t *dead_buf); =20 uint xfs_da_hashname(const uchar_t *name_string, int name_length); +enum xfs_dacmp xfs_da_compname(const uchar_t *name1, int len1, + const uchar_t *name2, int len2); + uint xfs_da_log2_roundup(uint i); xfs_da_state_t *xfs_da_state_alloc(void); void xfs_da_state_free(xfs_da_state_t *state); Index: ci/xfsprogs/include/xfs_fs.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/include/xfs_fs.h +++ ci/xfsprogs/include/xfs_fs.h @@ -241,6 +241,7 @@ typedef struct xfs_fsop_resblks { #define XFS_FSOP_GEOM_FLAGS_LOGV2 0x0100 /* log format version 2 */ #define XFS_FSOP_GEOM_FLAGS_SECTOR 0x0200 /* sector sizes >1BB */ #define XFS_FSOP_GEOM_FLAGS_ATTR2 0x0400 /* inline attributes rework */ +#define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x1000 /* ASCII only CI names */ #define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x4000 /* lazy superblock counters */ =20 =20 Index: ci/xfsprogs/include/xfs_sb.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/include/xfs_sb.h +++ ci/xfsprogs/include/xfs_sb.h @@ -46,10 +46,12 @@ struct xfs_mount; #define XFS_SB_VERSION_SECTORBIT 0x0800 #define XFS_SB_VERSION_EXTFLGBIT 0x1000 #define XFS_SB_VERSION_DIRV2BIT 0x2000 +#define XFS_SB_VERSION_BORGBIT 0x4000 #define XFS_SB_VERSION_MOREBITSBIT 0x8000 #define XFS_SB_VERSION_OKSASHFBITS \ (XFS_SB_VERSION_EXTFLGBIT | \ - XFS_SB_VERSION_DIRV2BIT) + XFS_SB_VERSION_DIRV2BIT | \ + XFS_SB_VERSION_BORGBIT) #define XFS_SB_VERSION_OKREALFBITS \ (XFS_SB_VERSION_ATTRBIT | \ XFS_SB_VERSION_NLINKBIT | \ @@ -416,6 +418,12 @@ static inline int xfs_sb_version_hassect ((sbp)->sb_versionnum & XFS_SB_VERSION_SECTORBIT); } =20 +static inline int xfs_sb_version_hasasciici(xfs_sb_t *sbp) +{ + return (XFS_SB_VERSION_NUM(sbp) =3D=3D XFS_SB_VERSION_4) && \ + (sbp->sb_versionnum & XFS_SB_VERSION_BORGBIT); +} + #define XFS_SB_VERSION_HASMOREBITS(sbp) xfs_sb_version_hasmorebits(sbp) static inline int xfs_sb_version_hasmorebits(xfs_sb_t *sbp) { Index: ci/xfsprogs/libxfs/xfs_da_btree.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/libxfs/xfs_da_btree.c +++ ci/xfsprogs/libxfs/xfs_da_btree.c @@ -1540,6 +1540,18 @@ xfs_da_hashname(const uchar_t *name, int } } =20 +enum xfs_dacmp +xfs_da_compname(const uchar_t *name1, int len1, const uchar_t *name2, int = len2) +{ + return (len1 =3D=3D len2 && memcmp(name1, name2, len1) =3D=3D 0) ? + XFS_CMP_EXACT : XFS_CMP_DIFFERENT; +} + +const struct xfs_nameops xfs_default_nameops =3D { + .hashname =3D xfs_da_hashname, + .compname =3D xfs_da_compname +}; + /* * Add a block to the btree ahead of the file. * Return the new block number to the caller. Index: ci/xfsprogs/libxfs/xfs_dir2.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/libxfs/xfs_dir2.c +++ ci/xfsprogs/libxfs/xfs_dir2.c @@ -23,6 +23,57 @@ =20 #include =20 +extern const struct xfs_nameops xfs_default_nameops; + +/* + * V1/OLDCI case-insensitive support for directories that was used in IRIX. + * + * This is ASCII only case support, ie. A-Z. + */ +static xfs_dahash_t +xfs_ascii_ci_hashname( + const uchar_t *name, + int len) +{ + xfs_dahash_t hash; + int i; + + for (i =3D 0, hash =3D 0; i < len; i++) + hash =3D tolower(name[i]) ^ rol32(hash, 7); + + return hash; +} + +static enum xfs_dacmp +xfs_ascii_ci_compname( + const uchar_t *name1, + int len1, + const uchar_t *name2, + int len2) +{ + enum xfs_dacmp result; + int i; + + if (len1 !=3D len2) + return XFS_CMP_DIFFERENT; + + result =3D XFS_CMP_EXACT; + for (i =3D 0; i < len1; i++) { + if (name1[i] =3D=3D name2[i]) + continue; + if (tolower(name1[i]) !=3D tolower(name2[i])) + return XFS_CMP_DIFFERENT; + result =3D XFS_CMP_CASE; + } + + return result; +} + +static const struct xfs_nameops xfs_ascii_ci_nameops =3D { + .hashname =3D xfs_ascii_ci_hashname, + .compname =3D xfs_ascii_ci_compname, +}; + =20 /* * Initialize directory-related fields in the mount structure. @@ -46,6 +97,10 @@ xfs_dir2_mount( (mp->m_dirblksize - (uint)sizeof(xfs_da_node_hdr_t)) / (uint)sizeof(xfs_da_node_entry_t); mp->m_dir_magicpct =3D (mp->m_dirblksize * 37) / 100; + if (xfs_sb_version_hasasciici(&mp->m_sb)) + mp->m_dirnameops =3D &xfs_ascii_ci_nameops; + else + mp->m_dirnameops =3D &xfs_default_nameops; } =20 /* @@ -98,7 +153,7 @@ xfs_dir2_createname( */ args.name =3D name; args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.hashval =3D dp->i_mount->m_dirnameops->hashname(name, namelen); args.inumber =3D inum; args.dp =3D dp; args.firstblock =3D first; @@ -149,7 +204,7 @@ xfs_dir2_lookup( */ args.name =3D name; args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.hashval =3D dp->i_mount->m_dirnameops->hashname(name, namelen); args.inumber =3D 0; args.dp =3D dp; args.firstblock =3D NULL; @@ -206,7 +261,7 @@ xfs_dir2_removename( */ args.name =3D name; args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.hashval =3D dp->i_mount->m_dirnameops->hashname(name, namelen); args.inumber =3D ino; args.dp =3D dp; args.firstblock =3D first; @@ -261,7 +316,7 @@ xfs_dir2_replace( */ args.name =3D name; args.namelen =3D namelen; - args.hashval =3D xfs_da_hashname(name, namelen); + args.hashval =3D dp->i_mount->m_dirnameops->hashname(name, namelen); args.inumber =3D inum; args.dp =3D dp; args.firstblock =3D first; Index: ci/xfsprogs/libxfs/xfs_dir2_block.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/libxfs/xfs_dir2_block.c +++ ci/xfsprogs/libxfs/xfs_dir2_block.c @@ -1046,8 +1046,9 @@ xfs_dir2_sf_to_block( tagp =3D XFS_DIR2_DATA_ENTRY_TAG_P(dep); INT_SET(*tagp, ARCH_CONVERT, (xfs_dir2_data_off_t)((char *)dep - (char *= )block)); xfs_dir2_data_log_entry(tp, bp, dep); - INT_SET(blp[2 + i].hashval, ARCH_CONVERT, xfs_da_hashname((const uchar_t= *)sfep->name, sfep->namelen)); - INT_SET(blp[2 + i].address, ARCH_CONVERT, XFS_DIR2_BYTE_TO_DATAPTR(mp, + blp[2 + i].hashval =3D cpu_to_be32(mp->m_dirnameops->hashname( + sfep->name, sfep->namelen)); + blp[2 + i].address =3D cpu_to_be32(xfs_dir2_byte_to_dataptr(mp, (char *)dep - (char *)block)); offset =3D (int)((char *)(tagp + 1) - (char *)block); if (++i =3D=3D INT_GET(sfp->hdr.count, ARCH_CONVERT)) Index: ci/xfsprogs/libxfs/xfs_dir2_data.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/libxfs/xfs_dir2_data.c +++ ci/xfsprogs/libxfs/xfs_dir2_data.c @@ -126,7 +126,7 @@ xfs_dir2_data_check( addr =3D XFS_DIR2_DB_OFF_TO_DATAPTR(mp, mp->m_dirdatablk, (xfs_dir2_data_aoff_t) ((char *)dep - (char *)d)); - hash =3D xfs_da_hashname((char *)dep->name, dep->namelen); + hash =3D mp->m_dirnameops->hashname(dep->name, dep->namelen); for (i =3D 0; i < INT_GET(btp->count, ARCH_CONVERT); i++) { if (INT_GET(lep[i].address, ARCH_CONVERT) =3D=3D addr && INT_GET(lep[i].hashval, ARCH_CONVERT) =3D=3D hash) Index: ci/xfsprogs/man/man8/mkfs.xfs.8 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/man/man8/mkfs.xfs.8 +++ ci/xfsprogs/man/man8/mkfs.xfs.8 @@ -302,8 +302,8 @@ bits. .TP .BI maxpct=3D value This specifies the maximum percentage of space in the filesystem that -can be allocated to inodes. The default=20 -.I value=20 +can be allocated to inodes. The default +.I value is 25% for filesystems under 1TB, 5% for filesystems under 50TB and 1% for filesystems over 50TB. .IP @@ -314,14 +314,14 @@ allocator will avoid these low blocks to maxpct, so a high value may result in a filesystem with nothing but inodes in a significant portion of the lower blocks of the filesystem. (This restriction is not present when the filesystem is mounted with -the=20 -.I "inode64"=20 +the +.I "inode64" option on 64-bit platforms). .IP Setting the value to 0 means that essentially all of the filesystem can become inode blocks, subject to inode32 restrictions. .IP -This value can be modified with=20 +This value can be modified with .Ixfs_growfs(8) . .TP @@ -340,7 +340,7 @@ filesystem needs to be mountable by a ve that does not have the inode alignment feature (any release of IRIX before 6.2, and IRIX 6.2 without XFS patches). .TP -.BI attr=3D value=20 +.BI attr=3D value This is used to specify the version of extended attribute inline allocation policy to be used. By default, this is 2, which uses an efficient algorithm for managing the available inline inode space @@ -489,10 +489,17 @@ filesystem block size. .BI version=3D value The naming (directory) version .I value -can be either 1 or 2, defaulting to 2 if unspecified. -With version 2 directories, -the directory block size can be any power of 2 size -from the filesystem block size up to 65536. +can be either 2 or 'ci', defaulting to 2 if unspecified. +With version 2 directories, the directory block size can be +any power of 2 size from the filesystem block size up to 65536. +.IP +The +.B version=3Dci +option enables ASCII only case-insensitive filename lookup and version +2 directories. Filenames are case-preserving, that is, the names +are stored in directories using the case they were created with. +.IP +Note: Version 1 directories are not supported. .RE .TP .BI \-p " protofile" Index: ci/xfsprogs/mkfs/xfs_mkfs.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/mkfs/xfs_mkfs.c +++ ci/xfsprogs/mkfs/xfs_mkfs.c @@ -678,6 +678,7 @@ main( xfs_alloc_rec_t *nrec; int nsflag; int nvflag; + int nci; int Nflag; char *p; char *protofile; @@ -720,8 +721,9 @@ main( loginternal =3D 1; logversion =3D 2; logagno =3D logblocks =3D rtblocks =3D rtextblocks =3D 0; - Nflag =3D nlflag =3D nsflag =3D nvflag =3D 0; - dirblocklog =3D dirblocksize =3D dirversion =3D 0; + Nflag =3D nlflag =3D nsflag =3D nvflag =3D nci =3D 0; + dirblocklog =3D dirblocksize =3D 0; + dirversion =3D XFS_DFL_DIR_VERSION; qflag =3D 0; imaxpct =3D inodelog =3D inopblock =3D isize =3D 0; iaflag =3D XFS_IFLAG_ALIGN; @@ -1236,9 +1238,14 @@ main( reqval('n', nopts, N_VERSION); if (nvflag) respec('n', nopts, N_VERSION); - dirversion =3D atoi(value); - if (dirversion < 1 || dirversion > 2) - illegal(value, "n version"); + if (!strcmp(value, "ci")) { + nci =3D 1; /* ASCII CI mode */ + } else { + dirversion =3D atoi(value); + if (dirversion !=3D 2) + illegal(value, + "n version"); + } nvflag =3D 1; break; default: @@ -1412,33 +1419,19 @@ main( logversion =3D 2; } =20 - if (!nvflag) - dirversion =3D (nsflag || nlflag) ? 2 : XFS_DFL_DIR_VERSION; - switch (dirversion) { - case 1: - if ((nsflag || nlflag) && dirblocklog !=3D blocklog) { + if (nsflag || nlflag) { + if (dirblocksize < blocksize || + dirblocksize > XFS_MAX_BLOCKSIZE) { fprintf(stderr, _("illegal directory block size %d\n"), dirblocksize); usage(); } - break; - case 2: - if (nsflag || nlflag) { - if (dirblocksize < blocksize || - dirblocksize > XFS_MAX_BLOCKSIZE) { - fprintf(stderr, - _("illegal directory block size %d\n"), - dirblocksize); - usage(); - } - } else { - if (blocksize < (1 << XFS_MIN_REC_DIRSIZE)) - dirblocklog =3D XFS_MIN_REC_DIRSIZE; - else - dirblocklog =3D blocklog; - dirblocksize =3D 1 << dirblocklog; - } - break; + } else { + if (blocksize < (1 << XFS_MIN_REC_DIRSIZE)) + dirblocklog =3D XFS_MIN_REC_DIRSIZE; + else + dirblocklog =3D blocklog; + dirblocksize =3D 1 << dirblocklog; } =20 if (daflag && dasize) { @@ -2024,7 +2017,7 @@ an AG size that is one stripe unit small " =3D%-22s sectsz=3D%-5u attr=3D%u\n" "data =3D%-22s bsize=3D%-6u blocks=3D%llu, imaxpct=3D%u\n" " =3D%-22s sunit=3D%-6u swidth=3D%u blks\n" - "naming =3Dversion %-14u bsize=3D%-6u\n" + "naming =3Dversion %-14u bsize=3D%-6u mixed-case=3D%c\n" "log =3D%-22s bsize=3D%-6d blocks=3D%lld, version=3D%d\n" " =3D%-22s sectsz=3D%-5u sunit=3D%d blks, lazy-count=3D%d\n" "realtime =3D%-22s extsz=3D%-6d blocks=3D%lld, rtextents=3D%lld\n"), @@ -2033,7 +2026,7 @@ an AG size that is one stripe unit small "", blocksize, (long long)dblocks, calc_default_imaxpct(blocklog, dblocks), "", dsunit, dswidth, - dirversion, dirversion =3D=3D 1 ? blocksize : dirblocksize, + dirversion, dirblocksize, nci ? 'N' : 'Y', logfile, 1 << blocklog, (long long)logblocks, logversion, "", lsectorsize, lsunit, lazy_sb_counters, rtfile, rtextblocks << blocklog, @@ -2078,8 +2071,7 @@ an AG size that is one stripe unit small sbp->sb_qflags =3D 0; sbp->sb_unit =3D dsunit; sbp->sb_width =3D dswidth; - if (dirversion =3D=3D 2) - sbp->sb_dirblklog =3D dirblocklog - blocklog; + sbp->sb_dirblklog =3D dirblocklog - blocklog; if (logversion =3D=3D 2) { /* This is stored in bytes */ lsunit =3D (lsunit =3D=3D 0) ? 1 : XFS_FSB_TO_B(mp, lsunit); sbp->sb_logsunit =3D lsunit; @@ -2097,12 +2089,13 @@ an AG size that is one stripe unit small sbp->sb_logsectlog =3D 0; sbp->sb_logsectsize =3D 0; } - sbp->sb_features2 =3D XFS_SB_VERSION2_MKFS(lazy_sb_counters, attrversion = =3D=3D 2, 0); - sbp->sb_versionnum =3D XFS_SB_VERSION_MKFS( - iaflag, dsunit !=3D 0, - dirversion =3D=3D 2, logversion =3D=3D 2, attrversion =3D=3D 1, - (sectorsize !=3D BBSIZE || lsectorsize !=3D BBSIZE), - sbp->sb_features2 !=3D 0); + sbp->sb_features2 =3D XFS_SB_VERSION2_MKFS(lazy_sb_counters, + attrversion =3D=3D 2, 0); + sbp->sb_versionnum =3D XFS_SB_VERSION_MKFS(iaflag, dsunit !=3D 0, + logversion =3D=3D 2, attrversion =3D=3D 1, + (sectorsize !=3D BBSIZE || + lsectorsize !=3D BBSIZE), + nci, sbp->sb_features2 !=3D 0); /* * Due to a structure alignment issue, sb_features2 ended up in one * of two locations, the second "incorrect" location represented by Index: ci/xfsprogs/mkfs/xfs_mkfs.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/mkfs/xfs_mkfs.h +++ ci/xfsprogs/mkfs/xfs_mkfs.h @@ -20,17 +20,18 @@ =20 #define XFS_DFL_SB_VERSION_BITS \ (XFS_SB_VERSION_NLINKBIT | \ - XFS_SB_VERSION_EXTFLGBIT) + XFS_SB_VERSION_EXTFLGBIT | \ + XFS_SB_VERSION_DIRV2BIT) =20 -#define XFS_SB_VERSION_MKFS(ia,dia,dir2,log2,attr1,sflag,more) (\ - ((ia)||(dia)||(dir2)||(log2)||(attr1)||(sflag)||(more)) ? \ +#define XFS_SB_VERSION_MKFS(ia,dia,log2,attr1,sflag,ci,more) (\ + ((ia)||(dia)||(log2)||(attr1)||(sflag)||(ci)||(more)) ? \ ( XFS_SB_VERSION_4 | \ ((ia) ? XFS_SB_VERSION_ALIGNBIT : 0) | \ ((dia) ? XFS_SB_VERSION_DALIGNBIT : 0) | \ - ((dir2) ? XFS_SB_VERSION_DIRV2BIT : 0) | \ ((log2) ? XFS_SB_VERSION_LOGV2BIT : 0) | \ ((attr1) ? XFS_SB_VERSION_ATTRBIT : 0) | \ ((sflag) ? XFS_SB_VERSION_SECTORBIT : 0) | \ + ((ci) ? XFS_SB_VERSION_BORGBIT : 0) | \ ((more) ? XFS_SB_VERSION_MOREBITSBIT : 0) | \ XFS_DFL_SB_VERSION_BITS | \ 0 ) : XFS_SB_VERSION_1 ) Index: ci/xfsprogs/repair/phase6.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- ci.orig/xfsprogs/repair/phase6.c +++ ci/xfsprogs/repair/phase6.c @@ -93,6 +93,7 @@ typedef struct freetab { */ static int dir_hash_add( + xfs_mount_t *mp, dir_hash_tab_t *hashtab, __uint32_t addr, xfs_ino_t inum, @@ -113,7 +114,7 @@ dir_hash_add( dup =3D 0; =20 if (!junk) { - hash =3D libxfs_da_hashname(name, namelen); + hash =3D mp->m_dirnameops->hashname(name, namelen); byhash =3D DIR_HASH_FUNC(hashtab, hash); =20 /* @@ -1589,7 +1590,7 @@ lf_block_dir_entry_check(xfs_mount_t *m /* * check for duplicate names in directory. */ - if (!dir_hash_add(hashtab, (da_bno << mp->m_sb.sb_blocklog) + + if (!dir_hash_add(mp, hashtab, (da_bno << mp->m_sb.sb_blocklog) + entry->nameidx, lino, entry->namelen, namest->name)) { nbad++; @@ -2260,7 +2261,7 @@ longform_dir2_entry_check_data( /* * check for duplicate names in directory. */ - if (!dir_hash_add(hashtab, addr, inum, dep->namelen, + if (!dir_hash_add(mp, hashtab, addr, inum, dep->namelen, dep->name)) { nbad++; if (entry_junked(_("entry \"%s\" (ino %llu) in dir " @@ -2870,7 +2871,7 @@ shortform_dir_entry_check(xfs_mount_t *m /* * check for duplicate names in directory. */ - if (!dir_hash_add(hashtab, + if (!dir_hash_add(mp, hashtab, (xfs_dir2_dataptr_t)(sf_entry - &sf->list[0]), lino, sf_entry->namelen, sf_entry->name)) { do_warn(_("entry \"%s\" (ino %llu) in dir %llu is a " @@ -3275,7 +3276,7 @@ shortform_dir2_entry_check(xfs_mount_t * /* * check for duplicate names in directory. */ - if (!dir_hash_add(hashtab, (xfs_dir2_dataptr_t) + if (!dir_hash_add(mp, hashtab, (xfs_dir2_dataptr_t) (sfep - XFS_DIR2_SF_FIRSTENTRY(sfp)), lino, sfep->namelen, sfep->name)) { do_warn(_("entry \"%s\" (ino %llu) in dir %llu is a " ------------IXmiutYgjYq48aBi7Ucq48-- From owner-xfs@oss.sgi.com Wed Apr 30 21:58:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 21:58:56 -0700 (PDT) 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.0 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 m414wZL2030089 for ; Wed, 30 Apr 2008 21:58:37 -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 OAA10943; Thu, 1 May 2008 14:59:15 +1000 Message-ID: <48194E23.5050009@sgi.com> Date: Thu, 01 May 2008 14:59:15 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: xfs-dev , xfs-oss Subject: request to checkin updated xfstess/dmapi/src/suite1/cmd/Makefile.in Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15724 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs I would like to check in an updated xfstests/dmapi/src/suite1/cmd/Makefile.in like we do with the other Makefile.in's in xfstests/dmapi. This has been the current model that we've been following where we checkin the Makefile.in even though it can be generated by running automake on the Makefile.am file. The xfstests/dmapi/src/suite1/cmd/Makefile.am was updated for a new binary target but not the Makefile.in which means that one needs to run automake. So I've run automake and would like to check in the new Makefile.in so that one just needs to run configure and make for the build in dmapi. The xfstests makefile currently runs configure and make in dmapi. --Tim From owner-xfs@oss.sgi.com Wed Apr 30 22:12:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 22:12:25 -0700 (PDT) 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 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 m415C31w030918 for ; Wed, 30 Apr 2008 22:12:06 -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 PAA11200; Thu, 1 May 2008 15:12:39 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 7824558C4C15; Thu, 1 May 2008 15:12:39 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 978729 - Fix non-debug build breakage in xfsidbg.c Message-Id: <20080501051239.7824558C4C15@chook.melbourne.sgi.com> Date: Thu, 1 May 2008 15:12:39 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15725 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Fix non-debug build breakage in xfsidbg.c Date: Thu May 1 15:12:22 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: lachlan@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31013a fs/xfs/xfsidbg.c - 1.348 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfsidbg.c.diff?r1=text&tr1=1.348&r2=text&tr2=1.347&f=h - l_iclog_bak only exists in debug kernels now. From owner-xfs@oss.sgi.com Wed Apr 30 23:09:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 30 Apr 2008 23:09:31 -0700 (PDT) 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.0 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 m41699Ui000836 for ; Wed, 30 Apr 2008 23:09:12 -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 QAA12488; Thu, 1 May 2008 16:09:49 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1116) id 2664358C4C15; Thu, 1 May 2008 16:09:49 +1000 (EST) To: xfs@oss.sgi.com, sgi.bugs.xfs@engr.sgi.com Subject: TAKE update xfstests/dmapi....Makefile.in Message-Id: <20080501060949.2664358C4C15@chook.melbourne.sgi.com> Date: Thu, 1 May 2008 16:09:49 +1000 (EST) From: tes@sgi.com (Tim Shimmin) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15726 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs regenerate dmapi Makefile in using automake Date: Thu May 1 16:07:18 AEST 2008 Workarea: emu.melbourne.sgi.com:/home/tes/isms/xfs-cmds Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:31014a xfstests/dmapi/aclocal.m4 - 1.7 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/dmapi/aclocal.m4.diff?r1=text&tr1=1.7&r2=text&tr2=1.6&f=h - regenerate using aclocal xfstests/dmapi/src/suite1/cmd/Makefile.in - 1.9 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/dmapi/src/suite1/Makefile.in.diff?r1=text&tr1=1.9&r2=text&tr2=1.8&f=h - regenerate using automake