--- trunk/DBI.pm 2004/11/23 23:54:58 47 +++ trunk/DBI.pm 2004/11/27 14:02:18 51 @@ -132,6 +132,11 @@ print Dumper($arg); + unless ($self->fuse_module_loaded) { + print STDERR "no fuse module loaded. Trying sudo modprobe fuse!\n"; + system "sudo modprobe fuse" || die "can't modprobe fuse using sudo!\n"; + } + carp "mount needs 'dsn' to connect to (e.g. dsn => 'DBI:Pg:dbname=test')" unless ($arg->{'dsn'}); carp "mount needs 'mount' as mountpoint" unless ($arg->{'mount'}); @@ -242,7 +247,9 @@ my $self = shift; if ($self->{'mount'} && $self->is_mounted) { - system "fusermount -u ".$self->{'mount'}." 2>&1 >/dev/null" || return 0; + system "fusermount -u ".$self->{'mount'}." 2>&1 >/dev/null" || + system "sudo umount ".$self->{'mount'} || + return 0; return 1; } @@ -290,7 +297,6 @@ } my %files; -my %dirs; sub read_filenames { my $self = shift; @@ -330,7 +336,6 @@ # first, entry is assumed to be file if ($d) { $files{$d} = { - size => $dirs{$d}++, mode => 0755, type => 0040 }; @@ -348,7 +353,7 @@ } } - print "found ",scalar(keys %files)-scalar(keys %dirs)," files, ",scalar(keys %dirs), " dirs\n"; + print "found ",scalar(keys %files)," files\n"; } @@ -364,8 +369,8 @@ $file =~ s,^/,,; $file = '.' unless length($file); return -ENOENT() unless exists($files{$file}); - my ($size) = $files{$file}{size} || 1; - my ($dev, $ino, $rdev, $blocks, $gid, $uid, $nlink, $blksize) = (0,0,0,1,0,0,1,1024); + my ($size) = $files{$file}{size} || 1024; + my ($dev, $ino, $rdev, $blocks, $gid, $uid, $nlink, $blksize) = (0,0,0,int(($size+1023)/1024),0,0,1,1024); my ($atime, $ctime, $mtime); $atime = $ctime = $mtime = $files{$file}{ctime} || $ctime_start; @@ -373,7 +378,7 @@ # 2 possible types of return values: #return -ENOENT(); # or any other error you care to - #print(join(",",($dev,$ino,$modes,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks)),"\n"); + print "getattr($file) ",join(",",($dev,$ino,$modes,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks)),"\n"; return ($dev,$ino,$modes,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks); } @@ -538,17 +543,37 @@ return 0; } -sub e_statfs { return 255, 1, 1, 1, 1, 2 } +sub e_statfs { + + my $size = 0; + my $inodes = 0; + + foreach my $f (keys %files) { + if ($f !~ /(^|\/)\.\.?$/) { + $size += $files{$f}{size} || 0; + $inodes++; + } + print "$inodes: $f [$size]\n"; + } + + $size = int(($size+1023)/1024); + + my @ret = (255, $inodes+1000, $inodes, $size, $size-10, 1024); + + print "statfs: ",join(",",@ret),"\n"; + + return @ret; +} sub e_unlink { my $file = filename_fixup(shift); - if (exists( $dirs{$file} )) { - print "unlink '$file' will re-read template names\n"; - print Dumper($fuse_self); - $$fuse_self->{'read_filenames'}->(); - return 0; - } elsif (exists( $files{$file} )) { +# if (exists( $dirs{$file} )) { +# print "unlink '$file' will re-read template names\n"; +# print Dumper($fuse_self); +# $$fuse_self->{'read_filenames'}->(); +# return 0; + if (exists( $files{$file} )) { print "unlink '$file' will invalidate cache\n"; read_content($file,$files{$file}{id}); return 0;