Hi,

here the changes

Thank in advance,
David Arendt

On 03/29/10 05:59, Ryusuke Konishi wrote:
> Hi,
> On Sun, 28 Mar 2010 23:52:52 +0200, David Arendt <[email protected]> wrote:
>   
>> Hi,
>>
>> thanks for applying the patches. I did all my tests on 2 gbyte loop
>> devices and now that it is officially in git, I deployed it to some
>> production systems with big disks. Here I have noticed, that I have
>> completely forgotten the reserved segments. Technically this is not a
>> problem, but I think people changing configuration files will tend to
>> forget about it. I'm thinking it might be useful to add them internally
>> to min_free_segments and max_free_segments so users don't need to worry
>> about them. What do you think ?
>>     
> Ahh, we should take into account the number of reserved segments.  If
> not so, cleaner control with the two threshold values will not work
> properly for large drives.
>
>   
>> If you like to change the current behavior to this behavior, I will
>> submit a short update patch.
>>     
> Yes, please do.
>
>   
>> I am thinking about getting the number of reserved segments this way:
>>
>> (nilfs_cleanerd->c_nilfs->n_sb->s_nsegments *
>> nilfs_cleanerd->c_nilfs->n_sb->s_r_segments_percentage) / 100
>>
>> or do you know any better way ?
>>     
> The kernel code calulates the number by:
>
>   = max(NILFS_MIN_NRSVSEGS,
>         DIV_ROUND_UP(nsegments * r_segments_percentage, 100))
>
>   where NILFS_MIN_NRSVSEGS is defined in include/nilfs2_fs.h, and
>   DIV_ROUND_UP is defined as follows:
>
>  #define DIV_ROUND_UP(n,d)    (((n) +  (d) - 1) / (d))
>
> The same or some equivelent calculation seems preferable.
>  
> With regards,
> Ryusuke Konishi
>
>   
>> On 03/28/10 17:26, Ryusuke Konishi wrote:
>>     
>>> Hi,
>>> On Sun, 28 Mar 2010 14:17:00 +0200, David Arendt <[email protected]> wrote:
>>>   
>>>       
>>>> Hi,
>>>>
>>>> here the nogc patch
>>>>
>>>> As changelog description for this one, we could put:
>>>>
>>>> add mount option to disable garbage collection
>>>>
>>>> Thanks in advance
>>>> Bye,
>>>> David Arendt
>>>>     
>>>>         
>>> Hmm, the patch looks perfect.
>>>
>>> Will queue both in the git tree of utils.
>>>
>>> Thanks,
>>> Ryusuke Konishi
>>>   
>>>       
>>     

diff -ur nilfs2-utils.orig/sbin/cleanerd/cleanerd.c 
nilfs2-utils/sbin/cleanerd/cleanerd.c
--- nilfs2-utils.orig/sbin/cleanerd/cleanerd.c  2010-03-29 06:05:51.382126765 
+0200
+++ nilfs2-utils/sbin/cleanerd/cleanerd.c       2010-03-29 06:32:09.129775882 
+0200
@@ -1185,7 +1185,7 @@
 static int nilfs_cleanerd_clean_loop(struct nilfs_cleanerd *cleanerd)
 {
        struct nilfs_sustat sustat;
-       __u64 prev_nongc_ctime = 0, prottime = 0, oldest = 0;
+       __u64 r_segments, prev_nongc_ctime = 0, prottime = 0, oldest = 0;
        __u64 segnums[NILFS_CLDCONFIG_NSEGMENTS_PER_CLEAN_MAX];
        struct timespec timeout;
        sigset_t sigset;
@@ -1215,6 +1215,10 @@
 
        cleanerd->c_ncleansegs = cleanerd->c_config.cf_nsegments_per_clean;
 
+       r_segments = ((nilfs_cleanerd->c_nilfs->n_sb->s_nsegments * 
nilfs_cleanerd->c_nilfs->n_sb->s_r_segments_percentage) + 99) / 100;
+       if (r_segments < NILFS_MIN_NRSVSEGS)
+               r_segments = NILFS_MIN_NRSVSEGS;
+
        if (cleanerd->c_config.cf_min_clean_segments > 0)
                nilfs_cleanerd_clean_check_pause(cleanerd, &timeout);
        else
@@ -1242,13 +1246,13 @@
 
                if (cleanerd->c_config.cf_min_clean_segments > 0) {
                        if (cleanerd->c_running) {
-                               if (sustat.ss_ncleansegs > 
cleanerd->c_config.cf_max_clean_segments) {
+                               if (sustat.ss_ncleansegs > 
cleanerd->c_config.cf_max_clean_segments + r_segments) {
                                        
nilfs_cleanerd_clean_check_pause(cleanerd, &timeout);
                                        goto sleep;
                                }
                        }
                        else {
-                               if (sustat.ss_ncleansegs < 
cleanerd->c_config.cf_min_clean_segments)
+                               if (sustat.ss_ncleansegs < 
cleanerd->c_config.cf_min_clean_segments + r_segments)
                                        
nilfs_cleanerd_clean_check_resume(cleanerd);
                                else
                                        goto sleep;

Reply via email to