<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux/fs, branch v3.4.78</title>
<subtitle>Linux kernel source tree</subtitle>
<id>https://git.amat.us/linux/atom/fs?h=v3.4.78</id>
<link rel='self' href='https://git.amat.us/linux/atom/fs?h=v3.4.78'/>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/'/>
<updated>2014-01-29T13:10:42Z</updated>
<entry>
<title>nilfs2: fix segctor bug that causes file system corruption</title>
<updated>2014-01-29T13:10:42Z</updated>
<author>
<name>Andreas Rohner</name>
<email>andreas.rohner@gmx.net</email>
</author>
<published>2014-01-15T01:56:36Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=ddcb318f633ddd7354561fabfe6dd3c90ebbe4d5'/>
<id>urn:sha1:ddcb318f633ddd7354561fabfe6dd3c90ebbe4d5</id>
<content type='text'>
commit 70f2fe3a26248724d8a5019681a869abdaf3e89a upstream.

There is a bug in the function nilfs_segctor_collect, which results in
active data being written to a segment, that is marked as clean.  It is
possible, that this segment is selected for a later segment
construction, whereby the old data is overwritten.

The problem shows itself with the following kernel log message:

  nilfs_sufile_do_cancel_free: segment 6533 must be clean

Usually a few hours later the file system gets corrupted:

  NILFS: bad btree node (blocknr=8748107): level = 0, flags = 0x0, nchildren = 0
  NILFS error (device sdc1): nilfs_bmap_last_key: broken bmap (inode number=114660)

The issue can be reproduced with a file system that is nearly full and
with the cleaner running, while some IO intensive task is running.
Although it is quite hard to reproduce.

This is what happens:

 1. The cleaner starts the segment construction
 2. nilfs_segctor_collect is called
 3. sc_stage is on NILFS_ST_SUFILE and segments are freed
 4. sc_stage is on NILFS_ST_DAT current segment is full
 5. nilfs_segctor_extend_segments is called, which
    allocates a new segment
 6. The new segment is one of the segments freed in step 3
 7. nilfs_sufile_cancel_freev is called and produces an error message
 8. Loop around and the collection starts again
 9. sc_stage is on NILFS_ST_SUFILE and segments are freed
    including the newly allocated segment, which will contain active
    data and can be allocated at a later time
10. A few hours later another segment construction allocates the
    segment and causes file system corruption

This can be prevented by simply reordering the statements.  If
nilfs_sufile_cancel_freev is called before nilfs_segctor_extend_segments
the freed segments are marked as dirty and cannot be allocated any more.

Signed-off-by: Andreas Rohner &lt;andreas.rohner@gmx.net&gt;
Reviewed-by: Ryusuke Konishi &lt;konishi.ryusuke@lab.ntt.co.jp&gt;
Tested-by: Andreas Rohner &lt;andreas.rohner@gmx.net&gt;
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;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>jbd2: don't BUG but return ENOSPC if a handle runs out of space</title>
<updated>2014-01-08T17:42:12Z</updated>
<author>
<name>Theodore Ts'o</name>
<email>tytso@mit.edu</email>
</author>
<published>2013-12-09T02:12:59Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=db7d85d7f0137628d24dfb3415716e96a1c11833'/>
<id>urn:sha1:db7d85d7f0137628d24dfb3415716e96a1c11833</id>
<content type='text'>
commit f6c07cad081ba222d63623d913aafba5586c1d2c upstream.

If a handle runs out of space, we currently stop the kernel with a BUG
in jbd2_journal_dirty_metadata().  This makes it hard to figure out
what might be going on.  So return an error of ENOSPC, so we can let
the file system layer figure out what is going on, to make it more
likely we can get useful debugging information).  This should make it
easier to debug problems such as the one which was reported by:

    https://bugzilla.kernel.org/show_bug.cgi?id=44731

