writeback: do foreign inode detection iff cgroup writeback is enabled
Currently, even when a filesystem doesn't set the FS_CGROUP_WRITEBACK flag, if the filesystem uses wbc_init_bio() and wbc_account_io(), the foreign inode detection and migration logic still ends up activating cgroup writeback which is unexpected. This patch ensures that the foreign inode detection logic stays disabled when inode_cgwb_enabled() is false by not associating writeback_control's with bdi_writeback's. This also avoids unnecessary operations in wbc_init_bio(), wbc_account_io() and wbc_detach_inode() for filesystems which don't support cgroup writeback. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
Родитель
412a19b64a
Коммит
dd73e4b7df
|
@ -513,6 +513,11 @@ out_free:
|
||||||
void wbc_attach_and_unlock_inode(struct writeback_control *wbc,
|
void wbc_attach_and_unlock_inode(struct writeback_control *wbc,
|
||||||
struct inode *inode)
|
struct inode *inode)
|
||||||
{
|
{
|
||||||
|
if (!inode_cgwb_enabled(inode)) {
|
||||||
|
spin_unlock(&inode->i_lock);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
wbc->wb = inode_to_wb(inode);
|
wbc->wb = inode_to_wb(inode);
|
||||||
wbc->inode = inode;
|
wbc->inode = inode;
|
||||||
|
|
||||||
|
@ -575,11 +580,16 @@ void wbc_detach_inode(struct writeback_control *wbc)
|
||||||
{
|
{
|
||||||
struct bdi_writeback *wb = wbc->wb;
|
struct bdi_writeback *wb = wbc->wb;
|
||||||
struct inode *inode = wbc->inode;
|
struct inode *inode = wbc->inode;
|
||||||
u16 history = inode->i_wb_frn_history;
|
unsigned long avg_time, max_bytes, max_time;
|
||||||
unsigned long avg_time = inode->i_wb_frn_avg_time;
|
u16 history;
|
||||||
unsigned long max_bytes, max_time;
|
|
||||||
int max_id;
|
int max_id;
|
||||||
|
|
||||||
|
if (!wb)
|
||||||
|
return;
|
||||||
|
|
||||||
|
history = inode->i_wb_frn_history;
|
||||||
|
avg_time = inode->i_wb_frn_avg_time;
|
||||||
|
|
||||||
/* pick the winner of this round */
|
/* pick the winner of this round */
|
||||||
if (wbc->wb_bytes >= wbc->wb_lcand_bytes &&
|
if (wbc->wb_bytes >= wbc->wb_lcand_bytes &&
|
||||||
wbc->wb_bytes >= wbc->wb_tcand_bytes) {
|
wbc->wb_bytes >= wbc->wb_tcand_bytes) {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче