dir.c (0adf85b445c7fbc5d2df1f8c1bc54d62c4340237) | dir.c (612896ec5a4edbf98c4a631503899da04df76480) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * linux/fs/nfs/dir.c 4 * 5 * Copyright (C) 1992 Rick Sladkey 6 * 7 * nfs directory handling functions 8 * --- 775 unchanged lines hidden (view full) --- 784 dentry = alias; 785 } 786 nfs_set_verifier(dentry, dir_verifier); 787 trace_nfs_readdir_lookup(d_inode(parent), dentry, 0); 788out: 789 dput(dentry); 790} 791 | 1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * linux/fs/nfs/dir.c 4 * 5 * Copyright (C) 1992 Rick Sladkey 6 * 7 * nfs directory handling functions 8 * --- 775 unchanged lines hidden (view full) --- 784 dentry = alias; 785 } 786 nfs_set_verifier(dentry, dir_verifier); 787 trace_nfs_readdir_lookup(d_inode(parent), dentry, 0); 788out: 789 dput(dentry); 790} 791 |
792static int nfs_readdir_entry_decode(struct nfs_readdir_descriptor *desc, 793 struct nfs_entry *entry, 794 struct xdr_stream *stream) 795{ 796 int ret; 797 798 if (entry->fattr->label) 799 entry->fattr->label->len = NFS4_MAXLABELLEN; 800 ret = xdr_decode(desc, entry, stream); 801 if (ret || !desc->plus) 802 return ret; 803 nfs_prime_dcache(file_dentry(desc->file), entry, desc->dir_verifier); 804 return 0; 805} 806 |
|
792/* Perform conversion from xdr to cache array */ 793static int nfs_readdir_page_filler(struct nfs_readdir_descriptor *desc, 794 struct nfs_entry *entry, 795 struct page **xdr_pages, unsigned int buflen, 796 struct page **arrays, size_t narrays, 797 u64 change_attr) 798{ 799 struct address_space *mapping = desc->file->f_mapping; --- 6 unchanged lines hidden (view full) --- 806 scratch = alloc_page(GFP_KERNEL); 807 if (scratch == NULL) 808 return -ENOMEM; 809 810 xdr_init_decode_pages(&stream, &buf, xdr_pages, buflen); 811 xdr_set_scratch_page(&stream, scratch); 812 813 do { | 807/* Perform conversion from xdr to cache array */ 808static int nfs_readdir_page_filler(struct nfs_readdir_descriptor *desc, 809 struct nfs_entry *entry, 810 struct page **xdr_pages, unsigned int buflen, 811 struct page **arrays, size_t narrays, 812 u64 change_attr) 813{ 814 struct address_space *mapping = desc->file->f_mapping; --- 6 unchanged lines hidden (view full) --- 821 scratch = alloc_page(GFP_KERNEL); 822 if (scratch == NULL) 823 return -ENOMEM; 824 825 xdr_init_decode_pages(&stream, &buf, xdr_pages, buflen); 826 xdr_set_scratch_page(&stream, scratch); 827 828 do { |
814 if (entry->fattr->label) 815 entry->fattr->label->len = NFS4_MAXLABELLEN; 816 817 status = xdr_decode(desc, entry, &stream); | 829 status = nfs_readdir_entry_decode(desc, entry, &stream); |
818 if (status != 0) 819 break; 820 | 830 if (status != 0) 831 break; 832 |
821 if (desc->plus) 822 nfs_prime_dcache(file_dentry(desc->file), entry, 823 desc->dir_verifier); 824 | |
825 status = nfs_readdir_page_array_append(page, entry, &cookie); 826 if (status != -ENOSPC) 827 continue; 828 829 if (page->mapping != mapping) { 830 if (!--narrays) 831 break; 832 new = nfs_readdir_page_array_alloc(cookie, GFP_KERNEL); --- 11 unchanged lines hidden (view full) --- 844 page = new; 845 } 846 desc->page_index_max++; 847 status = nfs_readdir_page_array_append(page, entry, &cookie); 848 } while (!status && !entry->eof); 849 850 switch (status) { 851 case -EBADCOOKIE: | 833 status = nfs_readdir_page_array_append(page, entry, &cookie); 834 if (status != -ENOSPC) 835 continue; 836 837 if (page->mapping != mapping) { 838 if (!--narrays) 839 break; 840 new = nfs_readdir_page_array_alloc(cookie, GFP_KERNEL); --- 11 unchanged lines hidden (view full) --- 852 page = new; 853 } 854 desc->page_index_max++; 855 status = nfs_readdir_page_array_append(page, entry, &cookie); 856 } while (!status && !entry->eof); 857 858 switch (status) { 859 case -EBADCOOKIE: |
852 if (entry->eof) { 853 nfs_readdir_page_set_eof(page); 854 status = 0; 855 } 856 break; 857 case -ENOSPC: | 860 if (!entry->eof) 861 break; 862 nfs_readdir_page_set_eof(page); 863 fallthrough; |
858 case -EAGAIN: 859 status = 0; 860 break; | 864 case -EAGAIN: 865 status = 0; 866 break; |
867 case -ENOSPC: 868 status = 0; 869 if (!desc->plus) 870 break; 871 while (!nfs_readdir_entry_decode(desc, entry, &stream)) 872 ; |
|
861 } 862 863 if (page != *arrays) 864 nfs_readdir_page_unlock_and_put(page); 865 866 put_page(scratch); 867 return status; 868} --- 2359 unchanged lines hidden --- | 873 } 874 875 if (page != *arrays) 876 nfs_readdir_page_unlock_and_put(page); 877 878 put_page(scratch); 879 return status; 880} --- 2359 unchanged lines hidden --- |