ReactOS 0.4.15-dev-8348-gc1b9bb5
name_cache.h File Reference
#include "nfs41.h"
Include dependency graph for name_cache.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

static __inline struct nfs41_name_cacheclient_name_cache (IN nfs41_client *client)
 
static __inline struct nfs41_name_cachesession_name_cache (IN nfs41_session *session)
 
int nfs41_attr_cache_lookup (IN struct nfs41_name_cache *cache, IN uint64_t fileid, OUT nfs41_file_info *info_out)
 
int nfs41_attr_cache_update (IN struct nfs41_name_cache *cache, IN uint64_t fileid, IN const nfs41_file_info *info)
 
int nfs41_name_cache_create (OUT struct nfs41_name_cache **cache_out)
 
int nfs41_name_cache_free (IN OUT struct nfs41_name_cache **cache_out)
 
int nfs41_name_cache_lookup (IN struct nfs41_name_cache *cache, IN const char *path, IN const char *path_end, OUT OPTIONAL const char **remaining_path_out, OUT OPTIONAL nfs41_fh *parent_out, OUT OPTIONAL nfs41_fh *target_out, OUT OPTIONAL nfs41_file_info *info_out, OUT OPTIONAL bool_t *is_negative)
 
int nfs41_name_cache_insert (IN struct nfs41_name_cache *cache, IN const char *path, IN const nfs41_component *name, IN OPTIONAL const nfs41_fh *fh, IN OPTIONAL const nfs41_file_info *info, IN OPTIONAL const change_info4 *cinfo, IN enum open_delegation_type4 delegation)
 
int nfs41_name_cache_delegreturn (IN struct nfs41_name_cache *cache, IN uint64_t fileid, IN const char *path, IN const nfs41_component *name)
 
int nfs41_name_cache_remove (IN struct nfs41_name_cache *cache, IN const char *path, IN const nfs41_component *name, IN uint64_t fileid, IN const change_info4 *cinfo)
 
int nfs41_name_cache_rename (IN struct nfs41_name_cache *cache, IN const char *src_path, IN const nfs41_component *src_name, IN const change_info4 *src_cinfo, IN const char *dst_path, IN const nfs41_component *dst_name, IN const change_info4 *dst_cinfo)
 
int nfs41_name_cache_remove_stale (IN struct nfs41_name_cache *cache, IN nfs41_session *session, IN nfs41_abs_path *path)
 

Function Documentation

◆ client_name_cache()

static __inline struct nfs41_name_cache * client_name_cache ( IN nfs41_client client)
static

Definition at line 28 of file name_cache.h.

30{
32}
static __inline nfs41_server * client_server(IN nfs41_client *client)
Definition: nfs41.h:428
static FILE * client
Definition: client.c:41
struct nfs41_name_cache * name_cache
Definition: nfs41.h:84

Referenced by nfs41_delegation_getattr(), and session_name_cache().

◆ nfs41_attr_cache_lookup()

int nfs41_attr_cache_lookup ( IN struct nfs41_name_cache cache,
IN uint64_t  fileid,
OUT nfs41_file_info info_out 
)

Definition at line 859 of file name_cache.c.

863{
864 struct attr_cache_entry *entry;
865 int status = NO_ERROR;
866
867 dprintf(NCLVL1, "--> nfs41_attr_cache_lookup(%llu)\n", fileid);
868
870
873 goto out_unlock;
874 }
875
876 entry = attr_cache_search(&cache->attributes, fileid);
879 goto out_unlock;
880 }
881
882 copy_attrs(info_out, entry);
883
884out_unlock:
886
887 dprintf(NCLVL1, "<-- nfs41_attr_cache_lookup() returning %d\n", status);
888 return status;
889}
#define NO_ERROR
Definition: dderror.h:5
#define NULL
Definition: types.h:112
#define ERROR_NOT_SUPPORTED
Definition: compat.h:100
VOID WINAPI ReleaseSRWLockShared(PSRWLOCK Lock)
Definition: sync.c:43
VOID WINAPI AcquireSRWLockShared(PSRWLOCK Lock)
Definition: sync.c:15
uint32_t entry
Definition: isohybrid.c:63
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
static __inline int attr_cache_entry_expired(IN const struct attr_cache_entry *entry)
Definition: name_cache.c:178
static void copy_attrs(OUT nfs41_file_info *dst, IN const struct attr_cache_entry *src)
Definition: name_cache.c:329
static __inline bool_t name_cache_enabled(IN struct nfs41_name_cache *cache)
Definition: name_cache.c:401
static struct attr_cache_entry * attr_cache_search(IN struct attr_cache *cache, IN uint64_t fileid)
Definition: name_cache.c:219
@ NCLVL1
Definition: name_cache.c:37
#define dprintf
Definition: regdump.c:33
Definition: name_cache.c:80
Definition: cache.c:49
HANDLE lock
Definition: cache.c:52
Definition: ps.c:97

