1.1 --- a/libfsserver/include/fsserver/file_paging.h Mon Sep 27 00:12:18 2021 +0200
1.2 +++ b/libfsserver/include/fsserver/file_paging.h Mon Sep 27 01:16:49 2021 +0200
1.3 @@ -52,6 +52,11 @@
1.4 public:
1.5 explicit FilePaging(Pages *pages);
1.6
1.7 + /* Resource discovery methods. */
1.8 +
1.9 + long find_directory_provider(fileid_t fileid,
1.10 + DirectoryProvider **directory_provider);
1.11 +
1.12 /* Resource initialisation methods. */
1.13
1.14 long get_directory(FileOpening *opening, const char *path, flags_t flags,
2.1 --- a/libfsserver/lib/files/file_paging.cc Mon Sep 27 00:12:18 2021 +0200
2.2 +++ b/libfsserver/lib/files/file_paging.cc Mon Sep 27 01:16:49 2021 +0200
2.3 @@ -46,11 +46,10 @@
2.4
2.5
2.6
2.7 -/* Obtain a provider for the 'fileid' or register a new one. */
2.8 +/* Obtain any active provider for 'fileid'. */
2.9
2.10 -long FilePaging::get_directory_provider(FileOpening *opening, const char *path,
2.11 - flags_t flags, fileid_t fileid,
2.12 - DirectoryProvider **directory_provider)
2.13 +long FilePaging::find_directory_provider(fileid_t fileid,
2.14 + DirectoryProvider **directory_provider)
2.15 {
2.16 /* Obtain any registered provider. */
2.17
2.18 @@ -66,10 +65,24 @@
2.19 return -L4_EIO;
2.20 }
2.21
2.22 + return -L4_ENOENT;
2.23 +}
2.24 +
2.25 +/* Obtain a provider for the 'fileid' or register a new one. */
2.26 +
2.27 +long FilePaging::get_directory_provider(FileOpening *opening, const char *path,
2.28 + flags_t flags, fileid_t fileid,
2.29 + DirectoryProvider **directory_provider)
2.30 +{
2.31 + long err = find_directory_provider(fileid, directory_provider);
2.32 +
2.33 + if (err != -L4_ENOENT)
2.34 + return err;
2.35 +
2.36 /* Make an accessor and a provider to encapsulate it. */
2.37
2.38 DirectoryAccessor *accessor;
2.39 - long err = opening->make_directory_accessor(path, flags, fileid, &accessor);
2.40 + err = opening->make_directory_accessor(path, flags, fileid, &accessor);
2.41
2.42 if (err)
2.43 return err;