Skip to content

Commit

Permalink
nfs: remove congestion_end()
Browse files Browse the repository at this point in the history
These patches aim to improve balance_dirty_pages() and directly address three
issues:
  1) inter device starvation
  2) stacked device deadlocks
  3) inter process starvation

1 and 2 are a direct result from removing the global dirty limit and using
per device dirty limits. By giving each device its own dirty limit is will
no longer starve another device, and the cyclic dependancy on the dirty limit
is broken.

In order to efficiently distribute the dirty limit across the independant
devices a floating proportion is used, this will allocate a share of the total
limit proportional to the device's recent activity.

3 is done by also scaling the dirty limit proportional to the current task's
recent dirty rate.

This patch:

nfs: remove congestion_end().  It's redundant, clear_bdi_congested() already
wakes the waiters.

Signed-off-by: Peter Zijlstra <[email protected]>
Cc: Trond Myklebust <[email protected]>
Cc: "J. Bruce Fields" <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Peter Zijlstra authored and Linus Torvalds committed Oct 17, 2007
1 parent 1f7d666 commit c4dc4be
Show file tree
Hide file tree
Showing 3 changed files with 1 addition and 17 deletions.
4 changes: 1 addition & 3 deletions fs/nfs/write.c
Original file line number Diff line number Diff line change
Expand Up @@ -242,10 +242,8 @@ static void nfs_end_page_writeback(struct page *page)
struct nfs_server *nfss = NFS_SERVER(inode);

end_page_writeback(page);
if (atomic_long_dec_return(&nfss->writeback) < NFS_CONGESTION_OFF_THRESH) {
if (atomic_long_dec_return(&nfss->writeback) < NFS_CONGESTION_OFF_THRESH)
clear_bdi_congested(&nfss->backing_dev_info, WRITE);
congestion_end(WRITE);
}
}

/*
Expand Down
1 change: 0 additions & 1 deletion include/linux/backing-dev.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,6 @@ static inline int bdi_rw_congested(struct backing_dev_info *bdi)
void clear_bdi_congested(struct backing_dev_info *bdi, int rw);
void set_bdi_congested(struct backing_dev_info *bdi, int rw);
long congestion_wait(int rw, long timeout);
void congestion_end(int rw);

#define bdi_cap_writeback_dirty(bdi) \
(!((bdi)->capabilities & BDI_CAP_NO_WRITEBACK))
Expand Down
13 changes: 0 additions & 13 deletions mm/backing-dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,16 +54,3 @@ long congestion_wait(int rw, long timeout)
return ret;
}
EXPORT_SYMBOL(congestion_wait);

/**
* congestion_end - wake up sleepers on a congested backing_dev_info
* @rw: READ or WRITE
*/
void congestion_end(int rw)
{
wait_queue_head_t *wqh = &congestion_wqh[rw];

if (waitqueue_active(wqh))
wake_up(wqh);
}
EXPORT_SYMBOL(congestion_end);

0 comments on commit c4dc4be

Please sign in to comment.