Messages in this thread | | | Date | Tue, 23 Sep 2008 20:00:51 +0900 (JST) | From | KOSAKI Motohiro <> | Subject | Re: [PATCH] mm: do_generic_file_read() never gets a NULL 'filp' argument |
| |
Hi Andrew,
> > > > The 'filp' argument to do_generic_file_read() is never NULL. > > > > > > How did you verify this? > > > > > > NFS used to like passing NULL file*'s into VFS functions. I don't > > > recall whether it affected do_generic_file_read(). > > > > The only thing nfsd passed a NULL file pointer in is ->fsync on > > directories. > > NFS, not NFSD. It was page_cache_read(), iirc.
Is it important? Cristoph wrote following decision reason at last mail. I believe he was right.
> If anyone did pass a NULL file pointer into > do_generic_file_read it would oops in it's very first line of code.
IOW, do_generic_file_read() has following calling hieralcy.
generic_file_aio_read() +- do_generic_file_read()
and fs/nfs/file.c has
const struct file_operations nfs_file_operations = { .llseek = nfs_file_llseek, .read = do_sync_read, .write = do_sync_write, .aio_read = nfs_file_read, .aio_write = nfs_file_write,
So, nfs doesn't use generic_file_aio_read. it directly indicate nfs doesn't use do_generic_file_read().
in the other hand, page_cache_read() has following calling hieralcy.
filemap_fault() +- page_cache_read() +- a_ops->readpage()
So, page_cache_read is mmap() related helper function and do_generic_file_read is read() related helper function. they are independent IMHO.
| |