|
@@ -45,7 +45,6 @@ struct wb_writeback_args {
|
|
unsigned int for_kupdate:1;
|
|
unsigned int for_kupdate:1;
|
|
unsigned int range_cyclic:1;
|
|
unsigned int range_cyclic:1;
|
|
unsigned int for_background:1;
|
|
unsigned int for_background:1;
|
|
- unsigned int sb_pinned:1;
|
|
|
|
};
|
|
};
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -231,11 +230,6 @@ static void bdi_sync_writeback(struct backing_dev_info *bdi,
|
|
.sync_mode = WB_SYNC_ALL,
|
|
.sync_mode = WB_SYNC_ALL,
|
|
.nr_pages = LONG_MAX,
|
|
.nr_pages = LONG_MAX,
|
|
.range_cyclic = 0,
|
|
.range_cyclic = 0,
|
|
- /*
|
|
|
|
- * Setting sb_pinned is not necessary for WB_SYNC_ALL, but
|
|
|
|
- * lets make it explicitly clear.
|
|
|
|
- */
|
|
|
|
- .sb_pinned = 1,
|
|
|
|
};
|
|
};
|
|
struct bdi_work work;
|
|
struct bdi_work work;
|
|
|
|
|
|
@@ -251,23 +245,21 @@ static void bdi_sync_writeback(struct backing_dev_info *bdi,
|
|
* @bdi: the backing device to write from
|
|
* @bdi: the backing device to write from
|
|
* @sb: write inodes from this super_block
|
|
* @sb: write inodes from this super_block
|
|
* @nr_pages: the number of pages to write
|
|
* @nr_pages: the number of pages to write
|
|
- * @sb_locked: caller already holds sb umount sem.
|
|
|
|
*
|
|
*
|
|
* Description:
|
|
* Description:
|
|
* This does WB_SYNC_NONE opportunistic writeback. The IO is only
|
|
* This does WB_SYNC_NONE opportunistic writeback. The IO is only
|
|
* started when this function returns, we make no guarentees on
|
|
* started when this function returns, we make no guarentees on
|
|
- * completion. Caller specifies whether sb umount sem is held already or not.
|
|
|
|
|
|
+ * completion. Caller need not hold sb s_umount semaphore.
|
|
*
|
|
*
|
|
*/
|
|
*/
|
|
void bdi_start_writeback(struct backing_dev_info *bdi, struct super_block *sb,
|
|
void bdi_start_writeback(struct backing_dev_info *bdi, struct super_block *sb,
|
|
- long nr_pages, int sb_locked)
|
|
|
|
|
|
+ long nr_pages)
|
|
{
|
|
{
|
|
struct wb_writeback_args args = {
|
|
struct wb_writeback_args args = {
|
|
.sb = sb,
|
|
.sb = sb,
|
|
.sync_mode = WB_SYNC_NONE,
|
|
.sync_mode = WB_SYNC_NONE,
|
|
.nr_pages = nr_pages,
|
|
.nr_pages = nr_pages,
|
|
.range_cyclic = 1,
|
|
.range_cyclic = 1,
|
|
- .sb_pinned = sb_locked,
|
|
|
|
};
|
|
};
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -592,7 +584,7 @@ static enum sb_pin_state pin_sb_for_writeback(struct writeback_control *wbc,
|
|
/*
|
|
/*
|
|
* Caller must already hold the ref for this
|
|
* Caller must already hold the ref for this
|
|
*/
|
|
*/
|
|
- if (wbc->sync_mode == WB_SYNC_ALL || wbc->sb_pinned) {
|
|
|
|
|
|
+ if (wbc->sync_mode == WB_SYNC_ALL) {
|
|
WARN_ON(!rwsem_is_locked(&sb->s_umount));
|
|
WARN_ON(!rwsem_is_locked(&sb->s_umount));
|
|
return SB_NOT_PINNED;
|
|
return SB_NOT_PINNED;
|
|
}
|
|
}
|
|
@@ -766,7 +758,6 @@ static long wb_writeback(struct bdi_writeback *wb,
|
|
.for_kupdate = args->for_kupdate,
|
|
.for_kupdate = args->for_kupdate,
|
|
.for_background = args->for_background,
|
|
.for_background = args->for_background,
|
|
.range_cyclic = args->range_cyclic,
|
|
.range_cyclic = args->range_cyclic,
|
|
- .sb_pinned = args->sb_pinned,
|
|
|
|
};
|
|
};
|
|
unsigned long oldest_jif;
|
|
unsigned long oldest_jif;
|
|
long wrote = 0;
|
|
long wrote = 0;
|
|
@@ -1214,18 +1205,6 @@ static void wait_sb_inodes(struct super_block *sb)
|
|
iput(old_inode);
|
|
iput(old_inode);
|
|
}
|
|
}
|
|
|
|
|
|
-static void __writeback_inodes_sb(struct super_block *sb, int sb_locked)
|
|
|
|
-{
|
|
|
|
- unsigned long nr_dirty = global_page_state(NR_FILE_DIRTY);
|
|
|
|
- unsigned long nr_unstable = global_page_state(NR_UNSTABLE_NFS);
|
|
|
|
- long nr_to_write;
|
|
|
|
-
|
|
|
|
- nr_to_write = nr_dirty + nr_unstable +
|
|
|
|
- (inodes_stat.nr_inodes - inodes_stat.nr_unused);
|
|
|
|
-
|
|
|
|
- bdi_start_writeback(sb->s_bdi, sb, nr_to_write, sb_locked);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* writeback_inodes_sb - writeback dirty inodes from given super_block
|
|
* writeback_inodes_sb - writeback dirty inodes from given super_block
|
|
* @sb: the superblock
|
|
* @sb: the superblock
|
|
@@ -1237,21 +1216,16 @@ static void __writeback_inodes_sb(struct super_block *sb, int sb_locked)
|
|
*/
|
|
*/
|
|
void writeback_inodes_sb(struct super_block *sb)
|
|
void writeback_inodes_sb(struct super_block *sb)
|
|
{
|
|
{
|
|
- __writeback_inodes_sb(sb, 0);
|
|
|
|
-}
|
|
|
|
-EXPORT_SYMBOL(writeback_inodes_sb);
|
|
|
|
|
|
+ unsigned long nr_dirty = global_page_state(NR_FILE_DIRTY);
|
|
|
|
+ unsigned long nr_unstable = global_page_state(NR_UNSTABLE_NFS);
|
|
|
|
+ long nr_to_write;
|
|
|
|
|
|
-/**
|
|
|
|
- * writeback_inodes_sb_locked - writeback dirty inodes from given super_block
|
|
|
|
- * @sb: the superblock
|
|
|
|
- *
|
|
|
|
- * Like writeback_inodes_sb(), except the caller already holds the
|
|
|
|
- * sb umount sem.
|
|
|
|
- */
|
|
|
|
-void writeback_inodes_sb_locked(struct super_block *sb)
|
|
|
|
-{
|
|
|
|
- __writeback_inodes_sb(sb, 1);
|
|
|
|
|
|
+ nr_to_write = nr_dirty + nr_unstable +
|
|
|
|
+ (inodes_stat.nr_inodes - inodes_stat.nr_unused);
|
|
|
|
+
|
|
|
|
+ bdi_start_writeback(sb->s_bdi, sb, nr_to_write);
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(writeback_inodes_sb);
|
|
|
|
|
|
/**
|
|
/**
|
|
* writeback_inodes_sb_if_idle - start writeback if none underway
|
|
* writeback_inodes_sb_if_idle - start writeback if none underway
|