Referenced by nfs41_cached_getattr(), and nfs41_delegation_getattr().

◆ nfs41_attr_cache_update()

int nfs41_attr_cache_update ( IN struct nfs41_name_cache cache,
IN uint64_t  fileid,
IN const nfs41_file_info info 
)

Definition at line 891 of file name_cache.c.

895{
896 struct attr_cache_entry *entry;
897 int status = NO_ERROR;
898
899 dprintf(NCLVL1, "--> nfs41_attr_cache_update(%llu)\n", fileid);
900
902
905 goto out_unlock;
906 }
907
908 entry = attr_cache_search(&cache->attributes, fileid);
909 if (entry == NULL) {
911 goto out_unlock;
912 }
913
915
916out_unlock:
918
919 dprintf(NCLVL1, "<-- nfs41_attr_cache_update() returning %d\n", status);
920 return status;
921}
VOID WINAPI AcquireSRWLockExclusive(PSRWLOCK Lock)
Definition: sync.c:8
VOID WINAPI ReleaseSRWLockExclusive(PSRWLOCK Lock)
Definition: sync.c:36
static void attr_cache_update(IN struct attr_cache_entry *entry, IN const nfs41_file_info *info, IN enum open_delegation_type4 delegation)
Definition: name_cache.c:282
@ OPEN_DELEGATE_NONE
Definition: nfs41_ops.h:586

Referenced by nfs41_close(), nfs41_commit(), nfs41_create(), nfs41_getattr(), nfs41_link(), nfs41_remove(), nfs41_rename(), nfs41_setattr(), nfs41_write(), open_update_cache(), and pnfs_rpc_layoutcommit().

◆ nfs41_name_cache_create()

int nfs41_name_cache_create ( OUT struct nfs41_name_cache **  cache_out)

Definition at line 752 of file name_cache.c.

754{
755 struct nfs41_name_cache *cache;
756 int status = NO_ERROR;
757
758 dprintf(NCLVL1, "nfs41_name_cache_create()\n");
759
760 /* allocate the cache */
761 cache = calloc(1, sizeof(struct nfs41_name_cache));
762 if (cache == NULL) {
764 goto out;
765 }
766
767 list_init(&cache->exp_entries);
768 cache->expiration = NAME_CACHE_EXPIRATION;
769 cache->max_entries = NAME_CACHE_MAX_ENTRIES;
770 cache->max_delegations = NAME_CACHE_MAX_ENTRIES / 2;
772
773 /* allocate a pool of entries */
774 cache->pool = calloc(cache->max_entries, NAME_ENTRY_SIZE);
775 if (cache->pool == NULL) {
777 goto out_err_cache;
778 }
779
780 /* initialize the attribute cache */
781 status = attr_cache_init(&cache->attributes, cache->max_entries);
782 if (status)
783 goto out_err_pool;
784
785 *cache_out = cache;
786out:
787 return status;
788
789out_err_pool:
790 free(cache->pool);
791out_err_cache:
792 free(cache);
793 goto out;
794}
static void list_init(struct list_entry *head)
Definition: list.h:51
#define free
Definition: debug_ros.c:5
VOID WINAPI InitializeSRWLock(PSRWLOCK Lock)
Definition: sync.c:29
#define NAME_CACHE_MAX_ENTRIES
Definition: name_cache.c:750
#define NAME_CACHE_EXPIRATION
Definition: name_cache.c:42
static int attr_cache_init(IN struct attr_cache *cache, IN uint32_t max_entries)
Definition: name_cache.c:186
#define NAME_ENTRY_SIZE
Definition: name_cache.c:373
static FILE * out
Definition: regtests2xml.c:44
#define calloc
Definition: rosglue.h:14
DWORD WINAPI GetLastError(void)
Definition: except.c:1042

