On Thursday, 9 November 2006 17:46, Luca wrote: > Il Thu, Nov 09, 2006 at 12:38:51AM +0100, Rafael J. Wysocki ha scritto: > > On Thursday, 9 November 2006 00:32, Luca Tettamanti wrote: > > > On 11/8/06, Rafael J. Wysocki <[EMAIL PROTECTED]> wrote: > > > > Hi, > > > > > > > > On Wednesday, 8 November 2006 18:58, Luca wrote: > > > > > I've been working on a small program to find the first valid block of > > > > > a > > > > > swapfile. If I understand it correctly we need the first contiguos > > > > > cluster > > > > > of blocks (not counting the header) which is at least PAGE_SIZE big > > > > > and > > > > > the starting block must be page aligned. > > > > > The block number must then be converted in an offset from the start of > > > > > the device and the number must be expressed in multiple of PAGE_SIZE. > > > > > > > > > > This is what I've come up with ;) > > > > > > > > It doesn't look bad, but you shouldn't skip the header, actually. The > > > > header > > > > is what we need. ;-) > > > > > > Oh, right.. you print the offset of page_no == 0. Hum, I think I don't > > > understand the layout of a swapfile then; reading swapfile.c I see > > > that even the header should be a PAGE_SIZE continuous block, but I > > > have test cases where the header is not contiguous on disk (ext2, > > > 1024b per block, with artificial fragmentation) - which is why I > > > thought that first-page-after-header was needed. > > > > Ouch, that's bad. The swsusp (and ours) swap-writing code will corrupt > > the filesystem in such a case, because it assumes the header to be > > continuous. > > > > I think we have to understand your test cases at this point. Can you please > > post some numbers? > > Ok, ext2 FS, created with 'mke2fs -I 1024', mounted with loop device. > I've created a fragmented swapfile like this: > > dd if=/dev/zero of=swapfile bs=1k count=1 > dd if=/dev/zero of=frag bs=1k count=2 > dd if=/dev/zero of=swapfile oflag=append conv=notrunc bs=1M count=10 > > debugfs: stat /swapfile > Inode: 12 Type: regular Mode: 0644 Flags: 0x0 Generation: > 1271405748 > User: 0 Group: 0 Size: 10485760 > File ACL: 0 Directory ACL: 0 > Links: 1 Blockcount: 20562 > Fragment: Address: 0 Number: 0 Size: 0 > ctime: 0x45535207 -- Thu Nov 9 17:06:31 2006 > atime: 0x45535217 -- Thu Nov 9 17:06:47 2006 > mtime: 0x45535207 -- Thu Nov 9 17:06:31 2006 > BLOCKS: > (0):1998, (1-11):2001-2011, (IND):2012, (12-267):2013-2268, (DIND):2269, > (IND):2270, (268-523):2271-2526, (IND):2527...etc > > The signature should in the first page (at PAGE_SIZE - 10), but in my > case I see the signature exactly at offset (4096 - 10) > > 0000ff0: 0000 0000 0000 5357 4150 5350 4143 4532 ......SWAPSPACE2 > > even if the first 4 blocks are not contiguous (block 1998 is not even > aligned to PAGE_SIZE!). > > The loop device may be have a bad influence on the test case, I don't > have a FS with blocksize < 4096.
Okay, thanks. I think that the swap header need not be continuous. This actually also follows from the sys_swapon() code which reads one page from the file using its mapping. It looks like setup_swap_extents() omits the first continuous PAGE_SIZE "block" just in case it contains the header, but the swap-handling will work even if it doesn't. However, in case this happens, swsusp and s2disk/s2both won't be able to use the swap file for the suspend, because swap_type_of() will fail. Now if that really is what happens (could you please verify with your setup?), it would be nice if your program detected such situations and informed the user that the swap file could not be used. Greetings, Rafael -- You never change things by fighting the existing reality. R. Buckminster Fuller ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ Suspend-devel mailing list Suspend-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/suspend-devel