<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux.git/fs/nilfs2, branch v2.6.38</title>
<subtitle>Linux kernel source tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/'/>
<entry>
<title>Merge branch 'i_nlink' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6</title>
<updated>2011-03-03T23:37:59+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2011-03-03T23:37:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=8336026942fdf6a96a45057a2fe6d7f7946979d5'/>
<id>8336026942fdf6a96a45057a2fe6d7f7946979d5</id>
<content type='text'>
* 'i_nlink' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:
  hfs: fix rename() over non-empty directory
  udf: fix i_nlink limit
  fix reiserfs mkdir() breakage
  exofs: i_nlink races in rename()
  nilfs2: i_nlink races in rename()
  minix: i_nlink races in rename()
  ufs: i_nlink races in rename()
  sysv: i_nlink races in rename()
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* 'i_nlink' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:
  hfs: fix rename() over non-empty directory
  udf: fix i_nlink limit
  fix reiserfs mkdir() breakage
  exofs: i_nlink races in rename()
  nilfs2: i_nlink races in rename()
  minix: i_nlink races in rename()
  ufs: i_nlink races in rename()
  sysv: i_nlink races in rename()
</pre>
</div>
</content>
</entry>
<entry>
<title>nilfs2: i_nlink races in rename()</title>
<updated>2011-03-03T06:28:17+00:00</updated>
<author>
<name>Al Viro</name>
<email>viro@zeniv.linux.org.uk</email>
</author>
<published>2011-03-02T17:01:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=30eb43d31478f0fca28423623f3ec6af13f845fa'/>
<id>30eb43d31478f0fca28423623f3ec6af13f845fa</id>
<content type='text'>
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>nilfs2: fix regression that i-flag is not set on changeless checkpoints</title>
<updated>2011-03-02T00:55:18+00:00</updated>
<author>
<name>Ryusuke Konishi</name>
<email>konishi.ryusuke@lab.ntt.co.jp</email>
</author>
<published>2011-02-28T04:41:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=72746ac643928f6c3113b5aa783d8ea1b13949d2'/>
<id>72746ac643928f6c3113b5aa783d8ea1b13949d2</id>
<content type='text'>
According to the report from Jiro SEKIBA titled "regression in
2.6.37?"  (Message-Id: &lt;8739n8vs1f.wl%jir@sekiba.com&gt;), on 2.6.37 and
later kernels, lscp command no longer displays "i" flag on checkpoints
that snapshot operations or garbage collection created.

This is a regression of nilfs2 checkpointing function, and it's
critical since it broke behavior of a part of nilfs2 applications.
For instance, snapshot manager of TimeBrowse gets to create
meaningless snapshots continuously; snapshot creation triggers another
checkpoint, but applications cannot distinguish whether the new
checkpoint contains meaningful changes or not without the i-flag.

This patch fixes the regression and brings that application behavior
back to normal.

Reported-by: Jiro SEKIBA &lt;jir@unicus.jp&gt;
Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Tested-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Tested-by: Jiro SEKIBA &lt;jir@unicus.jp&gt;
Cc: stable &lt;stable@kernel.org&gt;  [2.6.37]
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
According to the report from Jiro SEKIBA titled "regression in
2.6.37?"  (Message-Id: &lt;8739n8vs1f.wl%jir@sekiba.com&gt;), on 2.6.37 and
later kernels, lscp command no longer displays "i" flag on checkpoints
that snapshot operations or garbage collection created.

This is a regression of nilfs2 checkpointing function, and it's
critical since it broke behavior of a part of nilfs2 applications.
For instance, snapshot manager of TimeBrowse gets to create
meaningless snapshots continuously; snapshot creation triggers another
checkpoint, but applications cannot distinguish whether the new
checkpoint contains meaningful changes or not without the i-flag.

This patch fixes the regression and brings that application behavior
back to normal.

