201015_09
authorhgs
Fri, 23 Apr 2010 22:14:19 +0100
changeset 122 70ba09fd07a5
parent 121 661475905584
child 123 fc55edbf3919
201015_09
kernel/eka/include/e32ver.h
kernel/eka/release.txt
kerneltest/e32test/mmu/t_shadow.cpp
kerneltest/f32test/server/t_fsys.cpp
userlibandfileserver/fileserver/group/release.txt
userlibandfileserver/fileserver/inc/f32ver.h
--- a/kernel/eka/include/e32ver.h	Fri Apr 23 22:08:41 2010 +0100
+++ b/kernel/eka/include/e32ver.h	Fri Apr 23 22:14:19 2010 +0100
@@ -28,7 +28,7 @@
 
 const TInt KE32MajorVersionNumber=2;
 const TInt KE32MinorVersionNumber=0;
-const TInt KE32BuildVersionNumber=3063;
+const TInt KE32BuildVersionNumber=3064;
 
 const TInt KMachineConfigurationMajorVersionNumber=1;
 const TInt KMachineConfigurationMinorVersionNumber=0;
--- a/kernel/eka/release.txt	Fri Apr 23 22:08:41 2010 +0100
+++ b/kernel/eka/release.txt	Fri Apr 23 22:14:19 2010 +0100
@@ -1,3 +1,11 @@
+Version 2.00.3064
+=================
+(Made by vfebvre 14/04/2010)
+
+1.	jcoppear
+	1.	PDEF144022: T_SHADOW failing test that ROM is section mapped (t_shadow.cpp:360)
+
+
 Version 2.00.3063
 =================
 (Made by vfebvre 13/04/2010)
--- a/kerneltest/e32test/mmu/t_shadow.cpp	Fri Apr 23 22:08:41 2010 +0100
+++ b/kerneltest/e32test/mmu/t_shadow.cpp	Fri Apr 23 22:14:19 2010 +0100
@@ -338,6 +338,9 @@
 const TUint KChunkShift = 20;
 const TUint KChunkSize = 1 << KChunkShift;
 
