.. | .. |
---|
807 | 807 | } |
---|
808 | 808 | EXPORT_SYMBOL(fscache_object_destroy); |
---|
809 | 809 | |
---|
810 | | -static DECLARE_WAIT_QUEUE_HEAD(fscache_object_cong_wait); |
---|
811 | | - |
---|
812 | 810 | /* |
---|
813 | 811 | * enqueue an object for metadata-type processing |
---|
814 | 812 | */ |
---|
.. | .. |
---|
817 | 815 | _enter("{OBJ%x}", object->debug_id); |
---|
818 | 816 | |
---|
819 | 817 | if (fscache_get_object(object, fscache_obj_get_queue) >= 0) { |
---|
| 818 | + wait_queue_head_t *cong_wq = |
---|
| 819 | + &get_cpu_var(fscache_object_cong_wait); |
---|
820 | 820 | |
---|
821 | 821 | if (queue_work(fscache_object_wq, &object->work)) { |
---|
822 | 822 | if (fscache_object_congested()) |
---|
823 | | - wake_up(&fscache_object_cong_wait); |
---|
| 823 | + wake_up(cong_wq); |
---|
824 | 824 | } else |
---|
825 | 825 | fscache_put_object(object, fscache_obj_put_queue); |
---|
| 826 | + |
---|
| 827 | + put_cpu_var(fscache_object_cong_wait); |
---|
826 | 828 | } |
---|
827 | 829 | } |
---|
828 | 830 | |
---|
.. | .. |
---|
840 | 842 | */ |
---|
841 | 843 | bool fscache_object_sleep_till_congested(signed long *timeoutp) |
---|
842 | 844 | { |
---|
| 845 | + wait_queue_head_t *cong_wq = this_cpu_ptr(&fscache_object_cong_wait); |
---|
843 | 846 | DEFINE_WAIT(wait); |
---|
844 | 847 | |
---|
845 | 848 | if (fscache_object_congested()) |
---|
846 | 849 | return true; |
---|
847 | 850 | |
---|
848 | | - add_wait_queue_exclusive(&fscache_object_cong_wait, &wait); |
---|
| 851 | + add_wait_queue_exclusive(cong_wq, &wait); |
---|
849 | 852 | if (!fscache_object_congested()) |
---|
850 | 853 | *timeoutp = schedule_timeout(*timeoutp); |
---|
851 | | - finish_wait(&fscache_object_cong_wait, &wait); |
---|
| 854 | + finish_wait(cong_wq, &wait); |
---|
852 | 855 | |
---|
853 | 856 | return fscache_object_congested(); |
---|
854 | 857 | } |
---|