Reported-by: Jiro SEKIBA &lt;jir@unicus.jp&gt;
Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Tested-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Tested-by: Jiro SEKIBA &lt;jir@unicus.jp&gt;
Cc: stable &lt;stable@kernel.org&gt;  [2.6.37]
</pre>
</div>
</content>
</entry>
<entry>
<title>mm: prevent concurrent unmap_mapping_range() on the same inode</title>
<updated>2011-02-24T03:52:52+00:00</updated>
<author>
<name>Miklos Szeredi</name>
<email>mszeredi@suse.cz</email>
</author>
<published>2011-02-23T12:49:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=2aa15890f3c191326678f1bd68af61ec6b8753ec'/>
<id>2aa15890f3c191326678f1bd68af61ec6b8753ec</id>
<content type='text'>
Michael Leun reported that running parallel opens on a fuse filesystem
can trigger a "kernel BUG at mm/truncate.c:475"

Gurudas Pai reported the same bug on NFS.

The reason is, unmap_mapping_range() is not prepared for more than
one concurrent invocation per inode.  For example:

  thread1: going through a big range, stops in the middle of a vma and
     stores the restart address in vm_truncate_count.

  thread2: comes in with a small (e.g. single page) unmap request on
     the same vma, somewhere before restart_address, finds that the
     vma was already unmapped up to the restart address and happily
     returns without doing anything.

Another scenario would be two big unmap requests, both having to
restart the unmapping and each one setting vm_truncate_count to its
own value.  This could go on forever without any of them being able to
finish.

Truncate and hole punching already serialize with i_mutex.  Other
callers of unmap_mapping_range() do not, and it's difficult to get
i_mutex protection for all callers.  In particular -&gt;d_revalidate(),
which calls invalidate_inode_pages2_range() in fuse, may be called
with or without i_mutex.

This patch adds a new mutex to 'struct address_space' to prevent
running multiple concurrent unmap_mapping_range() on the same mapping.