+const TUint KRomSizeAlign = 16;  // This should match CFG_RomSizeAlign defined in bootcpu.inc
+const TUint KRomSizeAlignMask = (1 << KRomSizeAlign) - 1;
+
 void TestRomIsSectionMapped()
 	{
 	test.Start(_L("Test ROM is section mapped"));
@@ -350,13 +353,24 @@
 	test_KErrNone(Shadow.GetPdInfo(KGlobalPageDirectory, pdSize, pdBase, offset));
 	test.Printf(_L("pd base == %08x, pd size == %08x, pd offset == %08x\n"), pdBase, pdSize, offset);
 
-	for (TLinAddr addr = RomUnpagedStart ; addr <= RomUnpagedEnd ; addr += KChunkSize)
+	TUint romSize = RomUnpagedEnd - RomUnpagedStart;	
+	test.Printf(_L("rom size == %x\n"), romSize);
+	if (RomPagedStart == RomPagedEnd)
 		{
+		// If rom is not paged then we must round the ROM size up to a mutiple of 64KB (or whatever
+		// the CFG_RomSizeAlign settings is), because that's how the bootstrap maps it
+		romSize = (romSize + KRomSizeAlignMask) & ~KRomSizeAlignMask;
+		test.Printf(_L("rom size rounded up to %x\n"), romSize);
+		}
+	
+	for (TUint pos = 0 ; pos < romSize ; pos += KChunkSize)
+		{
+		TLinAddr addr = RomUnpagedStart + pos;
 		TUint i = (addr >> KChunkShift) - offset;
 		TUint pde = Shadow.Read(pdBase + i*4);
 		test.Printf(_L("  %08x: PDE %08x\n"), addr, pde);
 
-		TUint expectedPdeType = (RomUnpagedEnd - addr) >= KChunkSize ? 2 : 1;
+		TUint expectedPdeType = (romSize - pos) >= KChunkSize ? 2 : 1;
 		test_Equal(expectedPdeType, pde & 3);
 		}
 #else
--- a/kerneltest/f32test/server/t_fsys.cpp	Fri Apr 23 22:08:41 2010 +0100
+++ b/kerneltest/f32test/server/t_fsys.cpp	Fri Apr 23 22:14:19 2010 +0100
@@ -36,10 +36,10 @@
     for(TInt i=EDriveA;i<KMaxDrives;++i)
         {
         r=TheFs.FileSystemName(name,i);
-        test(r==KErrNone || r==KErrNotFound);
+        test_Value(r, r == KErrNone || r==KErrNotFound);
         TChar c;
         r=RFs::DriveToChar(i,c);
-        test(r==KErrNone);
+        test_KErrNone(r);
         if(name.Length())       
             test.Printf(_L("File System Name on drive %c is %S\n"),(char)c,&name);
         else
@@ -55,10 +55,10 @@
     TInt r;
     TFullName oldSess, newSess;
     r=TheFs.SessionPath(oldSess);
-    test(r==KErrNone);
+    test_KErrNone(r);
     TChar c;
     r=TheFs.DriveToChar(aDrive,c);
-    test(r==KErrNone);
+    test_KErrNone(r);
     newSess.Append(c);
     newSess.Append(':');
     newSess.Append('\\');
@@ -66,7 +66,7 @@
     TBuf<128> b;
     TDriveInfo di;
     r=TheFs.Drive(di,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     b.Format(_L("Test dismounting of test file system on %c: (DrvAtt:%x MedAtt:%x)"),(TUint)c,di.iDriveAtt,di.iMediaAtt);
     test.Next(b);
     
@@ -74,36 +74,36 @@
     test.Next(_L("Test cannot dismount on Rom drive"));
     TFullName zName;
     r=TheFs.FileSystemName(zName,EDriveZ);
-    test(r==KErrNone);
+    test_KErrNone(r);
     r=TheFs.DismountFileSystem(zName,EDriveZ);
     test.Printf(_L("r=%d"),r);
     // NB if paging is enabled on a ROFS partition which is part of the composite file system then the 
     // likelihood is that there will be a at least one file clamped: in this case there error will be KErrInUse
-    test(r==KErrAccessDenied || r==KErrInUse);
+    test_Value(r, r == KErrAccessDenied || r==KErrInUse);
 
     // Test cannot dismount on wrong drive
     test.Next(_L("Test cannot dismount on wrong drive"));
     r=TheFs.DismountFileSystem(aFs,EDriveA);
-    test(r==KErrNotReady);
+    test_Value(r, r == KErrNotReady);
 
     // Test cannot dismount with wrong name
     test.Next(_L("Test cannot dismount with wrong file system name"));
     r=TheFs.DismountFileSystem(_L("abc"),aDrive);
-    test(r==KErrNotFound);
+    test_Value(r, r == KErrNotFound);
  
     // Test cannot dismount with a file open
     test.Next(_L("Test cannot dismount with a file open"));
     r=TheFs.SetSessionPath(newSess);
     RFile file;
     r=file.Replace(TheFs,_L("abc"),EFileShareAny);
-    test(r==KErrNone);
+    test_KErrNone(r);
     r=TheFs.SessionPath(newSess);
     TBool open;
     r=TheFs.IsFileOpen(_L("abc"),open);
-    test(r==KErrNone);
+    test_KErrNone(r);
     test(open);
     r=TheFs.DismountFileSystem(aFs,aDrive);
-    test(r==KErrInUse);
+    test_Value(r, r == KErrInUse);
     file.Close();
 
     // Now test dismount works
@@ -116,10 +116,10 @@
         }
     TFullName n;
     r=TheFs.FileSystemName(n,aDrive);
-    test(r==KErrNone || r==KErrNotFound);
+    test_Value(r, r == KErrNone || r==KErrNotFound);
     test(!n.Length());
     r=file.Replace(TheFs,_L("abc"),EFileShareAny);
-    test(r==KErrNotReady);
+    test_Value(r, r == KErrNotReady);
     file.Close();
 
     r=TheFs.MountFileSystem(aFs,aDrive);
@@ -129,13 +129,13 @@
         test(EFalse);
         }
     r=TheFs.FileSystemName(n,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     test(n.Compare(aFs)==0);
     r=file.Replace(TheFs,_L("abc"),EFileShareAny); // ??? bang
-    test(r==KErrNone);
+    test_KErrNone(r);
     file.Close();
     r=TheFs.SetSessionPath(oldSess);
-    test(r==KErrNone);
+    test_KErrNone(r);
     }
 
 static void TestDismountFileSystem(TInt aDrive)
@@ -144,7 +144,7 @@
     TInt r;
     TFullName name;
     r=TheFs.FileSystemName(name,aDrive);
-    test(r==KErrNone || r==KErrNotFound);
+    test_Value(r, r == KErrNone || r==KErrNotFound);
     if(name.Length())
         CheckDismount(name,aDrive);
     }
