|
@@ -1075,73 +1075,6 @@ exp_pseudoroot(struct svc_rqst *rqstp, struct svc_fh *fhp)
|
|
|
return rv;
|
|
|
}
|
|
|
|
|
|
-/* Iterator */
|
|
|
-
|
|
|
-static void *e_start(struct seq_file *m, loff_t *pos)
|
|
|
- __acquires(((struct cache_detail *)m->private)->hash_lock)
|
|
|
-{
|
|
|
- loff_t n = *pos;
|
|
|
- unsigned hash, export;
|
|
|
- struct cache_head *ch;
|
|
|
- struct cache_detail *cd = m->private;
|
|
|
- struct cache_head **export_table = cd->hash_table;
|
|
|
-
|
|
|
- read_lock(&cd->hash_lock);
|
|
|
- if (!n--)
|
|
|
- return SEQ_START_TOKEN;
|
|
|
- hash = n >> 32;
|
|
|
- export = n & ((1LL<<32) - 1);
|
|
|
-
|
|
|
-
|
|
|
- for (ch=export_table[hash]; ch; ch=ch->next)
|
|
|
- if (!export--)
|
|
|
- return ch;
|
|
|
- n &= ~((1LL<<32) - 1);
|
|
|
- do {
|
|
|
- hash++;
|
|
|
- n += 1LL<<32;
|
|
|
- } while(hash < EXPORT_HASHMAX && export_table[hash]==NULL);
|
|
|
- if (hash >= EXPORT_HASHMAX)
|
|
|
- return NULL;
|
|
|
- *pos = n+1;
|
|
|
- return export_table[hash];
|
|
|
-}
|
|
|
-
|
|
|
-static void *e_next(struct seq_file *m, void *p, loff_t *pos)
|
|
|
-{
|
|
|
- struct cache_head *ch = p;
|
|
|
- int hash = (*pos >> 32);
|
|
|
- struct cache_detail *cd = m->private;
|
|
|
- struct cache_head **export_table = cd->hash_table;
|
|
|
-
|
|
|
- if (p == SEQ_START_TOKEN)
|
|
|
- hash = 0;
|
|
|
- else if (ch->next == NULL) {
|
|
|
- hash++;
|
|
|
- *pos += 1LL<<32;
|
|
|
- } else {
|
|
|
- ++*pos;
|
|
|
- return ch->next;
|
|
|
- }
|
|
|
- *pos &= ~((1LL<<32) - 1);
|
|
|
- while (hash < EXPORT_HASHMAX && export_table[hash] == NULL) {
|
|
|
- hash++;
|
|
|
- *pos += 1LL<<32;
|
|
|
- }
|
|
|
- if (hash >= EXPORT_HASHMAX)
|
|
|
- return NULL;
|
|
|
- ++*pos;
|
|
|
- return export_table[hash];
|
|
|
-}
|
|
|
-
|
|
|
-static void e_stop(struct seq_file *m, void *p)
|
|
|
- __releases(((struct cache_detail *)m->private)->hash_lock)
|
|
|
-{
|
|
|
- struct cache_detail *cd = m->private;
|
|
|
-
|
|
|
- read_unlock(&cd->hash_lock);
|
|
|
-}
|
|
|
-
|
|
|
static struct flags {
|
|
|
int flag;
|
|
|
char *name[2];
|
|
@@ -1270,9 +1203,9 @@ static int e_show(struct seq_file *m, void *p)
|
|
|
}
|
|
|
|
|
|
const struct seq_operations nfs_exports_op = {
|
|
|
- .start = e_start,
|
|
|
- .next = e_next,
|
|
|
- .stop = e_stop,
|
|
|
+ .start = cache_seq_start,
|
|
|
+ .next = cache_seq_next,
|
|
|
+ .stop = cache_seq_stop,
|
|
|
.show = e_show,
|
|
|
};
|
|
|
|