# HG changeset patch # User Paul Boddie # Date 1632698209 -7200 # Node ID b2e59748a3d8cff85cb73ab94b7884eae6622ec2 # Parent 5e038d939c9589285bca4eb24784eeb2f36aba4e Separated out the directory provider lookup for other potential usage. diff -r 5e038d939c95 -r b2e59748a3d8 libfsserver/include/fsserver/file_paging.h --- a/libfsserver/include/fsserver/file_paging.h Mon Sep 27 00:12:18 2021 +0200 +++ b/libfsserver/include/fsserver/file_paging.h Mon Sep 27 01:16:49 2021 +0200 @@ -52,6 +52,11 @@ public: explicit FilePaging(Pages *pages); + /* Resource discovery methods. */ + + long find_directory_provider(fileid_t fileid, + DirectoryProvider **directory_provider); + /* Resource initialisation methods. */ long get_directory(FileOpening *opening, const char *path, flags_t flags, diff -r 5e038d939c95 -r b2e59748a3d8 libfsserver/lib/files/file_paging.cc --- a/libfsserver/lib/files/file_paging.cc Mon Sep 27 00:12:18 2021 +0200 +++ b/libfsserver/lib/files/file_paging.cc Mon Sep 27 01:16:49 2021 +0200 @@ -46,11 +46,10 @@ -/* Obtain a provider for the 'fileid' or register a new one. */ +/* Obtain any active provider for 'fileid'. */ -long FilePaging::get_directory_provider(FileOpening *opening, const char *path, - flags_t flags, fileid_t fileid, - DirectoryProvider **directory_provider) +long FilePaging::find_directory_provider(fileid_t fileid, + DirectoryProvider **directory_provider) { /* Obtain any registered provider. */ @@ -66,10 +65,24 @@ return -L4_EIO; } + return -L4_ENOENT; +} + +/* Obtain a provider for the 'fileid' or register a new one. */ + +long FilePaging::get_directory_provider(FileOpening *opening, const char *path, + flags_t flags, fileid_t fileid, + DirectoryProvider **directory_provider) +{ + long err = find_directory_provider(fileid, directory_provider); + + if (err != -L4_ENOENT) + return err; + /* Make an accessor and a provider to encapsulate it. */ DirectoryAccessor *accessor; - long err = opening->make_directory_accessor(path, flags, fileid, &accessor); + err = opening->make_directory_accessor(path, flags, fileid, &accessor); if (err) return err;