On Thu, Feb 02 2012 at 11:39am -0500,
Joe Thornber <ejt@xxxxxxxxxx> wrote:
> ---
> drivers/md/dm-thin.c | 28 ++++++++++++++++++++++++++--
> 1 files changed, 26 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
> index 6ef03a2..19de11a 100644
> --- a/drivers/md/dm-thin.c
> +++ b/drivers/md/dm-thin.c
> @@ -23,6 +23,7 @@
> #define DEFERRED_SET_SIZE 64
> #define MAPPING_POOL_SIZE 1024
> #define PRISON_CELLS 1024
> +#define COMMIT_PERIOD HZ
>
> /*
> * The block size of the device holding pool data must be
> @@ -498,8 +499,10 @@ struct pool {
>
> struct workqueue_struct *wq;
> struct work_struct worker;
> + struct delayed_work waker;
>
> unsigned ref_count;
> + unsigned long last_commit_jiffies;
>
> spinlock_t lock;
> struct bio_list deferred_bios;
> @@ -1256,6 +1259,12 @@ static void process_bio(struct thin_c *tc, struct bio *bio)
> }
> }
>
> +static int need_commit_due_to_time(struct pool *pool)
> +{
> + return jiffies < pool->last_commit_jiffies ||
> + jiffies > pool->last_commit_jiffies + COMMIT_PERIOD;
> +}
> +
> static void process_deferred_bios(struct pool *pool)
> {
> unsigned long flags;
> @@ -1297,7 +1306,7 @@ static void process_deferred_bios(struct pool *pool)
> bio_list_init(&pool->deferred_flush_bios);
> spin_unlock_irqrestore(&pool->lock, flags);
>
> - if (bio_list_empty(&bios))
> + if (bio_list_empty(&bios) && !need_commit_due_to_time(pool))
> return;
Shouldn't this be:
if (bio_list_empty(&bios) || !need_commit_due_to_time(pool))
return;
?
Also, should we make the commit interval tunable (akin to ext[34]'s
'commit' mount option)? Or did you defer doing so until it proves
worthwhile?
Mike
--
dm-devel mailing list
dm-devel@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/dm-devel
[DM Crypt]
[Fedora Desktop]
[ATA RAID]
[Fedora Marketing]
[Fedora Packaging]
[Fedora SELinux]
[Yosemite Discussion]
[Yosemite Photos]
[KDE Users]
[Fedora Tools]
[Fedora Docs]