Referenced by server_create().

◆ nfs41_name_cache_delegreturn()

int nfs41_name_cache_delegreturn ( IN struct nfs41_name_cache cache,
IN uint64_t  fileid,
IN const char path,
IN const nfs41_component name 
)

Definition at line 1012 of file name_cache.c.

1017{
1018 struct name_cache_entry *parent, *target;
1019 struct attr_cache_entry *attributes;
1020 int status;
1021
1022 dprintf(NCLVL1, "--> nfs41_name_cache_delegreturn(%llu, '%s')\n",
1023 fileid, path);
1024
1026
1027 if (!name_cache_enabled(cache)) {
1029 goto out_unlock;
1030 }
1031
1033 name->name + name->len, NULL, &parent, &target, NULL);
1034 if (status == NO_ERROR) {
1035 /* put the name cache entry back on the exp_entries list */
1036 list_add_head(&cache->exp_entries, &target->exp_entry);
1038
1039 attributes = target->attributes;
1040 } else {
1041 /* should still have an attr cache entry */
1042 attributes = attr_cache_search(&cache->attributes, fileid);
1043 }
1044
1045 if (attributes == NULL) {
1047 goto out_unlock;
1048 }
1049
1050 /* release the reference from name_cache_entry_update() */
1051 if (attributes->delegated) {
1052 attributes->delegated = FALSE;
1053 attr_cache_entry_deref(&cache->attributes, attributes);
1054 assert(cache->delegations > 0);
1055 cache->delegations--;
1056 }
1057 status = NO_ERROR;
1058
1059out_unlock:
1061
1062 dprintf(NCLVL1, "<-- nfs41_name_cache_delegreturn() returning %d\n", status);
1063 return status;
1064}
static void list_add_head(struct list_entry *head, struct list_entry *entry)
Definition: list.h:76
#define FALSE
Definition: types.h:117
#define assert(x)
Definition: debug.h:53
r parent
Definition: btrfs.c:3010
GLenum target
Definition: glext.h:7315
static int name_cache_lookup(IN struct nfs41_name_cache *cache, IN bool_t skip_invis, IN const char *path, IN const char *path_end, OUT OPTIONAL const char **remaining_path_out, OUT OPTIONAL struct name_cache_entry **parent_out, OUT OPTIONAL struct name_cache_entry **target_out, OUT OPTIONAL bool_t *is_negative)
Definition: name_cache.c:648
static __inline void attr_cache_entry_deref(IN struct attr_cache *cache, IN struct attr_cache_entry *entry)
Definition: name_cache.c:166
static void name_cache_entry_updated(IN struct nfs41_name_cache *cache, IN struct name_cache_entry *entry)
Definition: name_cache.c:510
Definition: name_cache.c:362
Definition: name.c:39
WCHAR * name
Definition: name.c:42

Referenced by nfs41_delegreturn().

◆ nfs41_name_cache_free()

int nfs41_name_cache_free ( IN OUT struct nfs41_name_cache **  cache_out)

◆ nfs41_name_cache_insert()

int nfs41_name_cache_insert ( IN struct nfs41_name_cache cache,
IN const char path,
IN const nfs41_component name,
IN OPTIONAL const nfs41_fh fh,
IN OPTIONAL const nfs41_file_info info,
IN OPTIONAL const change_info4 cinfo,
IN enum open_delegation_type4  delegation 
)

Definition at line 923 of file name_cache.c.

