nfsdv4 leaks file descriptors
Subsystems (2)
Hello,
I have a linux kernel (2.6.38.2, armv5tel) running which exports a directory with following options:
/data ip/32(rw,async,crossmnt,insecure,root_squash,no_subtree_check,fsid=0)
On the client (Debian unstable, kernel 2.6.38-2-amd64) I mounted the directory under /media(nfs4import with
# mount -t nfs4 ip:/ /media/nfs4import
After a lot running fdupes on this folder the server kernel starts throwing messages like this one:
VFS: file-max limit [number] reached
After a reboot I recognised that the number of used file descriptors increases during the run of fdupes (see /proc/sys/fs/file-nr). Even after unmounting the exported filesystem on the client, unexport the file system on the server and stopping the nfs-server the file descriptors are still allocated and unmounting the filesystem is not possible.
After a little bit of research I could create a small program, which increases the used file descriptors by one.
Regards,
Gerhard
#include <stdio.h>
#define DIR "/media/nfs4import/"
int main(void) {
FILE *f1;
FILE *f2;
char b[1024];
int i;
// create file1
f1 = fopen(DIR "file1.txt", "w");
fwrite("test\n", 5, 1, f1);
close(f1);
// open file1 in read mode
f1 = fopen(DIR "file1.txt", "r");
for (i = 0; i < 1; i++) {
// open file2 in write mode and close it
f2 = fopen(DIR "file2.txt", "w");
fclose(f2);
// open file2 in read mode and close it
// this causes the leak of a file descriptor on the server
// just watch /proc/sys/fs/file-nr on the server
f2 = fopen(DIR "file2.txt", "r");
fclose(f2);
}
fclose(f1);
return 0;
}Quoted 4 lines · Gerhard Heift
Hello,
I have a linux kernel (2.6.38.2, armv5tel) running which exports a directory with following options:
Should be fixed in more recent stable kernel; let me know if not.
--b.
Quoted 59 lines
/data ip/32(rw,async,crossmnt,insecure,root_squash,no_subtree_check,fsid=0)
On the client (Debian unstable, kernel 2.6.38-2-amd64) I mounted the directory under /media(nfs4import with
# mount -t nfs4 ip:/ /media/nfs4importAfter a lot running fdupes on this folder the server kernel starts throwing messages like this one:
VFS: file-max limit [number] reached
After a reboot I recognised that the number of used file descriptors increases during the run of fdupes (see
/proc/sys/fs/file-nr). Even after unmounting the exported filesystem on the client, unexport the file system on the server and stopping the nfs-server the file descriptors are still allocated and unmounting the filesystem is not possible.After a little bit of research I could create a small program, which increases the used file descriptors by one.
Regards,
Gerhard#include <
stdio.h>#define DIR "/media/nfs4import/"
int main(void) { FILE *f1; FILE *f2; char b[1024]; int i; // create file1 f1 = fopen(DIR "file1.txt", "w"); fwrite("test\n", 5, 1, f1); close(f1); // open file1 in read mode f1 = fopen(DIR "file1.txt", "r"); for (i = 0; i < 1; i++) { // open file2 in write mode and close it f2 = fopen(DIR "file2.txt", "w"); fclose(f2); // open file2 in read mode and close it // this causes the leak of a file descriptor on the server // just watch /proc/sys/fs/file-nr on the server f2 = fopen(DIR "file2.txt", "r"); fclose(f2); } fclose(f1); return 0; }
Quoted 7 lines · J. Bruce Fields
Quoted 4 lines · Gerhard Heift
Hello,
I have a linux kernel (2.6.38.2, armv5tel) running which exports a directory with following options:
Should be fixed in more recent stable kernel; let me know if not.
An even more recent stable than 2.6.38.2? I just compiled 2.6.39-rc3 and there the leak happens too.
Quoted 1 line
--b.
Regards,
Gerhard
Quoted 61 lines
Quoted 58 lines
/data ip/32(rw,async,crossmnt,insecure,root_squash,no_subtree_check,fsid=0)
On the client (Debian unstable, kernel 2.6.38-2-amd64) I mounted the directory under /media(nfs4import with
# mount -t nfs4 ip:/ /media/nfs4importAfter a lot running fdupes on this folder the server kernel starts throwing messages like this one:
VFS: file-max limit [number] reached
After a reboot I recognised that the number of used file descriptors increases during the run of fdupes (see
/proc/sys/fs/file-nr). Even after unmounting the exported filesystem on the client, unexport the file system on the server and stopping the nfs-server the file descriptors are still allocated and unmounting the filesystem is not possible.After a little bit of research I could create a small program, which increases the used file descriptors by one.
Regards,
Gerhard#include <
stdio.h>#define DIR "/media/nfs4import/"
int main(void) { FILE *f1; FILE *f2; char b[1024]; int i; // create file1 f1 = fopen(DIR "file1.txt", "w"); fwrite("test\n", 5, 1, f1); close(f1); // open file1 in read mode f1 = fopen(DIR "file1.txt", "r"); for (i = 0; i < 1; i++) { // open file2 in write mode and close it f2 = fopen(DIR "file2.txt", "w"); fclose(f2); // open file2 in read mode and close it // this causes the leak of a file descriptor on the server // just watch /proc/sys/fs/file-nr on the server f2 = fopen(DIR "file2.txt", "r"); fclose(f2); } fclose(f1); return 0; }
Quoted 11 lines · Gerhard Heift
Quoted 7 lines · J. Bruce Fields
Quoted 4 lines · Gerhard Heift
Hello,
I have a linux kernel (2.6.38.2, armv5tel) running which exports a directory with following options:
Should be fixed in more recent stable kernel; let me know if not.
An even more recent stable than 2.6.38.2? I just compiled 2.6.39-rc3 and there the leak happens too.
Ugh. OK, investigating.
--b.
Quoted 67 lines
Quoted 2 lines
--b.
Regards,
GerhardQuoted 61 lines
Quoted 58 lines
/data ip/32(rw,async,crossmnt,insecure,root_squash,no_subtree_check,fsid=0)
On the client (Debian unstable, kernel 2.6.38-2-amd64) I mounted the directory under /media(nfs4import with
# mount -t nfs4 ip:/ /media/nfs4importAfter a lot running fdupes on this folder the server kernel starts throwing messages like this one:
VFS: file-max limit [number] reached
After a reboot I recognised that the number of used file descriptors increases during the run of fdupes (see
/proc/sys/fs/file-nr). Even after unmounting the exported filesystem on the client, unexport the file system on the server and stopping the nfs-server the file descriptors are still allocated and unmounting the filesystem is not possible.After a little bit of research I could create a small program, which increases the used file descriptors by one.
Regards,
Gerhard#include <
stdio.h>#define DIR "/media/nfs4import/"
int main(void) { FILE *f1; FILE *f2; char b[1024]; int i; // create file1 f1 = fopen(DIR "file1.txt", "w"); fwrite("test\n", 5, 1, f1); close(f1); // open file1 in read mode f1 = fopen(DIR "file1.txt", "r"); for (i = 0; i < 1; i++) { // open file2 in write mode and close it f2 = fopen(DIR "file2.txt", "w"); fclose(f2); // open file2 in read mode and close it // this causes the leak of a file descriptor on the server // just watch /proc/sys/fs/file-nr on the server f2 = fopen(DIR "file2.txt", "r"); fclose(f2); } fclose(f1); return 0; }
Quoted 8 lines · J. Bruce Fields
Quoted 7 lines · Gerhard Heift
Quoted 6 lines · J. Bruce Fields
Quoted 4 lines · Gerhard Heift
Hello,
I have a linux kernel (2.6.38.2, armv5tel) running which exports a directory with following options:
Quoted 6 lines
Quoted 4 lines
Quoted 1 line
Should be fixed in more recent stable kernel; let me know if not.
An even more recent stable than 2.6.38.2? I just compiled 2.6.39-rc3 and there the leak happens too.
Ugh. OK, investigating.
It took me a bit of time, but I located the commit which introduced this
behavior: acfdf5c383b38f7f4dddae41b97c97f1ae058f49
Quoted 1 line
--b.
Regards,
Gerhard
Quoted 11 lines · Gerhard Heift
Quoted 10 lines · J. Bruce Fields
Quoted 9 lines · Gerhard Heift
Quoted 7 lines · J. Bruce Fields
Quoted 4 lines · Gerhard Heift
Hello,
I have a linux kernel (2.6.38.2, armv5tel) running which exports a directory with following options:
Should be fixed in more recent stable kernel; let me know if not.
Quoted 7 lines
Quoted 4 lines
Quoted 2 lines
An even more recent stable than 2.6.38.2? I just compiled 2.6.39-rc3 and there the leak happens too.
Ugh. OK, investigating.
It took me a bit of time, but I located the commit which introduced this
behavior:acfdf5c383b38f7f4dddae41b97c97f1ae058f49
Doh--probably we just need this (lightly tested).
Thanks for tracking this down.
--b.
commit 21cd8aaf5efb086361cf12f9245c14a3b19fbafd
Author: J. Bruce Fields <[email protected]> Date: Fri Apr 15 18:08:26 2011 -0400
nfsd4: fix struct file leak on delegation
Introduced by acfdf5c383b38f7f4dddae41b97c97f1ae058f49.
fs/nfsd/nfs4state.c +1 -0
@@ -258,6 +258,7 @@ static void nfs4_put_deleg_lease(struct nfs4_file *fp)if (atomic_dec_and_test (&fp->fi_delegees)) {vfs_setlease (fp->fi_deleg_file,F_UNLCK , &fp->fi_lease); fp->fi_lease =NULL ; +fput (fp->fi_deleg_file); fp->fi_deleg_file =NULL ; } }
Quoted 15 lines · J. Bruce Fields
Quoted 14 lines · Gerhard Heift
Quoted 13 lines · J. Bruce Fields
Quoted 11 lines · Gerhard Heift
Quoted 7 lines · J. Bruce Fields
Quoted 4 lines · Gerhard Heift
Hello,
I have a linux kernel (2.6.38.2, armv5tel) running which exports a directory with following options:
Should be fixed in more recent stable kernel; let me know if not.
An even more recent stable than 2.6.38.2? I just compiled 2.6.39-rc3 and there the leak happens too.
Quoted 8 lines
Quoted 4 lines
Quoted 1 line
Ugh. OK, investigating.
It took me a bit of time, but I located the commit which introduced this
behavior:acfdf5c383b38f7f4dddae41b97c97f1ae058f49Doh--probably we just need this (lightly tested).
Thanks for tracking this down.
This patch works for me. Thanks for fixing it.
Quoted 1 line
--b.
Regards,
Gerhard
Quoted 24 lines
commit
21cd8aaf5efb086361cf12f9245c14a3b19fbafdAuthor: J. Bruce Fields <[email protected]> Date: Fri Apr 15 18:08:26 2011 -0400nfsd4: fix struct file leak on delegation
Introduced by
acfdf5c383b38f7f4dddae41b97c97f1ae058f49.Reported-by Gerhard Heift <[email protected]>Signed-off-by J. Bruce Fields <[email protected]>fs/nfsd/nfs4state.c +1
-0@@ -258,6 +258,7 @@ static void nfs4_put_deleg_lease(struct nfs4_file *fp)if (atomic_dec_and_test (&fp->fi_delegees)) {vfs_setlease (fp->fi_deleg_file,F_UNLCK , &fp->fi_lease); fp->fi_lease =NULL ; +fput (fp->fi_deleg_file); fp->fi_deleg_file =NULL ; } }
Quoted 18 lines · Gerhard Heift
Quoted 17 lines · J. Bruce Fields
Quoted 16 lines · Gerhard Heift
Quoted 14 lines · J. Bruce Fields
Quoted 11 lines · Gerhard Heift
Quoted 7 lines · J. Bruce Fields
Quoted 4 lines · Gerhard Heift
Hello,
I have a linux kernel (2.6.38.2, armv5tel) running which exports a directory with following options:
Should be fixed in more recent stable kernel; let me know if not.
An even more recent stable than 2.6.38.2? I just compiled 2.6.39-rc3 and there the leak happens too.
Ugh. OK, investigating.
Quoted 8 lines
Quoted 6 lines
Quoted 2 lines
It took me a bit of time, but I located the commit which introduced this
behavior:acfdf5c383b38f7f4dddae41b97c97f1ae058f49Doh--probably we just need this (lightly tested).
Thanks for tracking this down.
This patch works for me. Thanks for fixing it.
Thanks for the confirmation. I'll pass the patch along soon.
--b.