dir.c (2612e3bbc0386368a850140a6c9b990cd496a5ec) dir.c (14e7316a3c73cf45cef4422549f3585fc1c53521)
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 *

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

1084 struct nfs_cache_array *array;
1085 unsigned int i;
1086 bool first_emit = !desc->dir_cookie;
1087
1088 array = kmap_local_folio(desc->folio, 0);
1089 for (i = desc->cache_entry_index; i < array->size; i++) {
1090 struct nfs_cache_array_entry *ent;
1091
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 *

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

1084 struct nfs_cache_array *array;
1085 unsigned int i;
1086 bool first_emit = !desc->dir_cookie;
1087
1088 array = kmap_local_folio(desc->folio, 0);
1089 for (i = desc->cache_entry_index; i < array->size; i++) {
1090 struct nfs_cache_array_entry *ent;
1091
1092 /*
1093 * nfs_readdir_handle_cache_misses return force clear at
1094 * (cache_misses > NFS_READDIR_CACHE_MISS_THRESHOLD) for
1095 * readdir heuristic, NFS_READDIR_CACHE_MISS_THRESHOLD + 1
1096 * entries need be emitted here.
1097 */
1098 if (first_emit && i > NFS_READDIR_CACHE_MISS_THRESHOLD + 2) {
1099 desc->eob = true;
1100 break;
1101 }
1102
1092 ent = &array->array[i];
1093 if (!dir_emit(desc->ctx, ent->name, ent->name_len,
1094 nfs_compat_user_ino64(ent->ino), ent->d_type)) {
1095 desc->eob = true;
1096 break;
1097 }
1098 memcpy(desc->verf, verf, sizeof(desc->verf));
1099 if (i == array->size - 1) {
1100 desc->dir_cookie = array->last_cookie;
1101 nfs_readdir_seek_next_array(array, desc);
1102 } else {
1103 desc->dir_cookie = array->array[i + 1].cookie;
1104 desc->last_cookie = array->array[0].cookie;
1105 }
1106 if (nfs_readdir_use_cookie(file))
1107 desc->ctx->pos = desc->dir_cookie;
1108 else
1109 desc->ctx->pos++;
1103 ent = &array->array[i];
1104 if (!dir_emit(desc->ctx, ent->name, ent->name_len,
1105 nfs_compat_user_ino64(ent->ino), ent->d_type)) {
1106 desc->eob = true;
1107 break;
1108 }
1109 memcpy(desc->verf, verf, sizeof(desc->verf));
1110 if (i == array->size - 1) {
1111 desc->dir_cookie = array->last_cookie;
1112 nfs_readdir_seek_next_array(array, desc);
1113 } else {
1114 desc->dir_cookie = array->array[i + 1].cookie;
1115 desc->last_cookie = array->array[0].cookie;
1116 }
1117 if (nfs_readdir_use_cookie(file))
1118 desc->ctx->pos = desc->dir_cookie;
1119 else
1120 desc->ctx->pos++;
1110 if (first_emit && i > NFS_READDIR_CACHE_MISS_THRESHOLD + 1) {
1111 desc->eob = true;
1112 break;
1113 }
1114 }
1115 if (array->folio_is_eof)
1116 desc->eof = !desc->eob;
1117
1118 kunmap_local(array);
1119 dfprintk(DIRCACHE, "NFS: nfs_do_filldir() filling ended @ cookie %llu\n",
1120 (unsigned long long)desc->dir_cookie);
1121}

--- 2196 unchanged lines hidden ---
1121 }
1122 if (array->folio_is_eof)
1123 desc->eof = !desc->eob;
1124
1125 kunmap_local(array);
1126 dfprintk(DIRCACHE, "NFS: nfs_do_filldir() filling ended @ cookie %llu\n",
1127 (unsigned long long)desc->dir_cookie);
1128}

--- 2196 unchanged lines hidden ---