931{
933 int status;
934
935 dprintf(NCLVL1, "--> nfs41_name_cache_insert('%.*s')\n",
936 name->name + name->len - path, path);
937
939
942 goto out_unlock;
943 }
944
945 /* limit the number of delegations to prevent attr cache starvation */
946 if (is_delegation(delegation) &&
947 cache->delegations >= cache->max_delegations) {
949 goto out_unlock;
950 }
951
952 /* an empty path or component implies the root entry */
953 if (path == NULL || name == NULL || name->len == 0) {
954 /* create the root entry if it doesn't exist */
955 if (cache->root == NULL) {
956 const nfs41_component name = { "ROOT", 4 };
958 if (status)
959 goto out_err_deleg;
960 }
961 target = cache->root;
962 } else {
963 /* find/create an entry under its parent */
965 name->name, NULL, NULL, &parent, NULL);
966 if (status)
967 goto out_err_deleg;
968
969 if (cinfo && name_cache_entry_changed(cache, parent, cinfo)) {
971 goto out_err_deleg;
972 }
973
975 if (status)
976 goto out_err_deleg;
977 }
978
979 /* pass in the new fh/attributes */
981 if (status)
982 goto out_err_update;
983
984out_unlock:
986
987 dprintf(NCLVL1, "<-- nfs41_name_cache_insert() returning %d\n",
988 status);
989 return status;
990
991out_err_update:
992 /* a failure in name_cache_entry_update() leaves a negative entry
993 * where there shouldn't be one; remove it from the cache */
995
996out_err_deleg:
997 if (is_delegation(delegation)) {
998 /* we still need a reference to the attributes for the delegation */
999 struct attr_cache_entry *attributes;
1000 status = attr_cache_find_or_create(&cache->attributes,
1001 info->fileid, &attributes);
1002 if (status == NO_ERROR) {
1003 attr_cache_update(attributes, info, delegation);
1004 cache->delegations++;
1005 }
1006 else
1008 }
1009 goto out_unlock;
1010}
static __inline bool_t is_delegation(IN enum open_delegation_type4 type)
Definition: name_cache.c:72
static int name_cache_find_or_create(IN struct nfs41_name_cache *cache, IN struct name_cache_entry *parent, IN const nfs41_component *component, OUT struct name_cache_entry **target_out)
Definition: name_cache.c:712
static int name_cache_entry_create(IN struct nfs41_name_cache *cache, IN const nfs41_component *component, OUT struct name_cache_entry **entry_out)
Definition: name_cache.c:459
static void name_cache_entry_invalidate(IN struct nfs41_name_cache *cache, IN struct name_cache_entry *entry)
Definition: name_cache.c:587
static int attr_cache_find_or_create(IN struct attr_cache *cache, IN uint64_t fileid, OUT struct attr_cache_entry **entry_out)
Definition: name_cache.c:244
static int name_cache_entry_update(IN struct nfs41_name_cache *cache, IN struct name_cache_entry *entry, IN OPTIONAL const nfs41_fh *fh, IN OPTIONAL const nfs41_file_info *info, IN enum open_delegation_type4 delegation)
Definition: name_cache.c:519
static int name_cache_entry_changed(IN struct nfs41_name_cache *cache, IN struct name_cache_entry *entry, IN const change_info4 *cinfo)
Definition: name_cache.c:563
nfs41_fh fh
Definition: name_cache.c:364
#define ERROR_TOO_MANY_OPEN_FILES
Definition: winerror.h:107

Referenced by nfs41_create(), nfs41_link(), open_update_cache(), and server_lookup().

◆ nfs41_name_cache_lookup()

int nfs41_name_cache_lookup ( IN struct nfs41_name_cache cache,
IN const char path,
IN const char path_end,
OUT OPTIONAL const char **  remaining_path_out,
OUT OPTIONAL nfs41_fh parent_out,
OUT OPTIONAL nfs41_fh target_out,
OUT OPTIONAL nfs41_file_info info_out,
OUT OPTIONAL bool_t is_negative 
)

Definition at line 824 of file name_cache.c.

833{
835 const char *path_pos = path;
836 int status;
837
839
842 goto out_unlock;
843 }
844
845 status = name_cache_lookup(cache, 1, path, path_end,
846 &path_pos, &parent, &target, is_negative);
847
848 if (parent_out) copy_fh(parent_out, parent);
849 if (target_out) copy_fh(target_out, target);
850 if (info_out && target && target->attributes)
851 copy_attrs(info_out, target->attributes);
852
853out_unlock:
855 if (remaining_path_out) *remaining_path_out = path_pos;
856 return status;
857}
static __inline void copy_fh(OUT nfs41_fh *dst, IN OPTIONAL const struct name_cache_entry *src)
Definition: name_cache.c:814

Referenced by nfs41_lookup().

◆ nfs41_name_cache_remove()

int nfs41_name_cache_remove ( IN struct nfs41_name_cache cache,
IN const char path,
IN const nfs41_component name,
IN uint64_t  fileid,
IN const change_info4 cinfo 
)

Definition at line 1066 of file name_cache.c.

