Commit 382f4581 authored by Martin Brandenburg's avatar Martin Brandenburg Committed by Mike Marshall

orangefs: rewrite readdir to fix several bugs

In the past, readdir assumed that the user buffer will be large enough
that all entries from the server will fit.  If this was not true,
entries would be skipped.

Since it works now, request 512 entries rather than 96 per server
operation.
Signed-off-by: default avatarMartin Brandenburg <martin@omnibond.com>
Signed-off-by: default avatarMike Marshall <hubcap@omnibond.com>
parent 17930b25
This diff is collapsed.
...@@ -40,16 +40,6 @@ struct orangefs_mkdir_response { ...@@ -40,16 +40,6 @@ struct orangefs_mkdir_response {
struct orangefs_object_kref refn; struct orangefs_object_kref refn;
}; };
/*
* duplication of some system interface structures so that I don't have
* to allocate extra memory
*/
struct orangefs_dirent {
char *d_name;
int d_length;
struct orangefs_khandle khandle;
};
struct orangefs_statfs_response { struct orangefs_statfs_response {
__s64 block_size; __s64 block_size;
__s64 blocks_total; __s64 blocks_total;
...@@ -131,12 +121,16 @@ struct orangefs_downcall_s { ...@@ -131,12 +121,16 @@ struct orangefs_downcall_s {
} resp; } resp;
}; };
/*
* The readdir response comes in the trailer. It is followed by the
* directory entries as described in dir.c.
*/
struct orangefs_readdir_response_s { struct orangefs_readdir_response_s {
__u64 token; __u64 token;
__u64 directory_version; __u64 directory_version;
__u32 __pad2; __u32 __pad2;
__u32 orangefs_dirent_outcount; __u32 orangefs_dirent_outcount;
struct orangefs_dirent *dirent_array;
}; };
#endif /* __DOWNCALL_H */ #endif /* __DOWNCALL_H */
...@@ -52,12 +52,7 @@ ...@@ -52,12 +52,7 @@
*/ */
#define ORANGEFS_MAX_DEBUG_STRING_LEN 0x00000800 #define ORANGEFS_MAX_DEBUG_STRING_LEN 0x00000800
/* #define ORANGEFS_MAX_DIRENT_COUNT_READDIR 512
* The maximum number of directory entries in a single request is 96.
* XXX: Why can this not be higher. The client-side code can handle up to 512.
* XXX: What happens if we expect more than the client can return?
*/
#define ORANGEFS_MAX_DIRENT_COUNT_READDIR 96
#include "upcall.h" #include "upcall.h"
#include "downcall.h" #include "downcall.h"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment