<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/fs/nilfs2/segment.c, branch v2.6.32.52</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>nilfs2: fix irregular checkpoint creation due to data flush</title>
<updated>2009-11-03T03:32:03+00:00</updated>
<author>
<name>Ryusuke Konishi</name>
<email>konishi.ryusuke@lab.ntt.co.jp</email>
</author>
<published>2009-11-02T06:08:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=aeda7f6343e6375a832e52ff5ed389c115023ca5'/>
<id>aeda7f6343e6375a832e52ff5ed389c115023ca5</id>
<content type='text'>
When nilfs flushes out dirty data to reduce memory pressure, creation
of checkpoints is wrongly postponed.  This bug causes irregular
checkpoint creation especially in small footprint systems.

To correct this issue, a timer for the checkpoint creation has to be
continued if a log writer does not create a checkpoint.

This will do the correction.

Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When nilfs flushes out dirty data to reduce memory pressure, creation
of checkpoints is wrongly postponed.  This bug causes irregular
checkpoint creation especially in small footprint systems.

To correct this issue, a timer for the checkpoint creation has to be
continued if a log writer does not create a checkpoint.

This will do the correction.

Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>nilfs2: stop using periodic write_super callback</title>
<updated>2009-09-14T09:27:14+00:00</updated>
<author>
<name>Jiro SEKIBA</name>
<email>jir@unicus.jp</email>
</author>
<published>2009-07-22T16:33:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=1dfa27105a6cf4171c439fd40a004a0a17838115'/>
<id>1dfa27105a6cf4171c439fd40a004a0a17838115</id>
<content type='text'>
This removes nilfs_write_super and commit super block in nilfs
internal thread, instead of periodic write_super callback.

VFS layer calls -&gt;write_super callback periodically.  However,
it looks like that calling back is ommited when disk I/O is busy.
And when cleanerd (nilfs GC) is runnig, disk I/O tend to be busy thus
nilfs superblock is not synchronized as nilfs designed.

To avoid it, syncing superblock by nilfs thread instead of pdflush.

Signed-off-by: Jiro SEKIBA &lt;jir@unicus.jp&gt;
Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This removes nilfs_write_super and commit super block in nilfs
internal thread, instead of periodic write_super callback.

VFS layer calls -&gt;write_super callback periodically.  However,
it looks like that calling back is ommited when disk I/O is busy.
And when cleanerd (nilfs GC) is runnig, disk I/O tend to be busy thus
nilfs superblock is not synchronized as nilfs designed.

To avoid it, syncing superblock by nilfs thread instead of pdflush.

Signed-off-by: Jiro SEKIBA &lt;jir@unicus.jp&gt;
Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>nilfs2: fix oops due to inconsistent state in page with discrete b-tree nodes</title>
<updated>2009-08-01T13:48:32+00:00</updated>
<author>
<name>Ryusuke Konishi</name>
<email>konishi.ryusuke@lab.ntt.co.jp</email>
</author>
<published>2009-07-28T08:55:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=a97778457f22181e8c38c4cd7d7e528378738a98'/>
<id>a97778457f22181e8c38c4cd7d7e528378738a98</id>
<content type='text'>
Andrea Gelmini gave me a report that a kernel oops hit on a nilfs
filesystem with a 1KB block size when doing rsync.

This turned out to be caused by an inconsistency of dirty state
between a page and its buffers storing b-tree node blocks.

If the page had multiple buffers split over multiple logs, and if the
logs were written at a time, a dirty flag remained in the page even
every dirty flag in the buffers was cleared.

This will fix the failure by dropping the dirty flag properly for
pages with the discrete multiple b-tree nodes.

Reported-by: Andrea Gelmini &lt;andrea.gelmini@gmail.com&gt;
Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Tested-by: Andrea Gelmini &lt;andrea.gelmini@gmail.com&gt;
Cc: stable@kernel.org
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Andrea Gelmini gave me a report that a kernel oops hit on a nilfs
filesystem with a 1KB block size when doing rsync.

This turned out to be caused by an inconsistency of dirty state
between a page and its buffers storing b-tree node blocks.

If the page had multiple buffers split over multiple logs, and if the
logs were written at a time, a dirty flag remained in the page even
every dirty flag in the buffers was cleared.

This will fix the failure by dropping the dirty flag properly for
pages with the discrete multiple b-tree nodes.

Reported-by: Andrea Gelmini &lt;andrea.gelmini@gmail.com&gt;
Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Tested-by: Andrea Gelmini &lt;andrea.gelmini@gmail.com&gt;
Cc: stable@kernel.org
</pre>
</div>
</content>
</entry>
<entry>
<title>nilfs2: fix hang problem of log writer which occurs after write failures</title>
<updated>2009-07-05T01:44:20+00:00</updated>
<author>
<name>Ryusuke Konishi</name>
<email>konishi.ryusuke@lab.ntt.co.jp</email>
</author>
<published>2009-06-18T14:52:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=8227b29722fdbac72357aae155d171a5c777670c'/>
<id>8227b29722fdbac72357aae155d171a5c777670c</id>
<content type='text'>
Leandro Lucarella gave me a report that nilfs gets stuck after its
write function fails.

The problem turned out to be caused by bugs which leave writeback flag
on pages.  This fixes the problem by ensuring to clear the writeback
flag in error path.

Reported-by: Leandro Lucarella &lt;llucax@gmail.com&gt;
Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Cc: stable@kernel.org
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Leandro Lucarella gave me a report that nilfs gets stuck after its
write function fails.

The problem turned out to be caused by bugs which leave writeback flag
on pages.  This fixes the problem by ensuring to clear the writeback
flag in error path.

Reported-by: Leandro Lucarella &lt;llucax@gmail.com&gt;
Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Cc: stable@kernel.org
</pre>
</div>
</content>
</entry>
<entry>
<title>nilfs2: remove unlikely directive causing mis-conversion of error code</title>
<updated>2009-07-05T01:44:19+00:00</updated>
<author>
<name>Ryusuke Konishi</name>
<email>konishi.ryusuke@lab.ntt.co.jp</email>
</author>
<published>2009-06-18T02:42:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=0cfae3d8795f388f9de78adb0171520d19da77e9'/>
<id>0cfae3d8795f388f9de78adb0171520d19da77e9</id>
<content type='text'>
The following error code handling in nilfs_segctor_write() function
wrongly converted negative error codes to a truth value (i.e. 1):

   err = unlikely(err) ? : res;

which originaly meant to be

   err = err ? : res;

This mis-conversion caused that write or sync functions receive the
unexpected error code.  This fixes the bug by removing the unlikely
directive.

Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Cc: stable@kernel.org
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The following error code handling in nilfs_segctor_write() function
wrongly converted negative error codes to a truth value (i.e. 1):

   err = unlikely(err) ? : res;

which originaly meant to be

   err = err ? : res;

This mis-conversion caused that write or sync functions receive the
unexpected error code.  This fixes the bug by removing the unlikely
directive.

Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Cc: stable@kernel.org
</pre>
</div>
</content>
</entry>
<entry>
<title>nilfs2: eliminate removal list of segments</title>
<updated>2009-06-10T14:41:09+00:00</updated>
<author>
<name>Ryusuke Konishi</name>
<email>konishi.ryusuke@lab.ntt.co.jp</email>
</author>
<published>2009-05-16T14:44:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=071cb4b81987a28c7ac2702003cff3e61684a630'/>
<id>071cb4b81987a28c7ac2702003cff3e61684a630</id>
<content type='text'>
This will clean up the removal list of segments and the related
functions from segment.c and ioctl.c, which have hurt code
readability.

