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 ---