delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2006/08/16/14:43:38

X-Spam-Check-By: sourceware.org
Subject: 1.5.19 src/winsup/cygwin/mmap.cc msync() still calling getpagesize rather than getsystempagesize
MIME-Version: 1.0
Date: Wed, 16 Aug 2006 11:43:11 -0700
Message-ID: <59761B4D8BAF8248BB4F5BD53568EA1E311E21@MAGIC.trusteddata.local>
From: "Donna Jecha" <djecha AT trusteddata DOT com>
To: <cygwin AT cygwin DOT com>
X-IsSubscribed: yes
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id k7GIhYbr017467

In the function msync in the file src/winsup/cygwin/mmap.cc, the declaration for pagesize goes out of its way to invoke either getsystempagesize -or- getpagesize():


1366    size_t pagesize = wincap.has_mmap_alignment_bug () ?
1367                      getsystempagesize () : getpagesize ();


Later in this same function, however, only getpagesize() is called:


1393 for (DWORD i = getpagesize (); i < len; i += getpagesize ())


Shouldn't the getpagesize invocation at line 1383 also be conditional as to which gets called as is done on line 1367???

fsx is a file system exerciser program.  It has proven to be a good test case for finding corruption problems.  The fsx program works on cygwin 1.5.18, but not on cygwin 1.5.19.  On cygwin 1.5.19, msync always returns a status of -1 and sets errno to ENOMEM.  Here's the code snippet:

673          pg_offset = offset & page_mask;
 674          map_size  = pg_offset + size;
 675
 676          if ((p = (char *)mmap(0, map_size, PROT_READ | PROT_WRITE,
 677                                MAP_FILE | MAP_SHARED, fd,
 678                                (off_t)(offset - pg_offset))) == (char *)-1) {
 679                  prterr("domapwrite: mmap");
 680                  report_failure(202);
 681          }
 682          memcpy(p + pg_offset, good_buf + offset, size);  // status of memcpy is not checked ... yet
 683          if (msync(p, map_size, 0) != 0) {
 684                  prterr("domapwrite: msync");
 685                  report_failure(203);
 686          }
 687
 688          check_eofpage("Write", offset, p, size);
 689
 690          if (munmap(p, map_size) != 0) {
 691                  prterr("domapwrite: munmap");
 692                  report_failure(204);
 693          }


$ uname -a
CYGWIN_NT-5.1 test2vk 1.5.19(0.150/4/2) 2006-01-20 13:28 i686 Cygwin

test AT test2vk ~
$ which fsx
/cygdrive/c/bin/fsx

test AT test2vk ~
$ fsx testfile
skipping zero size read
skipping zero size read
truncating to largest ever: 0xa64
domapwrite: msync: Cannot allocate memory
LOG DUMP (6 total operations):
1(1 mod 256): SKIPPED (no operation)
2(2 mod 256): SKIPPED (no operation)
3(3 mod 256): TRUNCATE UP       from 0x0 to 0xa64
4(4 mod 256): WRITE     0x11833 thru 0x144de    (0x2cac bytes) HOLE
5(5 mod 256): MAPWRITE 0x1dfcb thru 0x1fd98     (0x1dce bytes)
6(6 mod 256): MAPWRITE 0xc8b1 thru 0x1056e      (0x3cbe bytes)
Correct content saved for comparison
(maybe hexdump "testfile" vs "testfile.fsxgood")

test AT test2vk ~
$

The amount of memory in the test machine seems to have no relevance, because it fails on all machines running cygwin 1.5.19 (One had 256MB of RAM, one had 512MB of RAM, one had 1.2GB of RAM).  All failed quickly as above.

As requested, the output of the cygcheck -s -v -r command is attached.

Information about a similar problem reported:
*  Subject: mmap msync does not sync!!! 
*  From: "Brian Michael Genisio" <genisiob at pilot dot msu dot edu> 
*  Date: Wed, 20 Jun 2001 09:16:32 -0400 (EDT)

Sincerely,
D. Jecha



Donna K. Jecha
Test Engineer
Trusted Data Corporation
1881 Landings Drive
Landmark Business Complex, Building F
Mountain View, CA 94043-0848
http://www.trusteddata.com
Work:  (650) 691 2145

 



--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019