The only two callers of this function are ext4_handle_dirty_metadata()
and ocfs2_journal_dirty().  The ocfs2 function will trigger a
BUG_ON(), which means there will be no change in behavior.  The ext4
function will call ext4_error_inode() which will print the useful
debugging information and then handle the situation using ext4's error
handling mechanisms (i.e., which might mean halting the kernel or
remounting the file system read-only).

Also, since both file systems already call WARN_ON(), drop the WARN_ON
from jbd2_journal_dirty_metadata() to avoid two stack traces from
being displayed.

Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
Cc: ocfs2-devel@oss.oracle.com
Acked-by: Joel Becker &lt;jlbec@evilplan.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>GFS2: Fix incorrect invalidation for DIO/buffered I/O</title>
<updated>2014-01-08T17:42:12Z</updated>
<author>
<name>Steven Whitehouse</name>
<email>swhiteho@redhat.com</email>
</author>
<published>2013-12-18T14:14:52Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=d23a87af40a35e7bedb349d071c4a1c5dcf050e2'/>
<id>urn:sha1:d23a87af40a35e7bedb349d071c4a1c5dcf050e2</id>
<content type='text'>
commit dfd11184d894cd0a92397b25cac18831a1a6a5bc upstream.

In patch 209806aba9d540dde3db0a5ce72307f85f33468f we allowed
local deferred locks to be granted against a cached exclusive
lock. That opened up a corner case which this patch now
fixes.

The solution to the problem is to check whether we have cached
pages each time we do direct I/O and if so to unmap, flush
and invalidate those pages. Since the glock state machine
normally does that for us, mostly the code will be a no-op.

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>GFS2: don't hold s_umount over blkdev_put</title>
<updated>2014-01-08T17:42:12Z</updated>
<author>
<name>Steven Whitehouse</name>
<email>swhiteho@redhat.com</email>
</author>
<published>2013-12-06T11:52:34Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=af7cf2107d3a05709799e441a55c2a646e7b5a45'/>
<id>urn:sha1:af7cf2107d3a05709799e441a55c2a646e7b5a45</id>
<content type='text'>
commit dfe5b9ad83a63180f358b27d1018649a27b394a9 upstream.

This is a GFS2 version of Tejun's patch:
4f331f01b9c43bf001d3ffee578a97a1e0633eac
vfs: don't hold s_umount over close_bdev_exclusive() call

In this case its blkdev_put itself that is the issue and this
patch uses the same solution of dropping and retaking s_umount.

Reported-by: Tejun Heo &lt;tj@kernel.org&gt;
Reported-by: Al Viro &lt;viro@ZenIV.linux.org.uk&gt;
Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>ceph: Avoid data inconsistency due to d-cache aliasing in readpage()</title>
<updated>2014-01-08T17:42:11Z</updated>
<author>
<name>Li Wang</name>
<email>liwang@ubuntukylin.com</email>
</author>
<published>2013-11-13T07:22:14Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=e0050ac1e4b0a9340e9fc3d9d918799613b72f9a'/>
<id>urn:sha1:e0050ac1e4b0a9340e9fc3d9d918799613b72f9a</id>
<content type='text'>
commit 56f91aad69444d650237295f68c195b74d888d95 upstream.

If the length of data to be read in readpage() is exactly
PAGE_CACHE_SIZE, the original code does not flush d-cache
for data consistency after finishing reading. This patches fixes
this.

Signed-off-by: Li Wang &lt;liwang@ubuntukylin.com&gt;
Signed-off-by: Sage Weil &lt;sage@inktank.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>ext4: check for overlapping extents in ext4_valid_extent_entries()</title>
<updated>2014-01-08T17:42:11Z</updated>
<author>
<name>Eryu Guan</name>
<email>guaneryu@gmail.com</email>
</author>
<published>2013-12-04T02:22:21Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=a1192c0e5d037def6763f3873d3340615c241fe7'/>
<id>urn:sha1:a1192c0e5d037def6763f3873d3340615c241fe7</id>
<content type='text'>
commit 5946d089379a35dda0e531710b48fca05446a196 upstream.

A corrupted ext4 may have out of order leaf extents, i.e.

extent: lblk 0--1023, len 1024, pblk 9217, flags: LEAF UNINIT
extent: lblk 1000--2047, len 1024, pblk 10241, flags: LEAF UNINIT
             ^^^^ overlap with previous extent

Reading such extent could hit BUG_ON() in ext4_es_cache_extent().

	BUG_ON(end &lt; lblk);

The problem is that __read_extent_tree_block() tries to cache holes as
well but assumes 'lblk' is greater than 'prev' and passes underflowed
length to ext4_es_cache_extent(). Fix it by checking for overlapping
extents in ext4_valid_extent_entries().

I hit this when fuzz testing ext4, and am able to reproduce it by
modifying the on-disk extent by hand.

Also add the check for (ee_block + len - 1) in ext4_valid_extent() to
make sure the value is not overflow.

Ran xfstests on patched ext4 and no regression.

Cc: Lukáš Czerner &lt;lczerner@redhat.com&gt;
Signed-off-by: Eryu Guan &lt;guaneryu@gmail.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>ext4: fix use-after-free in ext4_mb_new_blocks</title>
<updated>2014-01-08T17:42:11Z</updated>
<author>
<name>Junho Ryu</name>
<email>jayr@google.com</email>
</author>
<published>2013-12-03T23:10:28Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=510e024d1e74bb0f574d14ee19436a56ed4fc476'/>
<id>urn:sha1:510e024d1e74bb0f574d14ee19436a56ed4fc476</id>
<content type='text'>
commit 4e8d2139802ce4f41936a687f06c560b12115247 upstream.

ext4_mb_put_pa should hold pa-&gt;pa_lock before accessing pa-&gt;pa_count.
While ext4_mb_use_preallocated checks pa-&gt;pa_deleted first and then
increments pa-&gt;count later, ext4_mb_put_pa decrements pa-&gt;pa_count
before holding pa-&gt;pa_lock and then sets pa-&gt;pa_deleted.

* Free sequence
ext4_mb_put_pa (1):		atomic_dec_and_test pa-&gt;pa_count
ext4_mb_put_pa (2):		lock pa-&gt;pa_lock
ext4_mb_put_pa (3):			check pa-&gt;pa_deleted
ext4_mb_put_pa (4):			set pa-&gt;pa_deleted=1
ext4_mb_put_pa (5):		unlock pa-&gt;pa_lock
ext4_mb_put_pa (6):		remove pa from a list
ext4_mb_pa_callback:		free pa

* Use sequence
ext4_mb_use_preallocated (1):	iterate over preallocation
ext4_mb_use_preallocated (2):	lock pa-&gt;pa_lock
ext4_mb_use_preallocated (3):		check pa-&gt;pa_deleted
ext4_mb_use_preallocated (4):		increase pa-&gt;pa_count
ext4_mb_use_preallocated (5):	unlock pa-&gt;pa_lock
ext4_mb_release_context:	access pa

* Use-after-free sequence
[initial status]		&lt;pa-&gt;pa_deleted = 0, pa_count = 1&gt;
ext4_mb_use_preallocated (1):	iterate over preallocation
ext4_mb_use_preallocated (2):	lock pa-&gt;pa_lock
ext4_mb_use_preallocated (3):		check pa-&gt;pa_deleted
ext4_mb_put_pa (1):		atomic_dec_and_test pa-&gt;pa_count
[pa_count decremented]		&lt;pa-&gt;pa_deleted = 0, pa_count = 0&gt;
ext4_mb_use_preallocated (4):		increase pa-&gt;pa_count
[pa_count incremented]		&lt;pa-&gt;pa_deleted = 0, pa_count = 1&gt;
ext4_mb_use_preallocated (5):	unlock pa-&gt;pa_lock
ext4_mb_put_pa (2):		lock pa-&gt;pa_lock
ext4_mb_put_pa (3):			check pa-&gt;pa_deleted
ext4_mb_put_pa (4):			set pa-&gt;pa_deleted=1
[race condition!]		&lt;pa-&gt;pa_deleted = 1, pa_count = 1&gt;
ext4_mb_put_pa (5):		unlock pa-&gt;pa_lock
ext4_mb_put_pa (6):		remove pa from a list
ext4_mb_pa_callback:		free pa
ext4_mb_release_context:	access pa