@@ -158,10 +158,10 @@
     TBuf<64> b;
     TChar c;
     TInt r=TheFs.DriveToChar(aDrive,c);
-    test(r==KErrNone);
+    test_KErrNone(r);
     TDriveInfo di;
     r=TheFs.Drive(di,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     b.Format(_L("Test mounting of test file system on %c: (DrvAtt:%x MedAtt:%x)"),(TUint)c,di.iDriveAtt,di.iMediaAtt);
     test.Next(b);
 
@@ -177,7 +177,7 @@
     r=TheFs.FileSystemName(oldFs,aDrive);
 //  TFileName oldFs;
 //  r=TheFs.FileSystemName(oldFs,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     r=TheFs.DismountFileSystem(oldFs,aDrive);
     if(r!=KErrNone)
         {
@@ -185,17 +185,17 @@
         test(EFalse);
         }
     r=TheFs.MountFileSystem(_L("Test"),aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
 
     TFileName newFs;
     r=TheFs.FileSystemName(newFs,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     test(newFs.Compare(_L("Test"))==0);
 
     // Check attributes
     TDriveInfo info;
     r=TheFs.Drive(info,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
  
     test.Printf(_L("iType=%d,iConnectionBusType=%d,iDriveAtt=%x,iMediaAtt=%x\n"),(TUint)info.iType,\
         (TUint)info.iConnectionBusType,info.iDriveAtt,info.iMediaAtt);
@@ -208,14 +208,14 @@
         test(EFalse);
         }
     r=TheFs.FileSystemName(newFs,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     test(newFs.Compare(_L("Test"))==0);
 
     r=TheFs.DismountFileSystem(newFs,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
 
     r=TheFs.MountFileSystem(oldFs,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     }
 #endif
 
@@ -236,10 +236,10 @@
 
     r = TheFs.AddFileSystem(KFsNm);
     test.Printf(_L("afs: r = %d\n"), r);
-    test(r == KErrNone || r == KErrAlreadyExists);
+    test_Value(r, r == KErrNone || r == KErrAlreadyExists);
     test.Next(_L("mounting FAT on drive R"));
     r = TheFs.MountFileSystem(KFileSystemName_FAT, EDriveR);
-    test(r == KErrArgument);
+    test_Value(r, r == KErrArgument);
     
     test.End();
     }
@@ -256,10 +256,10 @@
     TBuf<64> b;
     TChar c;
     TInt r=TheFs.DriveToChar(aDrive,c);
-    test(r==KErrNone);
+    test_KErrNone(r);
     TDriveInfo di;
     r=TheFs.Drive(di,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     b.Format(_L("Test mounting of test file system on %c: (DrvAtt:%x MedAtt:%x)"),(TUint)c,di.iDriveAtt,di.iMediaAtt);
     test.Next(b);
 
@@ -273,7 +273,7 @@
 
     TFullName oldFs;
     r=TheFs.FileSystemName(oldFs,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     r=TheFs.DismountFileSystem(oldFs,aDrive);
     if(r!=KErrNone)
         {
@@ -281,11 +281,11 @@
         test(EFalse);
         }
     r=TheFs.MountFileSystem(_L("Test2"),aDrive);
-    test(r == KErrCorrupt);
+    test_Value(r, r == KErrCorrupt);
 
     TFileName newFs;
     r=TheFs.FileSystemName(newFs,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     test(newFs.Compare(_L("Test2"))==0);
 
     // Get the number of remounts by checking the volume attributes -
@@ -293,7 +293,7 @@
     TDriveInfo info;
     TInt remounts;
     r=TheFs.Drive(info,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     test.Printf(_L("iType=%d,iBattery=%d,iDriveAtt=%x,iMediaAtt=%x\n"),(TUint)info.iType,\
         (TUint)info.iBattery,info.iDriveAtt,info.iMediaAtt);
     remounts = (TInt) info.iBattery;
@@ -309,10 +309,10 @@
         TEntry entry;
         _LIT(KNonExistantFilename, "NONEXISTANT_FILENAME.DLL");
         r = TheFs.Entry(KNonExistantFilename, entry);
-        test(r == KErrCorrupt);
+        test_Value(r, r == KErrCorrupt);
         }
     r=TheFs.Drive(info,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     test.Printf(_L("iType=%d,iBattery=%d,iDriveAtt=%x,iMediaAtt=%x\n"),(TUint)info.iType,\
         (TUint)info.iBattery,info.iDriveAtt,info.iMediaAtt);
     remounts = (TInt) info.iBattery;
@@ -328,10 +328,10 @@
         TEntry entry;
         _LIT(KNonExistantFilename, "NONEXISTANT_FILENAME.DLL");
         r = TheFs.Entry(KNonExistantFilename, entry);
-        test(r == KErrCorrupt);
+        test_Value(r, r == KErrCorrupt);
         }
     r=TheFs.Drive(info,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     test.Printf(_L("iType=%d,iBattery=%d,iDriveAtt=%x,iMediaAtt=%x\n"),(TUint)info.iType,\
         (TUint)info.iBattery,info.iDriveAtt,info.iMediaAtt);
     remounts = (TInt) info.iBattery;
@@ -341,9 +341,9 @@
 
 
     r=TheFs.DismountFileSystem(newFs,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     r=TheFs.MountFileSystem(oldFs,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     
     r=TheFs.RemoveFileSystem(_L("Test2"));
     if(r!=KErrNone)
@@ -366,7 +366,7 @@
     
     TDriveInfo drvInfo;
     nRes=TheFs.Drive(drvInfo, currDrvNum);
-    test(nRes==KErrNone);
+    test_KErrNone(nRes);
 
     if(drvInfo.iDriveAtt & (KDriveAttRom | KDriveAttRedirected | KDriveAttSubsted))
     {
@@ -385,7 +385,7 @@
             {
             // found a non-extant drive, test it...
             nRes = TheFs.GetMediaSerialNumber(serNum, drvNum);
-            test(nRes == KErrNotReady);
+            test_Value(nRes, nRes == KErrNotReady);
             break;
             }
         }
@@ -406,15 +406,15 @@
     MakeDir(substPath);
   
     nRes = TheFs.SetSubst(substPath, KSubstDrv);
-    test(nRes == KErrNone);
+    test_KErrNone(nRes);
 
     //-- an attempt to obtain Media Serial Number on a substed drive shall result in KErrNotSupported
     nRes = TheFs.GetMediaSerialNumber(serNum, KSubstDrv);
-    test(nRes == KErrNotSupported);
+    test_Value(nRes, nRes == KErrNotSupported);
 
     //-- delete substed drive
     nRes = TheFs.SetSubst(_L(""), KSubstDrv);
-    test(nRes == KErrNone);
+    test_KErrNone(nRes);
 }
 
 
@@ -453,19 +453,19 @@
             {
             test.Printf(_L("Tested on drive: %c.\n"), (char)(i+'A'));
             r=TheFs.Drive(driveInfo, i);
-            test(r==KErrNone);
+            test_KErrNone(r);
             
             if (driveInfo.iType==EMediaNotPresent)
                 {
                 test.Printf(_L("The media is not present.\n"));
                 r = TheFs.QueryVolumeInfoExt(i, EFileSystemSubType, subName);
-                test(r == KErrNone || r == KErrNotReady);
+                test_Value(r, r == KErrNone || r == KErrNotReady);
                 }
             else if (driveInfo.iType==EMediaCdRom)
                 {
                 test.Printf(_L("CD ROM with no media will report not ready!\n"));
                 r = TheFs.QueryVolumeInfoExt(i, EFileSystemSubType, subName);
-                test(r == KErrNotReady);
+                test_Value(r, r == KErrNotReady);
                 }
             else
                 {
@@ -474,7 +474,7 @@
 
                 //-- test EIsDriveSync command
                 r = TheFs.QueryVolumeInfoExt(i, EIsDriveSync, fDrvSyncBuf);
-                test(r == KErrNone);
+                test_KErrNone(r);
                 if(fDrvSyncBuf())
                     test.Printf(_L("The drive is Synchronous.\n"));
                 else
@@ -485,7 +485,7 @@
                 // if Fat, testing returning sub type name
                 if (fsName.CompareF(KFileSystemName_FAT)==0)
                     {
-                    test(r == KErrNone);
+                    test_KErrNone(r);
                     test(subName().CompareF(KFSSubType_FAT12)==0 ||
                          subName().CompareF(KFSSubType_FAT16)==0 ||
                          subName().CompareF(KFSSubType_FAT32)==0);
@@ -495,27 +495,27 @@
                 // if Lffs, testing returning file system name
                 if (fsName.CompareF(_L("Lffs"))==0)
                     {
-                    test(r == KErrNone);
+                    test_KErrNone(r);
                     test(subName().CompareF(_L("Lffs"))==0);
                     continue;
                     }
                 // if rofs, testing returning file system name
                 if (fsName.CompareF(_L("rofs"))==0)
                     {
-                    test(r == KErrNone);
+                    test_KErrNone(r);
                     test(subName().CompareF(_L("rofs"))==0);
                     continue;
                     }
                 // if Composite, testing returning file system name
                 if (fsName.CompareF(_L("Composite"))==0)
                     {
-                    test(r == KErrNone);
+                    test_KErrNone(r);
                     test(subName().CompareF(_L("Composite"))==0);
                     continue;
                     }
 
                 // else
-                test(r == KErrNone);
+                test_KErrNone(r);
                 test(subName().Length()!=0);
                 
                 }
@@ -554,18 +554,18 @@
             test.Printf(_L("Tested on drive: %c.\n"), (char)(i+'A'));
 
             r=TheFs.Drive(driveInfo, i);
-            test(r==KErrNone);
+            test_KErrNone(r);
             // if no media present
             if (driveInfo.iType==EMediaNotPresent)
                 {
                 r = TheFs.QueryVolumeInfoExt(i, EIOParamInfo, ioInfo);
-                test(r == KErrNone || r == KErrNotReady);
+                test_Value(r, r == KErrNone || r == KErrNotReady);
                 }
             else if (driveInfo.iType==EMediaCdRom)
                 {
                 test.Printf(_L("CD ROM with no media!\n"));
                 r = TheFs.QueryVolumeInfoExt(i, EIOParamInfo, ioInfo);
-                test(r == KErrNone || r == KErrNotReady);
+                test_Value(r, r == KErrNone || r == KErrNotReady);
                 }
             else
                 {
@@ -602,7 +602,7 @@
                         }
                         TPckg<TLocalDriveCapsV7> capsPckg(DriveCapsV7);
                         r=drive.Caps(capsPckg);
-                        test(r==KErrNone);
+                        test_KErrNone(r);
                         drive.Disconnect();
                         if(DriveCapsV7.iObjectModeSize == 0)
                         {
@@ -663,18 +663,18 @@
             {
             test.Printf(_L("Tested on drive: %c.\n"), (char)(i+'A'));
             r=TheFs.Drive(driveInfo, i);
-            test(r==KErrNone);
+            test_KErrNone(r);
             // if no media present
             if (driveInfo.iType==EMediaNotPresent)
                 {
                 r = TheFs.QueryVolumeInfoExt(i, EIOParamInfo, ioInfo);
-                test(r == KErrNone || r == KErrNotReady);
+                test_Value(r, r == KErrNone || r == KErrNotReady);
                 }
             else if (driveInfo.iType==EMediaCdRom)
                 {
                 test.Printf(_L("CD ROM with no media will report not ready!\n"));
                 r = TheFs.QueryVolumeInfoExt(i, EIOParamInfo, ioInfo);
-                test(r == KErrNotReady);
+                test_Value(r, r == KErrNotReady);
                 }
             else
                 {
@@ -725,7 +725,7 @@
                         }
                     TPckg<TLocalDriveCapsV7> capsPckg(DriveCapsV7);
                     r=drive.Caps(capsPckg);
-                    test(r==KErrNone);
+                    test_KErrNone(r);
                     if ((fsName.CompareF(_L("Lffs"))==0) && (DriveCapsV7.iObjectModeSize != 0))
                         {                   
                         test(ioInfo().iBlockSize == (TInt) DriveCapsV7.iObjectModeSize);
@@ -780,7 +780,7 @@
             test.Printf(_L("Tested on drive: %c.\n"), (char)(i+'A'));
             r = TheFs.QueryVolumeInfoExt(i, EFileSystemSubType, subName);
             r1 = TheFs.FileSystemSubType(i, subName1);
-            test(r==r1);
+            test_Value(r, r == r1);
             if (subName().Length())
                 {
                 test(subName().CompareF(subName1)==0);
@@ -822,7 +822,7 @@
             test.Printf(_L("Tested on drive: %c.\n"), (char)(i+'A'));
             r = TheFs.QueryVolumeInfoExt(i, EIOParamInfo, ioInfo);
             r1 = TheFs.VolumeIOParam(i, ioInfo1);
-            test(r==r1);
+            test_Value(r, r == r1);
             test(ioInfo().iBlockSize == ioInfo1.iBlockSize);
             test(ioInfo().iClusterSize == ioInfo1.iClusterSize);
             test(ioInfo().iRecReadBufSize == ioInfo1.iRecReadBufSize);
@@ -865,7 +865,7 @@
         }
     TFSName oldFs;
     r = TheFs.FileSystemName(oldFs,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     r = TheFs.DismountFileSystem(oldFs,aDrive);
     if (r != KErrNone)
         {
@@ -873,29 +873,29 @@
         test(EFalse);
         }
     r = TheFs.MountFileSystem(_L("Test3"),aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     TFSName newFs;
     r = TheFs.FileSystemName(newFs,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     test(newFs.Compare(_L("Test3"))==0);
 
     // Sub type name query: 
     TPckgBuf<TFSName> subNameP;
     r = TheFs.QueryVolumeInfoExt(aDrive, EFileSystemSubType, subNameP);
-    test(r==KErrNone);
+    test_KErrNone(r);
     test(subNameP() == _L("Test3SubType"));
 
     // Cluster size querys:
     TPckgBuf<TVolumeIOParamInfo> ioInfoP;
     r = TheFs.QueryVolumeInfoExt(aDrive, EIOParamInfo, ioInfoP);
-    test(r==KErrNone);
+    test_KErrNone(r);
     test(ioInfoP().iClusterSize==1024);
 
     // Mount the original file system back
     r=TheFs.DismountFileSystem(newFs,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     r=TheFs.MountFileSystem(oldFs,aDrive);
-    test(r==KErrNone);
+    test_KErrNone(r);
     
     r=TheFs.RemoveFileSystem(_L("Test3"));
     if(r!=KErrNone)
@@ -933,38 +933,57 @@
     //-- 2. open this file
     nRes = file.Open(TheFs, KFile, EFileRead);
     test_KErrNone(nRes);
+    
+    const TInt drvNumber = CurrentDrive();
 
     //-- 2.1 try to dismount the FS, it must fail because of the opened object.
     TBuf<40> fsName;
-    nRes = TheFs.FileSystemName(fsName, CurrentDrive());
+    nRes = TheFs.FileSystemName(fsName, drvNumber);
     test_KErrNone(nRes);
 
-    nRes = TheFs.DismountFileSystem(fsName, CurrentDrive());
-    test(nRes == KErrInUse);
-
+    nRes = TheFs.DismountFileSystem(fsName, drvNumber);
+    test_Value(nRes, nRes == KErrInUse);
 
+    // Flag from locmedia.h to simulate ejecting and re-inserting the media.
+    const TUint KMediaRemountForceMediaChange = 0x00000001;
+    TRequestStatus changeStatus;
+    TheFs.NotifyChange(ENotifyAll, changeStatus);
+    TDriveInfo driveInfo;
+    
     //-- 3. forcedly remount the drive
-    nRes = TheFs.RemountDrive(CurrentDrive());
+    nRes = TheFs.RemountDrive(drvNumber, NULL, KMediaRemountForceMediaChange);
+    
     if(nRes == KErrNotSupported)
-    {//-- this feature is not supported and the test is inconsistent.
+    	{//-- this feature is not supported and the test is inconsistent.
         test.Printf(_L("RemountDrive() is not supported, the test is inconsistent!"));
         
         //-- remounting must work at least on MMC drives
-        const TBool isFAT = Is_Fat(TheFs, CurrentDrive());
+        const TBool isFAT = Is_Fat(TheFs, drvNumber);
 
-        TDriveInfo  driveInfo;
-        nRes = TheFs.Drive(driveInfo, CurrentDrive());
+        nRes = TheFs.Drive(driveInfo, drvNumber);
         test_KErrNone(nRes);
 
-        test(!isFAT || (!(driveInfo.iDriveAtt & KDriveAttRemovable)));
-
-    }
+        test_Value(driveInfo.iDriveAtt, !isFAT || (!(driveInfo.iDriveAtt & KDriveAttRemovable)));
+    	}
     else
-    {
-        test_KErrNone(nRes);
-    }
-
-    User::After(500*K1mSec);
+    	{
+		test_Value(nRes, nRes == KErrNotReady || nRes == KErrNone);
+		
+		//-- 3.1 wait for media change to complete
+		do
+			{
+			// Waiting for media change...
+			User::WaitForRequest(changeStatus);
+			nRes = TheFs.Drive(driveInfo, drvNumber);
+			TheFs.NotifyChange(ENotifyAll, changeStatus);
+			}
+		while (nRes == KErrNotReady);
+		
+		test_KErrNone(nRes);
+		User::After(1000*K1mSec);	// Wait 1 sec (needed by certain platforms)
+    	}
+    
+    TheFs.NotifyChangeCancel(changeStatus);
 
     //-- 4. read this file. The FS will be remounted and the read must be OK.
     TBuf8<40> buf;
--- a/userlibandfileserver/fileserver/group/release.txt	Fri Apr 23 22:08:41 2010 +0100
+++ b/userlibandfileserver/fileserver/group/release.txt	Fri Apr 23 22:14:19 2010 +0100
@@ -1,3 +1,13 @@
+Version 2.00.3030
+=================
+(Made by vfebvre 14/04/2010)
+
+1.	famustaf
+	1.	DEF145043 F32TEST T_FSYS test failure investigation
+		Added the KMediaRemountForceMediaChange flag in the call to RemountDrive() to
+		simulate ejecting and re-inserting the media.
+
+
 Version 2.00.3029
 =================
 (Made by vfebvre 12/04/2010)
--- a/userlibandfileserver/fileserver/inc/f32ver.h	Fri Apr 23 22:08:41 2010 +0100
+++ b/userlibandfileserver/fileserver/inc/f32ver.h	Fri Apr 23 22:14:19 2010 +0100
@@ -58,6 +58,6 @@
 
 @see TVersion
 */
-const TInt KF32BuildVersionNumber=3029;
+const TInt KF32BuildVersionNumber=3030;
 //
 #endif