1072{
1073 struct name_cache_entry *parent, *target;
1074 struct attr_cache_entry *attributes = NULL;
1075 int status;
1076
1077 dprintf(NCLVL1, "--> nfs41_name_cache_remove('%s')\n", path);
1078
1080
1081 if (!name_cache_enabled(cache)) {
1083 goto out_unlock;
1084 }
1085
1087 name->name + name->len, NULL, &parent, &target, NULL);
1089 goto out_attributes;
1090
1091 if (cinfo && name_cache_entry_changed(cache, parent, cinfo)) {
1093 goto out_attributes;
1094 }
1095
1097 goto out_attributes;
1098
1099 if (target->attributes)
1100 target->attributes->numlinks--;
1101
1102 /* make this a negative entry and unlink children */
1105
1106out_unlock:
1108
1109 dprintf(NCLVL1, "<-- nfs41_name_cache_remove() returning %d\n", status);
1110 return status;
1111
1112out_attributes:
1113 /* in the presence of other links, we need to update numlinks
1114 * regardless of a failure to find the target entry */
1115 dprintf(NCLVL1, "nfs41_name_cache_remove: need to find attributes for %s\n", path);
1116 attributes = attr_cache_search(&cache->attributes, fileid);
1117 if (attributes)
1118 attributes->numlinks--;
1119 goto out_unlock;
1120}
static void name_cache_unlink_children_recursive(IN struct nfs41_name_cache *cache, IN struct name_cache_entry *parent)
Definition: name_cache.c:450
#define ERROR_PATH_NOT_FOUND
Definition: winerror.h:106

Referenced by nfs41_remove().

◆ nfs41_name_cache_remove_stale()

int nfs41_name_cache_remove_stale ( IN struct nfs41_name_cache cache,
IN nfs41_session session,
IN nfs41_abs_path path 
)

Definition at line 1359 of file name_cache.c.

1363{
1365 const char *path_pos = path->path;
1366 const char* const path_end = path->path + path->len;
1367 const uint32_t max_components = max_putfh_components(session);
1369 int status = NO_ERROR;
1370
1372
1373 /* if there's no cache, don't check any components */
1375 path_pos = path_end;
1376
1378
1379 /* hold a lock on the path to protect against rename */
1380 AcquireSRWLockShared(&path->lock);
1381
1382 while (get_path_fhs(cache, path, &path_pos, max_components, files, &count)) {
1384
1387 session, path, &files[index].name);
1388 break;
1389 }
1390 if (status) {
1392 break;
1393 }
1394 }
1395
1396 ReleaseSRWLockShared(&path->lock);
1397
1398 return status;
1399}
#define index(s, c)
Definition: various.h:29
int nfs_to_windows_error(int status, int default_error)
Definition: util.c:235
UINT32 uint32_t
Definition: types.h:75
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint index
Definition: glext.h:6031
static bool_t get_path_fhs(IN struct nfs41_name_cache *cache, IN nfs41_abs_path *path, IN OUT const char **path_pos, IN uint32_t max_components, OUT nfs41_path_fh *files, OUT uint32_t *count)
Definition: name_cache.c:1233
static int rpc_array_putfh(IN nfs41_session *session, IN nfs41_path_fh *files, IN uint32_t count, OUT uint32_t *valid_out)
Definition: name_cache.c:1283
static __inline uint32_t max_putfh_components(IN const nfs41_session *session)
Definition: name_cache.c:1352
static int delete_stale_component(IN struct nfs41_name_cache *cache, IN nfs41_session *session, IN const nfs41_abs_path *path, IN const nfs41_component *component)
Definition: name_cache.c:1327
#define MAX_PUTFH_PER_COMPOUND
Definition: name_cache.c:1231
@ NFS4ERR_FHEXPIRED
Definition: nfs41_const.h:119
@ NFS4ERR_STALE
Definition: nfs41_const.h:106

Referenced by compound_encode_send_decode().

◆ nfs41_name_cache_rename()

int nfs41_name_cache_rename ( IN struct nfs41_name_cache cache,
IN const char src_path,
IN const nfs41_component src_name,
IN const change_info4 src_cinfo,
IN const char dst_path,
IN const nfs41_component dst_name,
IN const change_info4 dst_cinfo 
)

Definition at line 1122 of file name_cache.c.

