diff options
author | Pavel Emelianov <xemul@sw.ru> | 2007-07-16 02:39:52 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-16 12:05:41 -0400 |
commit | a6a8bd6d2839f7134f191c6e13e2fd2e9e8c91a6 (patch) | |
tree | 21714dcd131324d7032a5411b0af58c0451d4430 | |
parent | b4ef0296f214a1e0e65f161f88663b0ca1acca31 (diff) |
Make AFS use seq_list_xxx helpers
These proc files show some header before dumping the list, so the
seq_list_start_head() is used.
Signed-off-by: Pavel Emelianov <xemul@openvz.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | fs/afs/proc.c | 81 |
1 files changed, 11 insertions, 70 deletions
diff --git a/fs/afs/proc.c b/fs/afs/proc.c index 13df512aea9e..6edb56683b9a 100644 --- a/fs/afs/proc.c +++ b/fs/afs/proc.c | |||
@@ -201,23 +201,9 @@ static int afs_proc_cells_open(struct inode *inode, struct file *file) | |||
201 | */ | 201 | */ |
202 | static void *afs_proc_cells_start(struct seq_file *m, loff_t *_pos) | 202 | static void *afs_proc_cells_start(struct seq_file *m, loff_t *_pos) |
203 | { | 203 | { |
204 | struct list_head *_p; | ||
205 | loff_t pos = *_pos; | ||
206 | |||
207 | /* lock the list against modification */ | 204 | /* lock the list against modification */ |
208 | down_read(&afs_proc_cells_sem); | 205 | down_read(&afs_proc_cells_sem); |
209 | 206 | return seq_list_start_head(&afs_proc_cells, *_pos); | |
210 | /* allow for the header line */ | ||
211 | if (!pos) | ||
212 | return (void *) 1; | ||
213 | pos--; | ||
214 | |||
215 | /* find the n'th element in the list */ | ||
216 | list_for_each(_p, &afs_proc_cells) | ||
217 | if (!pos--) | ||
218 | break; | ||
219 | |||
220 | return _p != &afs_proc_cells ? _p : NULL; | ||
221 | } | 207 | } |
222 | 208 | ||
223 | /* | 209 | /* |
@@ -225,14 +211,7 @@ static void *afs_proc_cells_start(struct seq_file *m, loff_t *_pos) | |||
225 | */ | 211 | */ |
226 | static void *afs_proc_cells_next(struct seq_file *p, void *v, loff_t *pos) | 212 | static void *afs_proc_cells_next(struct seq_file *p, void *v, loff_t *pos) |
227 | { | 213 | { |
228 | struct list_head *_p; | 214 | return seq_list_next(v, &afs_proc_cells, pos); |
229 | |||
230 | (*pos)++; | ||
231 | |||
232 | _p = v; | ||
233 | _p = v == (void *) 1 ? afs_proc_cells.next : _p->next; | ||
234 | |||
235 | return _p != &afs_proc_cells ? _p : NULL; | ||
236 | } | 215 | } |
237 | 216 | ||
238 | /* | 217 | /* |
@@ -250,7 +229,7 @@ static int afs_proc_cells_show(struct seq_file *m, void *v) | |||
250 | { | 229 | { |
251 | struct afs_cell *cell = list_entry(v, struct afs_cell, proc_link); | 230 | struct afs_cell *cell = list_entry(v, struct afs_cell, proc_link); |
252 | 231 | ||
253 | if (v == (void *) 1) { | 232 | if (v == &afs_proc_cells) { |
254 | /* display header on line 1 */ | 233 | /* display header on line 1 */ |
255 | seq_puts(m, "USE NAME\n"); | 234 | seq_puts(m, "USE NAME\n"); |
256 | return 0; | 235 | return 0; |
@@ -503,26 +482,13 @@ static int afs_proc_cell_volumes_release(struct inode *inode, struct file *file) | |||
503 | */ | 482 | */ |
504 | static void *afs_proc_cell_volumes_start(struct seq_file *m, loff_t *_pos) | 483 | static void *afs_proc_cell_volumes_start(struct seq_file *m, loff_t *_pos) |
505 | { | 484 | { |
506 | struct list_head *_p; | ||
507 | struct afs_cell *cell = m->private; | 485 | struct afs_cell *cell = m->private; |
508 | loff_t pos = *_pos; | ||
509 | 486 | ||
510 | _enter("cell=%p pos=%Ld", cell, *_pos); | 487 | _enter("cell=%p pos=%Ld", cell, *_pos); |
511 | 488 | ||
512 | /* lock the list against modification */ | 489 | /* lock the list against modification */ |
513 | down_read(&cell->vl_sem); | 490 | down_read(&cell->vl_sem); |
514 | 491 | return seq_list_start_head(&cell->vl_list, *_pos); | |
515 | /* allow for the header line */ | ||
516 | if (!pos) | ||
517 | return (void *) 1; | ||
518 | pos--; | ||
519 | |||
520 | /* find the n'th element in the list */ | ||
521 | list_for_each(_p, &cell->vl_list) | ||
522 | if (!pos--) | ||
523 | break; | ||
524 | |||
525 | return _p != &cell->vl_list ? _p : NULL; | ||
526 | } | 492 | } |
527 | 493 | ||
528 | /* | 494 | /* |
@@ -531,17 +497,10 @@ static void *afs_proc_cell_volumes_start(struct seq_file *m, loff_t *_pos) | |||
531 | static void *afs_proc_cell_volumes_next(struct seq_file *p, void *v, | 497 | static void *afs_proc_cell_volumes_next(struct seq_file *p, void *v, |
532 | loff_t *_pos) | 498 | loff_t *_pos) |
533 | { | 499 | { |
534 | struct list_head *_p; | ||
535 | struct afs_cell *cell = p->private; | 500 | struct afs_cell *cell = p->private; |
536 | 501 | ||
537 | _enter("cell=%p pos=%Ld", cell, *_pos); | 502 | _enter("cell=%p pos=%Ld", cell, *_pos); |
538 | 503 | return seq_list_next(v, &cell->vl_list, _pos); | |
539 | (*_pos)++; | ||
540 | |||
541 | _p = v; | ||
542 | _p = (v == (void *) 1) ? cell->vl_list.next : _p->next; | ||
543 | |||
544 | return (_p != &cell->vl_list) ? _p : NULL; | ||
545 | } | 504 | } |
546 | 505 | ||
547 | /* | 506 | /* |
@@ -569,11 +528,12 @@ const char afs_vlocation_states[][4] = { | |||
569 | */ | 528 | */ |
570 | static int afs_proc_cell_volumes_show(struct seq_file *m, void *v) | 529 | static int afs_proc_cell_volumes_show(struct seq_file *m, void *v) |
571 | { | 530 | { |
531 | struct afs_cell *cell = m->private; | ||
572 | struct afs_vlocation *vlocation = | 532 | struct afs_vlocation *vlocation = |
573 | list_entry(v, struct afs_vlocation, link); | 533 | list_entry(v, struct afs_vlocation, link); |
574 | 534 | ||
575 | /* display header on line 1 */ | 535 | /* display header on line 1 */ |
576 | if (v == (void *) 1) { | 536 | if (v == &cell->vl_list) { |
577 | seq_puts(m, "USE STT VLID[0] VLID[1] VLID[2] NAME\n"); | 537 | seq_puts(m, "USE STT VLID[0] VLID[1] VLID[2] NAME\n"); |
578 | return 0; | 538 | return 0; |
579 | } | 539 | } |
@@ -734,26 +694,13 @@ static int afs_proc_cell_servers_release(struct inode *inode, | |||
734 | static void *afs_proc_cell_servers_start(struct seq_file *m, loff_t *_pos) | 694 | static void *afs_proc_cell_servers_start(struct seq_file *m, loff_t *_pos) |
735 | __acquires(m->private->servers_lock) | 695 | __acquires(m->private->servers_lock) |
736 | { | 696 | { |
737 | struct list_head *_p; | ||
738 | struct afs_cell *cell = m->private; | 697 | struct afs_cell *cell = m->private; |
739 | loff_t pos = *_pos; | ||
740 | 698 | ||
741 | _enter("cell=%p pos=%Ld", cell, *_pos); | 699 | _enter("cell=%p pos=%Ld", cell, *_pos); |
742 | 700 | ||
743 | /* lock the list against modification */ | 701 | /* lock the list against modification */ |
744 | read_lock(&cell->servers_lock); | 702 | read_lock(&cell->servers_lock); |
745 | 703 | return seq_list_start_head(&cell->servers, *_pos); | |
746 | /* allow for the header line */ | ||
747 | if (!pos) | ||
748 | return (void *) 1; | ||
749 | pos--; | ||
750 | |||
751 | /* find the n'th element in the list */ | ||
752 | list_for_each(_p, &cell->servers) | ||
753 | if (!pos--) | ||
754 | break; | ||
755 | |||
756 | return _p != &cell->servers ? _p : NULL; | ||
757 | } | 704 | } |
758 | 705 | ||
759 | /* | 706 | /* |
@@ -762,17 +709,10 @@ static void *afs_proc_cell_servers_start(struct seq_file *m, loff_t *_pos) | |||
762 | static void *afs_proc_cell_servers_next(struct seq_file *p, void *v, | 709 | static void *afs_proc_cell_servers_next(struct seq_file *p, void *v, |
763 | loff_t *_pos) | 710 | loff_t *_pos) |
764 | { | 711 | { |
765 | struct list_head *_p; | ||
766 | struct afs_cell *cell = p->private; | 712 | struct afs_cell *cell = p->private; |
767 | 713 | ||
768 | _enter("cell=%p pos=%Ld", cell, *_pos); | 714 | _enter("cell=%p pos=%Ld", cell, *_pos); |
769 | 715 | return seq_list_next(v, &cell->servers, _pos); | |
770 | (*_pos)++; | ||
771 | |||
772 | _p = v; | ||
773 | _p = v == (void *) 1 ? cell->servers.next : _p->next; | ||
774 | |||
775 | return _p != &cell->servers ? _p : NULL; | ||
776 | } | 716 | } |
777 | 717 | ||
778 | /* | 718 | /* |
@@ -791,11 +731,12 @@ static void afs_proc_cell_servers_stop(struct seq_file *p, void *v) | |||
791 | */ | 731 | */ |
792 | static int afs_proc_cell_servers_show(struct seq_file *m, void *v) | 732 | static int afs_proc_cell_servers_show(struct seq_file *m, void *v) |
793 | { | 733 | { |
734 | struct afs_cell *cell = m->private; | ||
794 | struct afs_server *server = list_entry(v, struct afs_server, link); | 735 | struct afs_server *server = list_entry(v, struct afs_server, link); |
795 | char ipaddr[20]; | 736 | char ipaddr[20]; |
796 | 737 | ||
797 | /* display header on line 1 */ | 738 | /* display header on line 1 */ |
798 | if (v == (void *) 1) { | 739 | if (v == &cell->servers) { |
799 | seq_puts(m, "USE ADDR STATE\n"); | 740 | seq_puts(m, "USE ADDR STATE\n"); |
800 | return 0; | 741 | return 0; |
801 | } | 742 | } |