AddressSanitizer has detected use-after-free in ext4_mb_new_blocks
Bug report: http://goo.gl/rG1On3

Signed-off-by: Junho Ryu &lt;jayr@google.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>ceph: wake up 'safe' waiters when unregistering request</title>
<updated>2014-01-08T17:42:10Z</updated>
<author>
<name>Yan, Zheng</name>
<email>zheng.z.yan@intel.com</email>
</author>
<published>2013-10-31T01:10:47Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=bb4e90afb0b16996ff921762ab4212db0f40535f'/>
<id>urn:sha1:bb4e90afb0b16996ff921762ab4212db0f40535f</id>
<content type='text'>
commit fc55d2c9448b34218ca58733a6f51fbede09575b upstream.

We also need to wake up 'safe' waiters if error occurs or request
aborted. Otherwise sync(2)/fsync(2) may hang forever.

Signed-off-by: Yan, Zheng &lt;zheng.z.yan@intel.com&gt;
Signed-off-by: Sage Weil &lt;sage@inktank.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>ceph: cleanup aborted requests when re-sending requests.</title>
<updated>2014-01-08T17:42:10Z</updated>
<author>
<name>Yan, Zheng</name>
<email>zheng.z.yan@intel.com</email>
</author>
<published>2013-09-26T06:25:36Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=1461d4c794c2f98ebdd9d60f47a08c09dc4ce453'/>
<id>urn:sha1:1461d4c794c2f98ebdd9d60f47a08c09dc4ce453</id>
<content type='text'>
commit eb1b8af33c2e42a9a57fc0a7588f4a7b255d2e79 upstream.

Aborted requests usually get cleared when the reply is received.
If MDS crashes, no reply will be received. So we need to cleanup
aborted requests when re-sending requests.

Signed-off-by: Yan, Zheng &lt;zheng.z.yan@intel.com&gt;
Reviewed-by: Greg Farnum &lt;greg@inktank.com&gt;
Signed-off-by: Sage Weil &lt;sage@inktank.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>hpfs: fix warnings when the filesystem fills up</title>
<updated>2013-12-20T15:34:21Z</updated>
<author>
<name>Mikulas Patocka</name>
<email>mikulas@artax.karlin.mff.cuni.cz</email>
</author>
<published>2013-06-08T23:25:57Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=0e755a93423dd7f32112e50148f953245051095d'/>
<id>urn:sha1:0e755a93423dd7f32112e50148f953245051095d</id>
<content type='text'>
commit bbd465df73f0d8ba41b8a0732766a243d0f5b356 upstream.

This patch fixes warnings due to missing lock on write error path.

  WARNING: at fs/hpfs/hpfs_fn.h:353 hpfs_truncate+0x75/0x80 [hpfs]()
  Hardware name: empty
  Pid: 26563, comm: dd Tainted: P           O 3.9.4 #12
  Call Trace:
    hpfs_truncate+0x75/0x80 [hpfs]
    hpfs_write_begin+0x84/0x90 [hpfs]
    _hpfs_bmap+0x10/0x10 [hpfs]
    generic_file_buffered_write+0x121/0x2c0
    __generic_file_aio_write+0x1c7/0x3f0
    generic_file_aio_write+0x7c/0x100
    do_sync_write+0x98/0xd0
    hpfs_file_write+0xd/0x50 [hpfs]
    vfs_write+0xa2/0x160
    sys_write+0x51/0xa0
    page_fault+0x22/0x30
    system_call_fastpath+0x1a/0x1f

Signed-off-by: Mikulas Patocka &lt;mikulas@artax.karlin.mff.cuni.cz&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
</feed>
