diff options
| author | Linus Torvalds <torvalds@athlon.transmeta.com> | 2002-02-04 20:10:26 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@athlon.transmeta.com> | 2002-02-04 20:10:26 -0800 |
| commit | bb5b6e6c4dea4242f6ff75fa7adecea4f34935f1 (patch) | |
| tree | dbdda6fdd7f0bfadb4c10a997bfb15660f3223c0 /fs/buffer.c | |
| parent | 0b9ded43ee424791d9283cee2a33dcb4a97da57d (diff) | |
v2.4.8.4 -> v2.4.9
- David Miller: sparc updates, FAT fs fixes, btaudio build fix
- David Gibson: Orinoco driver update
- Kevin Fleming: more disks the HPT controller doesn't like
- David Miller: "min()/max()" cleanups. Understands signs and sizes.
- Ben LaHaise: make vma merging more generous, help Mozilla /proc/<>/maps
- Jens Axboe: CD updates
- Trond Myklebust: save away NFS credentials in inode, so that mmap can
writeout.
- Mark Hemment: HIGHMEM ops cleanups
- Jes Sorensen: use "unsigned long" for flags in various drivers
Diffstat (limited to 'fs/buffer.c')
| -rw-r--r-- | fs/buffer.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/fs/buffer.c b/fs/buffer.c index 55c416e8a63c..3a5b99524225 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -794,6 +794,17 @@ void set_blocksize(kdev_t dev, int size) goto retry; } +static void free_more_memory(void) +{ + balance_dirty(NODEV); + page_launder(GFP_NOFS, 0); + wakeup_bdflush(); + wakeup_kswapd(); + current->policy |= SCHED_YIELD; + __set_current_state(TASK_RUNNING); + schedule(); +} + /* * We used to try various strange things. Let's not. * We'll just try to balance dirty buffers, and possibly @@ -802,15 +813,8 @@ void set_blocksize(kdev_t dev, int size) */ static void refill_freelist(int size) { - if (!grow_buffers(size)) { - balance_dirty(NODEV); - page_launder(GFP_NOFS, 0); - wakeup_bdflush(); - wakeup_kswapd(); - current->policy |= SCHED_YIELD; - __set_current_state(TASK_RUNNING); - schedule(); - } + if (!grow_buffers(size)) + free_more_memory(); } void init_buffer(struct buffer_head *bh, bh_end_io_t *handler, void *private) @@ -1408,9 +1412,7 @@ no_grow: */ run_task_queue(&tq_disk); - current->policy |= SCHED_YIELD; - __set_current_state(TASK_RUNNING); - schedule(); + free_more_memory(); goto try_again; } |