This elimination is applied by using nilfs_sufile_updatev() previously
introduced in the patch ("nilfs2: add sufile function that can modify
multiple segment usages").

Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This will clean up the removal list of segments and the related
functions from segment.c and ioctl.c, which have hurt code
readability.

This elimination is applied by using nilfs_sufile_updatev() previously
introduced in the patch ("nilfs2: add sufile function that can modify
multiple segment usages").

Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>nilfs2: fix lock order reversal in nilfs_clean_segments ioctl</title>
<updated>2009-05-11T05:54:41+00:00</updated>
<author>
<name>Ryusuke Konishi</name>
<email>konishi.ryusuke@lab.ntt.co.jp</email>
</author>
<published>2009-05-10T13:41:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=4f6b828837b4e3836f2c9ac2f0eab9773b6c1327'/>
<id>4f6b828837b4e3836f2c9ac2f0eab9773b6c1327</id>
<content type='text'>
This is a companion patch to ("nilfs2: fix possible circular locking
for get information ioctls").

This corrects lock order reversal between mm-&gt;mmap_sem and
nilfs-&gt;ns_segctor_sem in nilfs_clean_segments() which was detected by
lockdep check:

 =======================================================
 [ INFO: possible circular locking dependency detected ]
 2.6.30-rc3-nilfs-00003-g360bdc1 #7
 -------------------------------------------------------
 mmap/5294 is trying to acquire lock:
  (&amp;nilfs-&gt;ns_segctor_sem){++++.+}, at: [&lt;d0d0e846&gt;] nilfs_transaction_begin+0xb6/0x10c [nilfs2]

 but task is already holding lock:
  (&amp;mm-&gt;mmap_sem){++++++}, at: [&lt;c043700a&gt;] do_page_fault+0x1d8/0x30a

 which lock already depends on the new lock.

 the existing dependency chain (in reverse order) is:

 -&gt; #1 (&amp;mm-&gt;mmap_sem){++++++}:
        [&lt;c01470a5&gt;] __lock_acquire+0x1066/0x13b0
        [&lt;c01474a9&gt;] lock_acquire+0xba/0xdd
        [&lt;c01836bc&gt;] might_fault+0x68/0x88
        [&lt;c023c61d&gt;] copy_from_user+0x2a/0x111
        [&lt;d0d120d0&gt;] nilfs_ioctl_prepare_clean_segments+0x1d/0xf1 [nilfs2]
        [&lt;d0d0e2aa&gt;] nilfs_clean_segments+0x6d/0x1b9 [nilfs2]
        [&lt;d0d11f68&gt;] nilfs_ioctl+0x2ad/0x318 [nilfs2]
        [&lt;c01a3be7&gt;] vfs_ioctl+0x22/0x69
        [&lt;c01a408e&gt;] do_vfs_ioctl+0x460/0x499
        [&lt;c01a4107&gt;] sys_ioctl+0x40/0x5a
        [&lt;c01031a4&gt;] sysenter_do_call+0x12/0x38
        [&lt;ffffffff&gt;] 0xffffffff

 -&gt; #0 (&amp;nilfs-&gt;ns_segctor_sem){++++.+}:
        [&lt;c0146e0b&gt;] __lock_acquire+0xdcc/0x13b0
        [&lt;c01474a9&gt;] lock_acquire+0xba/0xdd
        [&lt;c0433f1d&gt;] down_read+0x2a/0x3e
        [&lt;d0d0e846&gt;] nilfs_transaction_begin+0xb6/0x10c [nilfs2]
        [&lt;d0cfe0e5&gt;] nilfs_page_mkwrite+0xe7/0x154 [nilfs2]
        [&lt;c0183b0b&gt;] __do_fault+0x165/0x376
        [&lt;c01855cd&gt;] handle_mm_fault+0x287/0x5d1
        [&lt;c043712d&gt;] do_page_fault+0x2fb/0x30a
        [&lt;c0435462&gt;] error_code+0x72/0x78
        [&lt;ffffffff&gt;] 0xffffffff

where nilfs_clean_segments() holds:

  nilfs-&gt;ns_segctor_sem -&gt; copy_from_user()
                             --&gt; page fault -&gt; mm-&gt;mmap_sem

And, page fault path may hold:

  page fault -&gt; mm-&gt;mmap_sem
         --&gt; nilfs_page_mkwrite() -&gt; nilfs-&gt;ns_segctor_sem

Even though nilfs_clean_segments() does not perform write access on
given user pages, it may cause deadlock because nilfs-&gt;ns_segctor_sem
is shared per device and mm-&gt;mmap_sem can be shared with other tasks.

To avoid this problem, this patch moves all calls of copy_from_user()
outside the nilfs-&gt;ns_segctor_sem lock in the ioctl.

Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This is a companion patch to ("nilfs2: fix possible circular locking
for get information ioctls").

This corrects lock order reversal between mm-&gt;mmap_sem and
nilfs-&gt;ns_segctor_sem in nilfs_clean_segments() which was detected by
lockdep check:

 =======================================================
 [ INFO: possible circular locking dependency detected ]
 2.6.30-rc3-nilfs-00003-g360bdc1 #7
 -------------------------------------------------------
 mmap/5294 is trying to acquire lock:
  (&amp;nilfs-&gt;ns_segctor_sem){++++.+}, at: [&lt;d0d0e846&gt;] nilfs_transaction_begin+0xb6/0x10c [nilfs2]

 but task is already holding lock:
  (&amp;mm-&gt;mmap_sem){++++++}, at: [&lt;c043700a&gt;] do_page_fault+0x1d8/0x30a

 which lock already depends on the new lock.

 the existing dependency chain (in reverse order) is:

 -&gt; #1 (&amp;mm-&gt;mmap_sem){++++++}:
        [&lt;c01470a5&gt;] __lock_acquire+0x1066/0x13b0
        [&lt;c01474a9&gt;] lock_acquire+0xba/0xdd
        [&lt;c01836bc&gt;] might_fault+0x68/0x88
        [&lt;c023c61d&gt;] copy_from_user+0x2a/0x111
        [&lt;d0d120d0&gt;] nilfs_ioctl_prepare_clean_segments+0x1d/0xf1 [nilfs2]
        [&lt;d0d0e2aa&gt;] nilfs_clean_segments+0x6d/0x1b9 [nilfs2]
        [&lt;d0d11f68&gt;] nilfs_ioctl+0x2ad/0x318 [nilfs2]
        [&lt;c01a3be7&gt;] vfs_ioctl+0x22/0x69
        [&lt;c01a408e&gt;] do_vfs_ioctl+0x460/0x499
        [&lt;c01a4107&gt;] sys_ioctl+0x40/0x5a
        [&lt;c01031a4&gt;] sysenter_do_call+0x12/0x38
        [&lt;ffffffff&gt;] 0xffffffff

 -&gt; #0 (&amp;nilfs-&gt;ns_segctor_sem){++++.+}:
        [&lt;c0146e0b&gt;] __lock_acquire+0xdcc/0x13b0
        [&lt;c01474a9&gt;] lock_acquire+0xba/0xdd
        [&lt;c0433f1d&gt;] down_read+0x2a/0x3e
        [&lt;d0d0e846&gt;] nilfs_transaction_begin+0xb6/0x10c [nilfs2]
        [&lt;d0cfe0e5&gt;] nilfs_page_mkwrite+0xe7/0x154 [nilfs2]
        [&lt;c0183b0b&gt;] __do_fault+0x165/0x376
        [&lt;c01855cd&gt;] handle_mm_fault+0x287/0x5d1
        [&lt;c043712d&gt;] do_page_fault+0x2fb/0x30a
        [&lt;c0435462&gt;] error_code+0x72/0x78
        [&lt;ffffffff&gt;] 0xffffffff

where nilfs_clean_segments() holds:

  nilfs-&gt;ns_segctor_sem -&gt; copy_from_user()
                             --&gt; page fault -&gt; mm-&gt;mmap_sem

And, page fault path may hold:

  page fault -&gt; mm-&gt;mmap_sem
         --&gt; nilfs_page_mkwrite() -&gt; nilfs-&gt;ns_segctor_sem

Even though nilfs_clean_segments() does not perform write access on
given user pages, it may cause deadlock because nilfs-&gt;ns_segctor_sem
is shared per device and mm-&gt;mmap_sem can be shared with other tasks.

To avoid this problem, this patch moves all calls of copy_from_user()
outside the nilfs-&gt;ns_segctor_sem lock in the ioctl.

Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>nilfs2: introduce secondary super block</title>
<updated>2009-04-07T15:31:20+00:00</updated>
<author>
<name>Ryusuke Konishi</name>
<email>konishi.ryusuke@lab.ntt.co.jp</email>
</author>
<published>2009-04-07T02:01:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=e339ad31f59925b48a92ee3947692fdf9758b8c7'/>
<id>e339ad31f59925b48a92ee3947692fdf9758b8c7</id>
<content type='text'>
The former versions didn't have extra super blocks.  This improves the
weak point by introducing another super block at unused region in tail of
the partition.

This doesn't break disk format compatibility; older versions just ingore
the secondary super block, and new versions just recover it if it doesn't
exist.  The partition created by an old mkfs may not have unused region,
but in that case, the secondary super block will not be added.

This doesn't make more redundant copies of the super block; it is a future
work.

Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The former versions didn't have extra super blocks.  This improves the
weak point by introducing another super block at unused region in tail of
the partition.

This doesn't break disk format compatibility; older versions just ingore
the secondary super block, and new versions just recover it if it doesn't
exist.  The partition created by an old mkfs may not have unused region,
but in that case, the secondary super block will not be added.

This doesn't make more redundant copies of the super block; it is a future
work.

Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>nilfs2: simplify handling of active state of segments</title>
<updated>2009-04-07T15:31:20+00:00</updated>
<author>
<name>Ryusuke Konishi</name>
<email>konishi.ryusuke@lab.ntt.co.jp</email>
</author>
<published>2009-04-07T02:01:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=cece552074c591970353ad48308d65f110aeaf28'/>
<id>cece552074c591970353ad48308d65f110aeaf28</id>
<content type='text'>
will reduce some lines of segment constructor.  Previously, the state was
complexly controlled through a list of segments in order to keep
consistency in meta data of usage state of segments.  Instead, this
presents ``calculated'' active flags to userland cleaner program and stop
maintaining its real flag on disk.

Only by this fake flag, the cleaner cannot exactly know if each segment is
reclaimable or not.  However, the recent extension of nilfs_sustat ioctl
struct (nilfs2-extend-nilfs_sustat-ioctl-struct.patch) can prevent the
cleaner from reclaiming in-use segment wrongly.

So, now I can apply this for simplification.

Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
will reduce some lines of segment constructor.  Previously, the state was
complexly controlled through a list of segments in order to keep
consistency in meta data of usage state of segments.  Instead, this
presents ``calculated'' active flags to userland cleaner program and stop
maintaining its real flag on disk.

Only by this fake flag, the cleaner cannot exactly know if each segment is
reclaimable or not.  However, the recent extension of nilfs_sustat ioctl
struct (nilfs2-extend-nilfs_sustat-ioctl-struct.patch) can prevent the
cleaner from reclaiming in-use segment wrongly.

So, now I can apply this for simplification.

Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>nilfs2: mark minor flag for checkpoint created by internal operation</title>
<updated>2009-04-07T15:31:19+00:00</updated>
<author>
<name>Ryusuke Konishi</name>
<email>konishi.ryusuke@lab.ntt.co.jp</email>
</author>
<published>2009-04-07T02:01:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=c96fa464a567a2a8796009af0e79bc68af73f485'/>
<id>c96fa464a567a2a8796009af0e79bc68af73f485</id>
<content type='text'>
Nilfs creates checkpoints even for garbage collection or metadata updates
such as checkpoint mode change.  So, user often sees checkpoints created
only by such internal operations.

This is inconvenient in some situations.  For example, application that
monitors checkpoints and changes them to snapshots, will fall into an
infinite loop because it cannot distinguish internally created
checkpoints.

This patch solves this sort of problem by adding a flag to checkpoint for
identification.

Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Nilfs creates checkpoints even for garbage collection or metadata updates
such as checkpoint mode change.  So, user often sees checkpoints created
only by such internal operations.

This is inconvenient in some situations.  For example, application that
monitors checkpoints and changes them to snapshots, will fall into an
infinite loop because it cannot distinguish internally created
checkpoints.

This patch solves this sort of problem by adding a flag to checkpoint for
identification.

Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</pre>
</div>
</content>
</entry>
</feed>
