STATUS_DISK_FULL being returned - when it's not...

I am using my filter driver to intercept deletes and move (rename) them to
another directory. The original directory is f:\test and the destination
directory is f:\del. So, for example, if I delete f:\test\foo.txt it ends
up as f:\del\foo.txt.00000001 ( i add a tag at the end of the file for
tracking reasons).

I have a stress test in which I put 66,000 files in the f:\test folder and
then delete them (deleting directly - not going to the recycle bin, not
passing ‘go’ and collecting $200.00). Note: this is on a FAT32 drive. I
get the same type of problem on an NTFS volume.

BUT, after about 20K files I start to get errors when creating the
IoCreateFile(…) to get the target directory. The error that’s returned
is STATUS_DISK_FULL. However I know that the disk has plenty of disk space
on it.

If I run the same test without my driver (just deleting files directly)
things work fine.

Any suggestions as to what I may be seeing?


You are currently subscribed to ntfsd as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntfsd-$subst(‘Recip.MemberIDChar’)@lists.osr.com

If you have the IFS kit, you can build a copy of the FAT File system and
debug the problem yourself.

Mark J. Cariddi
Consulting Associate
Open Systems Resources, Inc.
http:\www.osr.com
-----Original Message-----
From: xxxxx@earthlink.net [mailto:xxxxx@earthlink.net]
Sent: Wednesday, January 24, 2001 5:22 AM
To: File Systems Developers
Subject: [ntfsd] STATUS_DISK_FULL being returned - when it’s not…

I am using my filter driver to intercept deletes and move (rename) them to
another directory. The original directory is f:\test and the destination
directory is f:\del. So, for example, if I delete f:\test\foo.txt it ends
up as f:\del\foo.txt.00000001 ( i add a tag at the end of the file for
tracking reasons).

I have a stress test in which I put 66,000 files in the f:\test folder and
then delete them (deleting directly - not going to the recycle bin, not
passing ‘go’ and collecting $200.00). Note: this is on a FAT32 drive. I
get the same type of problem on an NTFS volume.

BUT, after about 20K files I start to get errors when creating the
IoCreateFile(…) to get the target directory. The error that’s returned
is STATUS_DISK_FULL. However I know that the disk has plenty of disk space
on it.

If I run the same test without my driver (just deleting files directly)
things work fine.

Any suggestions as to what I may be seeing?


You are currently subscribed to ntfsd as: xxxxx@osr.com
To unsubscribe send a blank email to leave-ntfsd-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntfsd as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntfsd-$subst(‘Recip.MemberIDChar’)@lists.osr.com

A quick grep through the FastFat source code shows the most likely cause is
that you are exceeding the 64,000 directory entry maximum for the file
system. Here is the section, the comments are revealing:

//
// A reason why we might fail, unrelated to physical reasons,
// is that we constrain to 64k directory entries to match the
// restriction on Win95. There are fundamental reasons to do
// this since searching a FAT directory is a linear operation
// and to allow FAT32 to toss us over the cliff is not
permissable.
//

if ((FatIsFat32(ParentDirectory->Vcb) &&
ParentDirectory->Header.AllocationSize.LowPart >= (64 *
1024 * sizeof(DIRENT))) ||

//
// Make sure we are not trying to expand the root directory
on non
// FAT32. FAT16 and FAT12 have fixed size allocations.
//

(!FatIsFat32(ParentDirectory->Vcb) &&
NodeType(ParentDirectory) == FAT_NTC_ROOT_DCB)) {

DebugTrace(0, Dbg, “Full root directory or too big on FAT32.
Raise Status.\n”, 0);

FatRaiseStatus( IrpContext, STATUS_DISK_FULL );
}

There are only a handlful of other places where fat returns disk full.
Perhaps, if you have the ifs kit, you could build the fsd and set a break
point on each of these.

-----Original Message-----
From: xxxxx@earthlink.net [mailto:xxxxx@earthlink.net]
Sent: Wednesday, January 24, 2001 5:22 AM
To: File Systems Developers
Subject: [ntfsd] STATUS_DISK_FULL being returned - when it’s not…

I am using my filter driver to intercept deletes and move (rename) them to
another directory. The original directory is f:\test and the destination
directory is f:\del. So, for example, if I delete f:\test\foo.txt it ends
up as f:\del\foo.txt.00000001 ( i add a tag at the end of the file for
tracking reasons).

I have a stress test in which I put 66,000 files in the f:\test folder and
then delete them (deleting directly - not going to the recycle bin, not
passing ‘go’ and collecting $200.00). Note: this is on a FAT32 drive. I
get the same type of problem on an NTFS volume.

BUT, after about 20K files I start to get errors when creating the
IoCreateFile(…) to get the target directory. The error that’s returned
is STATUS_DISK_FULL. However I know that the disk has plenty of disk space
on it.

If I run the same test without my driver (just deleting files directly)
things work fine.

Any suggestions as to what I may be seeing?


You are currently subscribed to ntfsd as: xxxxx@ntpsoftware.com
To unsubscribe send a blank email to leave-ntfsd-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntfsd as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntfsd-$subst(‘Recip.MemberIDChar’)@lists.osr.com

FAT32 limits directory size to 65,536 directory entries.

Non-8.3 filenames like foo.txt.00000001 take multiple directory entries
to express; one 8.3 shortname, and however many it takes to describe the
longname at 13 characters per. This form would require 2 LFN, for 3
total, and thats where your ~20,000 comes from (its more like 21,845 if
all the files have the same name length).

-----Original Message-----
From: xxxxx@earthlink.net [mailto:xxxxx@earthlink.net]
Sent: Wednesday, January 24, 2001 2:22 AM
To: File Systems Developers
Subject: [ntfsd] STATUS_DISK_FULL being returned - when it’s not…

I am using my filter driver to intercept deletes and move (rename) them
to
another directory. The original directory is f:\test and the
destination
directory is f:\del. So, for example, if I delete f:\test\foo.txt it
ends
up as f:\del\foo.txt.00000001 ( i add a tag at the end of the file for
tracking reasons).

I have a stress test in which I put 66,000 files in the f:\test folder
and
then delete them (deleting directly - not going to the recycle bin, not
passing ‘go’ and collecting $200.00). Note: this is on a FAT32 drive.
I
get the same type of problem on an NTFS volume.

BUT, after about 20K files I start to get errors when creating the
IoCreateFile(…) to get the target directory. The error that’s
returned
is STATUS_DISK_FULL. However I know that the disk has plenty of disk
space
on it.

If I run the same test without my driver (just deleting files directly)
things work fine.

Any suggestions as to what I may be seeing?


You are currently subscribed to ntfsd as: xxxxx@exchange.microsoft.com
To unsubscribe send a blank email to leave-ntfsd-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntfsd as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntfsd-$subst(‘Recip.MemberIDChar’)@lists.osr.com