Sorry, got it the wrong way around :-(
Hello everybody!
As I wrote in my mail the previous week ("BUG: 2.4.19pre1 & journal_thread
& open filehandles") I followed the problem a little bit further.
Here's my patch; I beg the ext3-maintainers (Stephen, Andreas, Andrew) to
have a look at it and submit it to Marcelo and Linux for inclusion.
(2.4 is for now for me more important than 2.5).
Patch
-----
On every mount of ext3 (and I suppose all journaling filesystems which use
jbd, although I didn't test this) a new kjournald is created. All kjournald
share the same file-information.
Before this patch it would accumulativly fetch open files from the calling
process (normally mount); I verified this via (in bash)
exec 30< /etc/services
mount <partition> /mnt/tmp
ps -aux | grep kjournald
ls -la <pid of any kjournald>
gives, among 0, 1 and 2
30 -> /etc/services
This is really awful as you can't umount devfs (normally /dev/console is
opened as from the start-scripts) and so / can't be umounted.
After applying this patch the open files were gone.
Please apply this patch ASAP - thank you very much.
Regards,
Phil
diff -ru linux/fs/jbd/journal.c linux.ori/fs/jbd/journal.c
--- linux.ori/fs/jbd/journal.c Mon Apr 22 06:28:54 2002
+++ linux/fs/jbd/journal.c Mon Apr 22 06:29:16 2002
@@ -204,7 +204,6 @@
lock_kernel();
daemonize();
+ exit_files(current);
spin_lock_irq(¤t->sigmask_lock);
sigfillset(¤t->blocked);
recalc_sigpending(current);
"Ph. Marek" wrote:
>
> ...
> --- linux.ori/fs/jbd/journal.c Mon Apr 22 06:28:54 2002
> +++ linux/fs/jbd/journal.c Mon Apr 22 06:29:16 2002
> @@ -204,7 +204,6 @@
>
> lock_kernel();
> daemonize();
> + exit_files(current);
> spin_lock_irq(¤t->sigmask_lock);
> sigfillset(¤t->blocked);
> recalc_sigpending(current);
Confused. The daemonize() call makes kjournald use init's
files:
quad:/home/akpm# uname -a
Linux quad 2.4.19-pre7 #18 SMP Sun Apr 21 22:42:31 PDT 2002 i686 unknown
quad:/home/akpm# mount /dev/sdb6 /mnt/sdb6 -t ext3 < /etc/services
quad:/home/akpm# ps aux|tail -3
root 903 0.0 0.0 0 0 ? SW 22:45 0:00 [kjournald]
root 904 0.0 0.0 2640 728 pts/0 R 22:45 0:00 ps aux
root 905 0.0 0.0 1680 528 pts/0 S 22:45 0:00 tail -3
quad:/home/akpm# ls -l /proc/903/fd
total 0
lrwx------ 1 root root 64 Apr 21 22:46 0 -> socket:[479]
lrwx------ 1 root root 64 Apr 21 22:46 10 -> /dev/initctl
That all looks good - every /proc/$(pidof kjournald)/fd
shows that the kjournald instances are using init's files.
Which kernel are you using? Have you any theories as to why you're
seeing different behaviour?
-