dir.c (fa3c9f3de2504bb09f8ad512f89837751a3eb741) dir.c (0aded708d125a3ff7e5abaea9c2d9c6d7ebbfdcd)
1/*
2 * linux/fs/nfs/dir.c
3 *
4 * Copyright (C) 1992 Rick Sladkey
5 *
6 * nfs directory handling functions
7 *
8 * 10 Apr 1996 Added silly rename for unlink --okir

--- 164 unchanged lines hidden (view full) ---

173};
174
175typedef __be32 * (*decode_dirent_t)(struct xdr_stream *, struct nfs_entry *, struct nfs_server *, int);
176typedef struct {
177 struct file *file;
178 struct page *page;
179 unsigned long page_index;
180 u64 *dir_cookie;
1/*
2 * linux/fs/nfs/dir.c
3 *
4 * Copyright (C) 1992 Rick Sladkey
5 *
6 * nfs directory handling functions
7 *
8 * 10 Apr 1996 Added silly rename for unlink --okir

--- 164 unchanged lines hidden (view full) ---

173};
174
175typedef __be32 * (*decode_dirent_t)(struct xdr_stream *, struct nfs_entry *, struct nfs_server *, int);
176typedef struct {
177 struct file *file;
178 struct page *page;
179 unsigned long page_index;
180 u64 *dir_cookie;
181 u64 last_cookie;
181 loff_t current_index;
182 decode_dirent_t decode;
183
184 unsigned long timestamp;
185 unsigned long gencount;
186 unsigned int cache_entry_index;
187 unsigned int plus:1;
188 unsigned int eof:1;

--- 150 unchanged lines hidden (view full) ---

339 goto out;
340 }
341
342 if (*desc->dir_cookie == 0)
343 status = nfs_readdir_search_for_pos(array, desc);
344 else
345 status = nfs_readdir_search_for_cookie(array, desc);
346
182 loff_t current_index;
183 decode_dirent_t decode;
184
185 unsigned long timestamp;
186 unsigned long gencount;
187 unsigned int cache_entry_index;
188 unsigned int plus:1;
189 unsigned int eof:1;

--- 150 unchanged lines hidden (view full) ---

340 goto out;
341 }
342
343 if (*desc->dir_cookie == 0)
344 status = nfs_readdir_search_for_pos(array, desc);
345 else
346 status = nfs_readdir_search_for_cookie(array, desc);
347
348 if (status == -EAGAIN)
349 desc->last_cookie = array->last_cookie;
347 nfs_readdir_release_array(desc->page);
348out:
349 return status;
350}
351
352/* Fill a page with xdr information before transferring to the cache page */
353static
354int nfs_readdir_xdr_filler(struct page **pages, nfs_readdir_descriptor_t *desc,

--- 203 unchanged lines hidden (view full) ---

558 void *pages_ptr = NULL;
559 struct nfs_entry entry;
560 struct file *file = desc->file;
561 struct nfs_cache_array *array;
562 int status = -ENOMEM;
563 unsigned int array_size = ARRAY_SIZE(pages);
564
565 entry.prev_cookie = 0;
350 nfs_readdir_release_array(desc->page);
351out:
352 return status;
353}
354
355/* Fill a page with xdr information before transferring to the cache page */
356static
357int nfs_readdir_xdr_filler(struct page **pages, nfs_readdir_descriptor_t *desc,

--- 203 unchanged lines hidden (view full) ---

561 void *pages_ptr = NULL;
562 struct nfs_entry entry;
563 struct file *file = desc->file;
564 struct nfs_cache_array *array;
565 int status = -ENOMEM;
566 unsigned int array_size = ARRAY_SIZE(pages);
567
568 entry.prev_cookie = 0;
566 entry.cookie = *desc->dir_cookie;
569 entry.cookie = desc->last_cookie;
567 entry.eof = 0;
568 entry.fh = nfs_alloc_fhandle();
569 entry.fattr = nfs_alloc_fattr();
570 if (entry.fh == NULL || entry.fattr == NULL)
571 goto out;
572
573 array = nfs_readdir_get_array(page);
574 if (IS_ERR(array)) {

--- 92 unchanged lines hidden (view full) ---

667}
668
669/* Search for desc->dir_cookie from the beginning of the page cache */
670static inline
671int readdir_search_pagecache(nfs_readdir_descriptor_t *desc)
672{
673 int res;
674
570 entry.eof = 0;
571 entry.fh = nfs_alloc_fhandle();
572 entry.fattr = nfs_alloc_fattr();
573 if (entry.fh == NULL || entry.fattr == NULL)
574 goto out;
575
576 array = nfs_readdir_get_array(page);
577 if (IS_ERR(array)) {

--- 92 unchanged lines hidden (view full) ---

670}
671
672/* Search for desc->dir_cookie from the beginning of the page cache */
673static inline
674int readdir_search_pagecache(nfs_readdir_descriptor_t *desc)
675{
676 int res;
677
675 if (desc->page_index == 0)
678 if (desc->page_index == 0) {
676 desc->current_index = 0;
679 desc->current_index = 0;
680 desc->last_cookie = 0;
681 }
677 while (1) {
678 res = find_cache_page(desc);
679 if (res != -EAGAIN)
680 break;
681 desc->page_index++;
682 }
683 return res;
684}

--- 74 unchanged lines hidden (view full) ---

759
760 page = alloc_page(GFP_HIGHUSER);
761 if (!page) {
762 status = -ENOMEM;
763 goto out;
764 }
765
766 desc->page_index = 0;
682 while (1) {
683 res = find_cache_page(desc);
684 if (res != -EAGAIN)
685 break;
686 desc->page_index++;
687 }
688 return res;
689}

--- 74 unchanged lines hidden (view full) ---

764
765 page = alloc_page(GFP_HIGHUSER);
766 if (!page) {
767 status = -ENOMEM;
768 goto out;
769 }
770
771 desc->page_index = 0;
772 desc->last_cookie = *desc->dir_cookie;
767 desc->page = page;
768
769 status = nfs_readdir_xdr_to_array(desc, page, inode);
770 if (status < 0)
771 goto out_release;
772
773 status = nfs_do_filldir(desc, dirent, filldir);
774

--- 1484 unchanged lines hidden ---
773 desc->page = page;
774
775 status = nfs_readdir_xdr_to_array(desc, page, inode);
776 if (status < 0)
777 goto out_release;
778
779 status = nfs_do_filldir(desc, dirent, filldir);
780

--- 1484 unchanged lines hidden ---