[ We'll hopefully get rid of all this with the upcoming mm
  preemptibility series by Peter Zijlstra, the "mm: Remove i_mmap_mutex
  lockbreak" patch in particular.  But that is for 2.6.39 ]

Signed-off-by: Miklos Szeredi &lt;mszeredi@suse.cz&gt;
Reported-by: Michael Leun &lt;lkml20101129@newton.leun.net&gt;
Reported-by: Gurudas Pai &lt;gurudas.pai@oracle.com&gt;
Tested-by: Gurudas Pai &lt;gurudas.pai@oracle.com&gt;
Acked-by: Hugh Dickins &lt;hughd@google.com&gt;
Cc: stable@kernel.org
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Michael Leun reported that running parallel opens on a fuse filesystem
can trigger a "kernel BUG at mm/truncate.c:475"

Gurudas Pai reported the same bug on NFS.

The reason is, unmap_mapping_range() is not prepared for more than
one concurrent invocation per inode.  For example:

  thread1: going through a big range, stops in the middle of a vma and
     stores the restart address in vm_truncate_count.

  thread2: comes in with a small (e.g. single page) unmap request on
     the same vma, somewhere before restart_address, finds that the
     vma was already unmapped up to the restart address and happily
     returns without doing anything.

Another scenario would be two big unmap requests, both having to
restart the unmapping and each one setting vm_truncate_count to its
own value.  This could go on forever without any of them being able to
finish.

Truncate and hole punching already serialize with i_mutex.  Other
callers of unmap_mapping_range() do not, and it's difficult to get
i_mutex protection for all callers.  In particular -&gt;d_revalidate(),
which calls invalidate_inode_pages2_range() in fuse, may be called
with or without i_mutex.

This patch adds a new mutex to 'struct address_space' to prevent
running multiple concurrent unmap_mapping_range() on the same mapping.

[ We'll hopefully get rid of all this with the upcoming mm
  preemptibility series by Peter Zijlstra, the "mm: Remove i_mmap_mutex
  lockbreak" patch in particular.  But that is for 2.6.39 ]

Signed-off-by: Miklos Szeredi &lt;mszeredi@suse.cz&gt;
Reported-by: Michael Leun &lt;lkml20101129@newton.leun.net&gt;
Reported-by: Gurudas Pai &lt;gurudas.pai@oracle.com&gt;
Tested-by: Gurudas Pai &lt;gurudas.pai@oracle.com&gt;
Acked-by: Hugh Dickins &lt;hughd@google.com&gt;
Cc: stable@kernel.org
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>nilfs2: fix crash after one superblock became unavailable</title>
<updated>2011-01-22T06:22:36+00:00</updated>
<author>
<name>Ryusuke Konishi</name>
<email>konishi.ryusuke@lab.ntt.co.jp</email>
</author>
<published>2011-01-21T07:40:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=0ca7a5b9ac5d301845dd6382ff25a699b6263a81'/>
<id>0ca7a5b9ac5d301845dd6382ff25a699b6263a81</id>
<content type='text'>
Fixes the following kernel oops in nilfs_setup_super() which could
arise if one of two super-blocks is unavailable.

&gt; BUG: unable to handle kernel NULL pointer dereference at   (null)
&gt; Pid: 3529, comm: mount.nilfs2 Not tainted 2.6.37 #1 /
&gt; EIP: 0060:[&lt;c03196bc&gt;] EFLAGS: 00010202 CPU: 3
&gt; EIP is at memcpy+0xc/0x1b
&gt; Call Trace:
&gt;  [&lt;f953720e&gt;] ? nilfs_setup_super+0x6c/0xa5 [nilfs2]
&gt;  [&lt;f95369e9&gt;] ? nilfs_get_root_dentry+0x81/0xcb [nilfs2]
&gt;  [&lt;f9537a08&gt;] ? nilfs_mount+0x4f9/0x62c [nilfs2]
&gt;  [&lt;c02745cf&gt;] ? kstrdup+0x36/0x3f
&gt;  [&lt;f953750f&gt;] ? nilfs_mount+0x0/0x62c [nilfs2]
&gt;  [&lt;c0293940&gt;] ? vfs_kern_mount+0x4d/0x12c
&gt;  [&lt;c02a5100&gt;] ? get_fs_type+0x76/0x8f
&gt;  [&lt;c0293a68&gt;] ? do_kern_mount+0x33/0xbf
&gt;  [&lt;c02a784a&gt;] ? do_mount+0x2ed/0x714
&gt;  [&lt;c02a6171&gt;] ? copy_mount_options+0x28/0xfc
&gt;  [&lt;c02a7ce3&gt;] ? sys_mount+0x72/0xaf
&gt;  [&lt;c0473085&gt;] ? syscall_call+0x7/0xb

Reported-by: Wakko Warner &lt;wakko@animx.eu.org&gt;
Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Tested-by: Wakko Warner &lt;wakko@animx.eu.org&gt;
Cc: stable &lt;stable@kernel.org&gt; [2.6.37, 2.6.36]
LKML-Reference: &lt;20110121024918.GA29598@animx.eu.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fixes the following kernel oops in nilfs_setup_super() which could
arise if one of two super-blocks is unavailable.

&gt; BUG: unable to handle kernel NULL pointer dereference at   (null)
&gt; Pid: 3529, comm: mount.nilfs2 Not tainted 2.6.37 #1 /
&gt; EIP: 0060:[&lt;c03196bc&gt;] EFLAGS: 00010202 CPU: 3
&gt; EIP is at memcpy+0xc/0x1b
&gt; Call Trace:
&gt;  [&lt;f953720e&gt;] ? nilfs_setup_super+0x6c/0xa5 [nilfs2]
&gt;  [&lt;f95369e9&gt;] ? nilfs_get_root_dentry+0x81/0xcb [nilfs2]
&gt;  [&lt;f9537a08&gt;] ? nilfs_mount+0x4f9/0x62c [nilfs2]
&gt;  [&lt;c02745cf&gt;] ? kstrdup+0x36/0x3f
&gt;  [&lt;f953750f&gt;] ? nilfs_mount+0x0/0x62c [nilfs2]
&gt;  [&lt;c0293940&gt;] ? vfs_kern_mount+0x4d/0x12c
&gt;  [&lt;c02a5100&gt;] ? get_fs_type+0x76/0x8f
&gt;  [&lt;c0293a68&gt;] ? do_kern_mount+0x33/0xbf
&gt;  [&lt;c02a784a&gt;] ? do_mount+0x2ed/0x714
&gt;  [&lt;c02a6171&gt;] ? copy_mount_options+0x28/0xfc
&gt;  [&lt;c02a7ce3&gt;] ? sys_mount+0x72/0xaf
&gt;  [&lt;c0473085&gt;] ? syscall_call+0x7/0xb

Reported-by: Wakko Warner &lt;wakko@animx.eu.org&gt;
Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Tested-by: Wakko Warner &lt;wakko@animx.eu.org&gt;
Cc: stable &lt;stable@kernel.org&gt; [2.6.37, 2.6.36]
LKML-Reference: &lt;20110121024918.GA29598@animx.eu.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'for-2.6.38/core' of git://git.kernel.dk/linux-2.6-block</title>
<updated>2011-01-13T18:45:01+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2011-01-13T18:45:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=275220f0fcff1adf28a717076e00f575edf05fda'/>
<id>275220f0fcff1adf28a717076e00f575edf05fda</id>
<content type='text'>
* 'for-2.6.38/core' of git://git.kernel.dk/linux-2.6-block: (43 commits)
  block: ensure that completion error gets properly traced
  blktrace: add missing probe argument to block_bio_complete
  block cfq: don't use atomic_t for cfq_group
  block cfq: don't use atomic_t for cfq_queue
  block: trace event block fix unassigned field
  block: add internal hd part table references
  block: fix accounting bug on cross partition merges
  kref: add kref_test_and_get
  bio-integrity: mark kintegrityd_wq highpri and CPU intensive
  block: make kblockd_workqueue smarter
  Revert "sd: implement sd_check_events()"
  block: Clean up exit_io_context() source code.
  Fix compile warnings due to missing removal of a 'ret' variable
  fs/block: type signature of major_to_index(int) to major_to_index(unsigned)
  block: convert !IS_ERR(p) &amp;&amp; p to !IS_ERR_NOR_NULL(p)
  cfq-iosched: don't check cfqg in choose_service_tree()
  fs/splice: Pull buf-&gt;ops-&gt;confirm() from splice_from_pipe actors
  cdrom: export cdrom_check_events()
  sd: implement sd_check_events()
  sr: implement sr_check_events()
  ...
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* 'for-2.6.38/core' of git://git.kernel.dk/linux-2.6-block: (43 commits)
  block: ensure that completion error gets properly traced
  blktrace: add missing probe argument to block_bio_complete
  block cfq: don't use atomic_t for cfq_group
  block cfq: don't use atomic_t for cfq_queue
  block: trace event block fix unassigned field
  block: add internal hd part table references
  block: fix accounting bug on cross partition merges
  kref: add kref_test_and_get
  bio-integrity: mark kintegrityd_wq highpri and CPU intensive
  block: make kblockd_workqueue smarter
  Revert "sd: implement sd_check_events()"
  block: Clean up exit_io_context() source code.
  Fix compile warnings due to missing removal of a 'ret' variable
  fs/block: type signature of major_to_index(int) to major_to_index(unsigned)
  block: convert !IS_ERR(p) &amp;&amp; p to !IS_ERR_NOR_NULL(p)
  cfq-iosched: don't check cfqg in choose_service_tree()
  fs/splice: Pull buf-&gt;ops-&gt;confirm() from splice_from_pipe actors
  cdrom: export cdrom_check_events()
  sd: implement sd_check_events()
  sr: implement sr_check_events()
  ...
</pre>
</div>
</content>
</entry>
<entry>
<title>headers: kobject.h redux</title>
<updated>2011-01-10T16:51:44+00:00</updated>
<author>
<name>Alexey Dobriyan</name>
<email>adobriyan@gmail.com</email>
</author>
<published>2011-01-10T06:18:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=57cc7215b70856dc6bae8e55b00ecd7b1d7429b1'/>
<id>57cc7215b70856dc6bae8e55b00ecd7b1d7429b1</id>
<content type='text'>
Remove kobject.h from files which don't need it, notably,
sched.h and fs.h.

Signed-off-by: Alexey Dobriyan &lt;adobriyan@gmail.com&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>
Remove kobject.h from files which don't need it, notably,
sched.h and fs.h.

Signed-off-by: Alexey Dobriyan &lt;adobriyan@gmail.com&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>nilfs2: unfold nilfs_dat_inode function</title>
<updated>2011-01-10T05:38:39+00:00</updated>
<author>
<name>Ryusuke Konishi</name>
<email>konishi.ryusuke@lab.ntt.co.jp</email>
</author>
<published>2010-12-26T15:07:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=365e215ce1f154e288ff0f7c9acbdf5421f57949'/>
<id>365e215ce1f154e288ff0f7c9acbdf5421f57949</id>
<content type='text'>
nilfs_dat_inode function was a wrapper to switch between normal dat
inode and gcdat, a clone of the dat inode for garbage collection.

This function got obsolete when the gcdat inode was removed, and now
we can access the dat inode directly from a nilfs object.  So, we will
unfold the wrapper and remove it.

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>
nilfs_dat_inode function was a wrapper to switch between normal dat
inode and gcdat, a clone of the dat inode for garbage collection.

This function got obsolete when the gcdat inode was removed, and now
we can access the dat inode directly from a nilfs object.  So, we will
unfold the wrapper and remove it.

Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>nilfs2: do not pass sbi to functions which can get it from inode</title>
<updated>2011-01-10T05:37:54+00:00</updated>
<author>
<name>Ryusuke Konishi</name>
<email>konishi.ryusuke@lab.ntt.co.jp</email>
</author>
<published>2010-12-26T15:05:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=bcbc8c648d6cc88f771435d8031c1a13e00945ed'/>
<id>bcbc8c648d6cc88f771435d8031c1a13e00945ed</id>
<content type='text'>
This removes argument for passing nilfs_sb_info structure from
nilfs_set_file_dirty and nilfs_load_inode_block functions.  We can get
a pointer to the structure from inodes.

[Stephen Rothwell &lt;sfr@canb.auug.org.au&gt;: fix conflict with commit
 b74c79e99389cd79b31fcc08f82c24e492e63c7e]

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 argument for passing nilfs_sb_info structure from
nilfs_set_file_dirty and nilfs_load_inode_block functions.  We can get
a pointer to the structure from inodes.

[Stephen Rothwell &lt;sfr@canb.auug.org.au&gt;: fix conflict with commit
 b74c79e99389cd79b31fcc08f82c24e492e63c7e]

Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>nilfs2: get rid of nilfs_mount_options structure</title>
<updated>2011-01-10T05:05:46+00:00</updated>
<author>
<name>Ryusuke Konishi</name>
<email>konishi.ryusuke@lab.ntt.co.jp</email>
</author>
<published>2010-12-26T15:04:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=06df0f999247a3153c3ec284c7ada36ef785eb97'/>
<id>06df0f999247a3153c3ec284c7ada36ef785eb97</id>
<content type='text'>
Only mount_opt member is used in the nilfs_mount_options structure,
and we can simplify it.

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>
Only mount_opt member is used in the nilfs_mount_options structure,
and we can simplify it.

Signed-off-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
</pre>
</div>
</content>
</entry>
</feed>
