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; }
Attachment:
signature.asc
Description: Digital signature