1130{
1131 struct name_cache_entry *src_parent, *src;
1132 struct name_cache_entry *dst_parent;
1133 int status = NO_ERROR;
1134
1135 dprintf(NCLVL1, "--> nfs41_name_cache_rename('%s' to '%s')\n",
1136 src_path, dst_path);
1137
1139
1140 if (!name_cache_enabled(cache)) {
1142 goto out_unlock;
1143 }
1144
1145 /* look up dst_parent */
1146 status = name_cache_lookup(cache, 0, dst_path,
1147 dst_name->name, NULL, NULL, &dst_parent, NULL);
1148 /* we can't create the dst entry without a parent */
1149 if (status || dst_parent->attributes == NULL) {
1150 /* if src exists, make it negative */
1151 dprintf(NCLVL1, "nfs41_name_cache_rename: adding negative cache "
1152 "entry for %.*s\n", src_name->len, src_name->name);
1153 status = name_cache_lookup(cache, 0, src_path,
1154 src_name->name + src_name->len, NULL, NULL, &src, NULL);
1155 if (status == NO_ERROR) {
1158 }
1160 goto out_unlock;
1161 }
1162
1163 /* look up src_parent and src */
1164 status = name_cache_lookup(cache, 0, src_path,
1165 src_name->name + src_name->len, NULL, &src_parent, &src, NULL);
1166 /* we can't create the dst entry without valid attributes */
1167 if (status || src->attributes == NULL) {
1168 /* remove dst if it exists */
1169 struct name_cache_entry *dst;
1170 dprintf(NCLVL1, "nfs41_name_cache_rename: removing negative cache "
1171 "entry for %.*s\n", dst_name->len, dst_name->name);
1172 dst = name_cache_search(cache, dst_parent, dst_name);
1174 goto out_unlock;
1175 }
1176
1177 if (name_cache_entry_changed(cache, dst_parent, dst_cinfo)) {
1179 /* if dst_parent and src_parent are both gone,
1180 * we no longer have an entry to rename */
1181 if (dst_parent == src_parent)
1182 goto out_unlock;
1183 } else {
1184 struct name_cache_entry *existing;
1185 existing = name_cache_search(cache, dst_parent, dst_name);
1186 if (existing) {
1187 if (existing == src)
1188 goto out_unlock;
1189 /* remove the existing entry, but don't unlink it yet;
1190 * we may reuse it for a negative entry */
1191 name_cache_remove(existing, dst_parent);
1192 }
1193
1194 /* move the src entry under dst_parent */
1195 name_cache_remove(src, src_parent);
1196 name_cache_entry_rename(src, dst_name);
1197 name_cache_insert(src, dst_parent);
1198
1199 if (existing) {
1200 /* recycle 'existing' as the negative entry 'src' */
1201 name_cache_entry_rename(existing, src_name);
1202 name_cache_insert(existing, src_parent);
1203 }
1204 src = existing;
1205 }
1206
1207 if (name_cache_entry_changed(cache, src_parent, src_cinfo)) {
1209 goto out_unlock;
1210 }
1211
1212 /* leave a negative entry where the file used to be */
1213 if (src == NULL) {
1214 /* src was moved, create a new entry in its place */
1215 status = name_cache_find_or_create(cache, src_parent, src_name, &src);
1216 if (status)
1217 goto out_unlock;
1218 }
1221
1222out_unlock:
1224
1225 dprintf(NCLVL1, "<-- nfs41_name_cache_rename() returning %d\n", status);
1226 return status;
1227}
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
static __inline void name_cache_unlink(IN struct nfs41_name_cache *cache, IN struct name_cache_entry *entry)
Definition: name_cache.c:428
static int name_cache_insert(IN struct name_cache_entry *entry, IN struct name_cache_entry *parent)
Definition: name_cache.c:696
static __inline void name_cache_remove(IN struct name_cache_entry *entry, IN struct name_cache_entry *parent)
Definition: name_cache.c:416
static __inline void name_cache_entry_rename(OUT struct name_cache_entry *entry, IN const nfs41_component *component)
Definition: name_cache.c:407
static struct name_cache_entry * name_cache_search(IN struct nfs41_name_cache *cache, IN struct name_cache_entry *parent, IN const nfs41_component *component)
Definition: name_cache.c:601

Referenced by nfs41_rename().

◆ session_name_cache()

static __inline struct nfs41_name_cache * session_name_cache ( IN nfs41_session session)
static