NFS: Fix a page leak in nfs_do_filldir()

nfs_do_filldir() must always free desc->page when it is done, otherwise
we end up leaking the page.

Also remove unused variable 'dentry'.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

+5 -5
+5 -5
fs/nfs/dir.c
··· 701 int res = 0; 702 struct nfs_cache_array *array = NULL; 703 unsigned int d_type = DT_UNKNOWN; 704 - struct dentry *dentry = NULL; 705 706 array = nfs_readdir_get_array(desc->page); 707 - if (IS_ERR(array)) 708 - return PTR_ERR(array); 709 710 for (i = desc->cache_entry_index; i < array->size; i++) { 711 d_type = DT_UNKNOWN; ··· 727 desc->eof = 1; 728 729 nfs_readdir_release_array(desc->page); 730 cache_page_release(desc); 731 - if (dentry != NULL) 732 - dput(dentry); 733 dfprintk(DIRCACHE, "NFS: nfs_do_filldir() filling ended @ cookie %Lu; returning = %d\n", 734 (unsigned long long)*desc->dir_cookie, res); 735 return res;
··· 701 int res = 0; 702 struct nfs_cache_array *array = NULL; 703 unsigned int d_type = DT_UNKNOWN; 704 705 array = nfs_readdir_get_array(desc->page); 706 + if (IS_ERR(array)) { 707 + res = PTR_ERR(array); 708 + goto out; 709 + } 710 711 for (i = desc->cache_entry_index; i < array->size; i++) { 712 d_type = DT_UNKNOWN; ··· 726 desc->eof = 1; 727 728 nfs_readdir_release_array(desc->page); 729 + out: 730 cache_page_release(desc); 731 dfprintk(DIRCACHE, "NFS: nfs_do_filldir() filling ended @ cookie %Lu; returning = %d\n", 732 (unsigned long long)*desc->dir_cookie, res); 733 return res;