<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/fs/ubifs, branch linux-3.14.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.14.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.14.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2016-07-27T16:55:49Z</updated>
<entry>
<title>UBIFS: Implement -&gt;migratepage()</title>
<updated>2016-07-27T16:55:49Z</updated>
<author>
<name>Kirill A. Shutemov</name>
</author>
<published>2016-06-16T21:26:15Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=dde9305885fac13c528bae22c69fe6a2ec0b96b6'/>
<id>urn:sha1:dde9305885fac13c528bae22c69fe6a2ec0b96b6</id>
<content type='text'>
commit 4ac1c17b2044a1b4b2fbed74451947e905fc2992 upstream.

During page migrations UBIFS might get confused
and the following assert triggers:
[  213.480000] UBIFS assert failed in ubifs_set_page_dirty at 1451 (pid 436)
[  213.490000] CPU: 0 PID: 436 Comm: drm-stress-test Not tainted 4.4.4-00176-geaa802524636-dirty #1008
[  213.490000] Hardware name: Allwinner sun4i/sun5i Families
[  213.490000] [&lt;c0015e70&gt;] (unwind_backtrace) from [&lt;c0012cdc&gt;] (show_stack+0x10/0x14)
[  213.490000] [&lt;c0012cdc&gt;] (show_stack) from [&lt;c02ad834&gt;] (dump_stack+0x8c/0xa0)
[  213.490000] [&lt;c02ad834&gt;] (dump_stack) from [&lt;c0236ee8&gt;] (ubifs_set_page_dirty+0x44/0x50)
[  213.490000] [&lt;c0236ee8&gt;] (ubifs_set_page_dirty) from [&lt;c00fa0bc&gt;] (try_to_unmap_one+0x10c/0x3a8)
[  213.490000] [&lt;c00fa0bc&gt;] (try_to_unmap_one) from [&lt;c00fadb4&gt;] (rmap_walk+0xb4/0x290)
[  213.490000] [&lt;c00fadb4&gt;] (rmap_walk) from [&lt;c00fb1bc&gt;] (try_to_unmap+0x64/0x80)
[  213.490000] [&lt;c00fb1bc&gt;] (try_to_unmap) from [&lt;c010dc28&gt;] (migrate_pages+0x328/0x7a0)
[  213.490000] [&lt;c010dc28&gt;] (migrate_pages) from [&lt;c00d0cb0&gt;] (alloc_contig_range+0x168/0x2f4)
[  213.490000] [&lt;c00d0cb0&gt;] (alloc_contig_range) from [&lt;c010ec00&gt;] (cma_alloc+0x170/0x2c0)
[  213.490000] [&lt;c010ec00&gt;] (cma_alloc) from [&lt;c001a958&gt;] (__alloc_from_contiguous+0x38/0xd8)
[  213.490000] [&lt;c001a958&gt;] (__alloc_from_contiguous) from [&lt;c001ad44&gt;] (__dma_alloc+0x23c/0x274)
[  213.490000] [&lt;c001ad44&gt;] (__dma_alloc) from [&lt;c001ae08&gt;] (arm_dma_alloc+0x54/0x5c)
[  213.490000] [&lt;c001ae08&gt;] (arm_dma_alloc) from [&lt;c035cecc&gt;] (drm_gem_cma_create+0xb8/0xf0)
[  213.490000] [&lt;c035cecc&gt;] (drm_gem_cma_create) from [&lt;c035cf20&gt;] (drm_gem_cma_create_with_handle+0x1c/0xe8)
[  213.490000] [&lt;c035cf20&gt;] (drm_gem_cma_create_with_handle) from [&lt;c035d088&gt;] (drm_gem_cma_dumb_create+0x3c/0x48)
[  213.490000] [&lt;c035d088&gt;] (drm_gem_cma_dumb_create) from [&lt;c0341ed8&gt;] (drm_ioctl+0x12c/0x444)
[  213.490000] [&lt;c0341ed8&gt;] (drm_ioctl) from [&lt;c0121adc&gt;] (do_vfs_ioctl+0x3f4/0x614)
[  213.490000] [&lt;c0121adc&gt;] (do_vfs_ioctl) from [&lt;c0121d30&gt;] (SyS_ioctl+0x34/0x5c)
[  213.490000] [&lt;c0121d30&gt;] (SyS_ioctl) from [&lt;c000f2c0&gt;] (ret_fast_syscall+0x0/0x34)

UBIFS is using PagePrivate() which can have different meanings across
filesystems. Therefore the generic page migration code cannot handle this
case correctly.
We have to implement our own migration function which basically does a
plain copy but also duplicates the page private flag.
UBIFS is not a block device filesystem and cannot use buffer_migrate_page().

Signed-off-by: Kirill A. Shutemov &lt;kirill.shutemov@linux.intel.com&gt;
[rw: Massaged changelog, build fixes, etc...]
Signed-off-by: Richard Weinberger &lt;richard@nod.at&gt;
Acked-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>UBIFS: fix free log space calculation</title>
<updated>2014-11-14T16:59:46Z</updated>
<author>
<name>Artem Bityutskiy</name>
</author>
<published>2014-07-16T12:22:29Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=d53133bd0c8e4ad6ca63f9bb26f36cae671284ff'/>
<id>urn:sha1:d53133bd0c8e4ad6ca63f9bb26f36cae671284ff</id>
<content type='text'>
commit ba29e721eb2df6df8f33c1f248388bb037a47914 upstream.

Hu (hujianyang &lt;hujianyang@huawei.com&gt;) discovered an issue in the
'empty_log_bytes()' function, which calculates how many bytes are left in the
log:

"
If 'c-&gt;lhead_lnum + 1 == c-&gt;ltail_lnum' and 'c-&gt;lhead_offs == c-&gt;leb_size', 'h'
would equalent to 't' and 'empty_log_bytes()' would return 'c-&gt;log_bytes'
instead of 0.
"

At this point it is not clear what would be the consequences of this, and
whether this may lead to any problems, but this patch addresses the issue just
in case.

Tested-by: hujianyang &lt;hujianyang@huawei.com&gt;
Reported-by: hujianyang &lt;hujianyang@huawei.com&gt;
Signed-off-by: Artem Bityutskiy &lt;artem.bityutskiy@linux.intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>UBIFS: fix a race condition</title>
<updated>2014-11-14T16:59:46Z</updated>
<author>
<name>Artem Bityutskiy</name>
</author>
<published>2014-06-29T14:00:45Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=c68ab2f9d4e0f91e68822ee18a74058a565d225f'/>
<id>urn:sha1:c68ab2f9d4e0f91e68822ee18a74058a565d225f</id>
<content type='text'>
commit 052c28073ff26f771d44ef33952a41d18dadd255 upstream.

Hu (hujianyang@huawei.com) discovered a race condition which may lead to a
situation when UBIFS is unable to mount the file-system after an unclean
reboot. The problem is theoretical, though.

In UBIFS, we have the log, which basically a set of LEBs in a certain area. The
log has the tail and the head.

Every time user writes data to the file-system, the UBIFS journal grows, and
the log grows as well, because we append new reference nodes to the head of the
log. So the head moves forward all the time, while the log tail stays at the
same position.

At any time, the UBIFS master node points to the tail of the log. When we mount
the file-system, we scan the log, and we always start from its tail, because
this is where the master node points to. The only occasion when the tail of the
log changes is the commit operation.

The commit operation has 2 phases - "commit start" and "commit end". The former
is relatively short, and does not involve much I/O. During this phase we mostly
just build various in-memory lists of the things which have to be written to
the flash media during "commit end" phase.

During the commit start phase, what we do is we "clean" the log. Indeed, the
commit operation will index all the data in the journal, so the entire journal
"disappears", and therefore the data in the log become unneeded. So we just
move the head of the log to the next LEB, and write the CS node there. This LEB
will be the tail of the new log when the commit operation finishes.

When the "commit start" phase finishes, users may write more data to the
file-system, in parallel with the ongoing "commit end" operation. At this point
the log tail was not changed yet, it is the same as it had been before we
started the commit. The log head keeps moving forward, though.

The commit operation now needs to write the new master node, and the new master
node should point to the new log tail. After this the LEBs between the old log
tail and the new log tail can be unmapped and re-used again.

And here is the possible problem. We do 2 operations: (a) We first update the
log tail position in memory (see 'ubifs_log_end_commit()'). (b) And then we
write the master node (see the big lock of code in 'do_commit()').

But nothing prevents the log head from moving forward between (a) and (b), and
the log head may "wrap" now to the old log tail. And when the "wrap" happens,
the contends of the log tail gets erased. Now a power cut happens and we are in
trouble. We end up with the old master node pointing to the old tail, which was
erased. And replay fails because it expects the master node to point to the
correct log tail at all times.

This patch merges the abovementioned (a) and (b) operations by moving the master
node change code to the 'ubifs_log_end_commit()' function, so that it runs with
the log mutex locked, which will prevent the log from being changed benween
operations (a) and (b).

Reported-by: hujianyang &lt;hujianyang@huawei.com&gt;
Tested-by: hujianyang &lt;hujianyang@huawei.com&gt;
Signed-off-by: Artem Bityutskiy &lt;artem.bityutskiy@linux.intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>UBIFS: remove mst_mutex</title>
<updated>2014-11-14T16:59:46Z</updated>
<author>
<name>Artem Bityutskiy</name>
</author>
<published>2014-06-29T13:55:02Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=855d89e814ed6131aee8d790f5e38323e9ca2387'/>
<id>urn:sha1:855d89e814ed6131aee8d790f5e38323e9ca2387</id>
<content type='text'>
commit 07e19dff63e3d5d6500d831e36554ac9b1b0560e upstream.

The 'mst_mutex' is not needed since because 'ubifs_write_master()' is only
called on the mount path and commit path. The mount path is sequential and
there is no parallelism, and the commit path is also serialized - there is only
one commit going on at a time.

Signed-off-by: Artem Bityutskiy &lt;artem.bityutskiy@linux.intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>UBIFS: Remove incorrect assertion in shrink_tnc()</title>
<updated>2014-07-07T01:57:26Z</updated>
<author>
<name>hujianyang</name>
</author>
<published>2014-05-31T03:39:32Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=88785b28ebeaadd08840cb21ff8be87501dc1c81'/>
<id>urn:sha1:88785b28ebeaadd08840cb21ff8be87501dc1c81</id>
<content type='text'>
commit 72abc8f4b4e8574318189886de627a2bfe6cd0da upstream.

I hit the same assert failed as Dolev Raviv reported in Kernel v3.10
shows like this:

[ 9641.164028] UBIFS assert failed in shrink_tnc at 131 (pid 13297)
[ 9641.234078] CPU: 1 PID: 13297 Comm: mmap.test Tainted: G           O 3.10.40 #1
[ 9641.234116] [&lt;c0011a6c&gt;] (unwind_backtrace+0x0/0x12c) from [&lt;c000d0b0&gt;] (show_stack+0x20/0x24)
[ 9641.234137] [&lt;c000d0b0&gt;] (show_stack+0x20/0x24) from [&lt;c0311134&gt;] (dump_stack+0x20/0x28)
[ 9641.234188] [&lt;c0311134&gt;] (dump_stack+0x20/0x28) from [&lt;bf22425c&gt;] (shrink_tnc_trees+0x25c/0x350 [ubifs])
[ 9641.234265] [&lt;bf22425c&gt;] (shrink_tnc_trees+0x25c/0x350 [ubifs]) from [&lt;bf2245ac&gt;] (ubifs_shrinker+0x25c/0x310 [ubifs])
[ 9641.234307] [&lt;bf2245ac&gt;] (ubifs_shrinker+0x25c/0x310 [ubifs]) from [&lt;c00cdad8&gt;] (shrink_slab+0x1d4/0x2f8)
[ 9641.234327] [&lt;c00cdad8&gt;] (shrink_slab+0x1d4/0x2f8) from [&lt;c00d03d0&gt;] (do_try_to_free_pages+0x300/0x544)
[ 9641.234344] [&lt;c00d03d0&gt;] (do_try_to_free_pages+0x300/0x544) from [&lt;c00d0a44&gt;] (try_to_free_pages+0x2d0/0x398)
[ 9641.234363] [&lt;c00d0a44&gt;] (try_to_free_pages+0x2d0/0x398) from [&lt;c00c6a60&gt;] (__alloc_pages_nodemask+0x494/0x7e8)
[ 9641.234382] [&lt;c00c6a60&gt;] (__alloc_pages_nodemask+0x494/0x7e8) from [&lt;c00f62d8&gt;] (new_slab+0x78/0x238)
[ 9641.234400] [&lt;c00f62d8&gt;] (new_slab+0x78/0x238) from [&lt;c031081c&gt;] (__slab_alloc.constprop.42+0x1a4/0x50c)
[ 9641.234419] [&lt;c031081c&gt;] (__slab_alloc.constprop.42+0x1a4/0x50c) from [&lt;c00f80e8&gt;] (kmem_cache_alloc_trace+0x54/0x188)
[ 9641.234459] [&lt;c00f80e8&gt;] (kmem_cache_alloc_trace+0x54/0x188) from [&lt;bf227908&gt;] (do_readpage+0x168/0x468 [ubifs])
[ 9641.234553] [&lt;bf227908&gt;] (do_readpage+0x168/0x468 [ubifs]) from [&lt;bf2296a0&gt;] (ubifs_readpage+0x424/0x464 [ubifs])
[ 9641.234606] [&lt;bf2296a0&gt;] (ubifs_readpage+0x424/0x464 [ubifs]) from [&lt;c00c17c0&gt;] (filemap_fault+0x304/0x418)
[ 9641.234638] [&lt;c00c17c0&gt;] (filemap_fault+0x304/0x418) from [&lt;c00de694&gt;] (__do_fault+0xd4/0x530)
[ 9641.234665] [&lt;c00de694&gt;] (__do_fault+0xd4/0x530) from [&lt;c00e10c0&gt;] (handle_pte_fault+0x480/0xf54)
[ 9641.234690] [&lt;c00e10c0&gt;] (handle_pte_fault+0x480/0xf54) from [&lt;c00e2bf8&gt;] (handle_mm_fault+0x140/0x184)
[ 9641.234716] [&lt;c00e2bf8&gt;] (handle_mm_fault+0x140/0x184) from [&lt;c0316688&gt;] (do_page_fault+0x150/0x3ac)
[ 9641.234737] [&lt;c0316688&gt;] (do_page_fault+0x150/0x3ac) from [&lt;c000842c&gt;] (do_DataAbort+0x3c/0xa0)
[ 9641.234759] [&lt;c000842c&gt;] (do_DataAbort+0x3c/0xa0) from [&lt;c0314e38&gt;] (__dabt_usr+0x38/0x40)

After analyzing the code, I found a condition that may cause this failed
in correct operations. Thus, I think this assertion is wrong and should be
removed.

Suppose there are two clean znodes and one dirty znode in TNC. So the
per-filesystem atomic_t @clean_zn_cnt is (2). If commit start, dirty_znode
is set to COW_ZNODE in get_znodes_to_commit() in case of potentially ops
on this znode. We clear COW bit and DIRTY bit in write_index() without
@tnc_mutex locked. We don't increase @clean_zn_cnt in this place. As the
comments in write_index() shows, if another process hold @tnc_mutex and
dirty this znode after we clean it, @clean_zn_cnt would be decreased to (1).
We will increase @clean_zn_cnt to (2) with @tnc_mutex locked in
free_obsolete_znodes() to keep it right.

If shrink_tnc() performs between decrease and increase, it will release
other 2 clean znodes it holds and found @clean_zn_cnt is less than zero
(1 - 2 = -1), then hit the assertion. Because free_obsolete_znodes() will
soon correct @clean_zn_cnt and no harm to fs in this case, I think this
assertion could be removed.

2 clean zondes and 1 dirty znode, @clean_zn_cnt == 2

Thread A (commit)         Thread B (write or others)       Thread C (shrinker)
-&gt;write_index
   -&gt;clear_bit(DIRTY_NODE)
   -&gt;clear_bit(COW_ZNODE)

            @clean_zn_cnt == 2
                          -&gt;mutex_locked(&amp;tnc_mutex)
                          -&gt;dirty_cow_znode
                              -&gt;!ubifs_zn_cow(znode)
                              -&gt;!test_and_set_bit(DIRTY_NODE)
                              -&gt;atomic_dec(&amp;clean_zn_cnt)
                          -&gt;mutex_unlocked(&amp;tnc_mutex)

            @clean_zn_cnt == 1
                                                           -&gt;mutex_locked(&amp;tnc_mutex)
                                                           -&gt;shrink_tnc
                                                             -&gt;destroy_tnc_subtree
                                                             -&gt;atomic_sub(&amp;clean_zn_cnt, 2)
                                                             -&gt;ubifs_assert  &lt;- hit
                                                           -&gt;mutex_unlocked(&amp;tnc_mutex)

            @clean_zn_cnt == -1
-&gt;mutex_lock(&amp;tnc_mutex)
-&gt;free_obsolete_znodes
   -&gt;atomic_inc(&amp;clean_zn_cnt)
-&gt;mutux_unlock(&amp;tnc_mutex)

            @clean_zn_cnt == 0 (correct after shrink)

Signed-off-by: hujianyang &lt;hujianyang@huawei.com&gt;
Signed-off-by: Artem Bityutskiy &lt;artem.bityutskiy@linux.intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>UBIFS: fix an mmap and fsync race condition</title>
<updated>2014-07-07T01:57:26Z</updated>
<author>
<name>hujianyang</name>
</author>
<published>2014-04-30T06:06:06Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=d4d181f4644df34e9ff5bf5434728683265a4d5d'/>
<id>urn:sha1:d4d181f4644df34e9ff5bf5434728683265a4d5d</id>
<content type='text'>
commit 691a7c6f28ac90cccd0dbcf81348ea90b211bdd0 upstream.

There is a race condition in UBIFS:

Thread A (mmap)                        Thread B (fsync)

-&gt;__do_fault                           -&gt;write_cache_pages
   -&gt; ubifs_vm_page_mkwrite
       -&gt; budget_space
       -&gt; lock_page
       -&gt; release/convert_page_budget
       -&gt; SetPagePrivate
       -&gt; TestSetPageDirty
       -&gt; unlock_page
                                       -&gt; lock_page
                                           -&gt; TestClearPageDirty
                                           -&gt; ubifs_writepage
                                               -&gt; do_writepage
                                                   -&gt; release_budget
                                                   -&gt; ClearPagePrivate
                                                   -&gt; unlock_page
   -&gt; !(ret &amp; VM_FAULT_LOCKED)
   -&gt; lock_page
   -&gt; set_page_dirty
       -&gt; ubifs_set_page_dirty
           -&gt; TestSetPageDirty (set page dirty without budgeting)
   -&gt; unlock_page

This leads to situation where we have a diry page but no budget allocated for
this page, so further write-back may fail with -ENOSPC.

In this fix we return from page_mkwrite without performing unlock_page. We
return VM_FAULT_LOCKED instead. After doing this, the race above will not
happen.

Signed-off-by: hujianyang &lt;hujianyang@huawei.com&gt;
Tested-by: Laurence Withers &lt;lwithers@guralp.com&gt;
Signed-off-by: Artem Bityutskiy &lt;artem.bityutskiy@linux.intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>fs/ubifs: use rbtree postorder iteration helper instead of opencoding</title>
<updated>2014-01-24T00:37:03Z</updated>
<author>
<name>Cody P Schafer</name>
</author>
<published>2014-01-23T23:56:08Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=bb25e49ff8ab0ef0b3c073c09d55cf10ef8a2aa0'/>
<id>urn:sha1:bb25e49ff8ab0ef0b3c073c09d55cf10ef8a2aa0</id>
<content type='text'>
Use rbtree_postorder_for_each_entry_safe() to destroy the rbtree instead
of opencoding an alternate postorder iteration that modifies the tree

Signed-off-by: Cody P Schafer &lt;cody@linux.vnet.ibm.com&gt;
Cc: Michel Lespinasse &lt;walken@google.com&gt;
Cc: Jan Kara &lt;jack@suse.cz&gt;
Cc: Artem Bityutskiy &lt;dedekind1@gmail.com&gt;
Cc: Adrian Hunter &lt;adrian.hunter@intel.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs</title>
<updated>2013-11-13T06:34:18Z</updated>
<author>
<name>Linus Torvalds</name>
</author>
<published>2013-11-13T06:34:18Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=9bc9ccd7db1c9f043f75380b5a5b94912046a60e'/>
<id>urn:sha1:9bc9ccd7db1c9f043f75380b5a5b94912046a60e</id>
<content type='text'>
Pull vfs updates from Al Viro:
 "All kinds of stuff this time around; some more notable parts:

   - RCU'd vfsmounts handling
   - new primitives for coredump handling
   - files_lock is gone
   - Bruce's delegations handling series
   - exportfs fixes

  plus misc stuff all over the place"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (101 commits)
  ecryptfs: -&gt;f_op is never NULL
  locks: break delegations on any attribute modification
  locks: break delegations on link
  locks: break delegations on rename
  locks: helper functions for delegation breaking
  locks: break delegations on unlink
  namei: minor vfs_unlink cleanup
  locks: implement delegations
  locks: introduce new FL_DELEG lock flag
  vfs: take i_mutex on renamed file
  vfs: rename I_MUTEX_QUOTA now that it's not used for quotas
  vfs: don't use PARENT/CHILD lock classes for non-directories
  vfs: pull ext4's double-i_mutex-locking into common code
  exportfs: fix quadratic behavior in filehandle lookup
  exportfs: better variable name
  exportfs: move most of reconnect_path to helper function
  exportfs: eliminate unused "noprogress" counter
  exportfs: stop retrying once we race with rename/remove
  exportfs: clear DISCONNECTED on all parents sooner
  exportfs: more detailed comment for path_reconnect
  ...
</content>
</entry>
<entry>
<title>Merge tag 'upstream-3.13-rc1' of git://git.infradead.org/linux-ubifs</title>
<updated>2013-11-13T06:28:45Z</updated>
<author>
<name>Linus Torvalds</name>
</author>
<published>2013-11-13T06:28:45Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=fbe43ff0031ded2b8500382da17d5d815a9c3edd'/>
<id>urn:sha1:fbe43ff0031ded2b8500382da17d5d815a9c3edd</id>
<content type='text'>
Pull ubifs changes from Artem Bityutskiy:
 "Mostly fixes for the power cut emulation UBIFS mode, and only one
  functional change which fixes a return error code"

* tag 'upstream-3.13-rc1' of git://git.infradead.org/linux-ubifs:
  UBIFS: correct data corruption range
  UBIFS: fix return code
  UBIFS: remove unnecessary code in ubifs_garbage_collect
</content>
</entry>
<entry>
<title>UBIFS: correct data corruption range</title>
<updated>2013-10-26T10:33:38Z</updated>
<author>
<name>Mats Kärrman</name>
</author>
<published>2013-08-21T13:24:49Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=58a4e23703b22c331b01fbd0c12161aadaa6d50b'/>
<id>urn:sha1:58a4e23703b22c331b01fbd0c12161aadaa6d50b</id>
<content type='text'>
With power-cut emulation, it is possible that sometimes no data at all is
corrupted and that confusing messages are printed due to errors in the
computation of data corruption range.

[1] The start of the range should be [0..len-1], not [0..len].
[2] The end of the range should always be at least 1 greater than the start.

Signed-off-by: Mats Karrman &lt;mats.karrman@tritech.se&gt;
Signed-off-by: Artem Bityutskiy &lt;artem.bityutskiy@linux.intel.com&gt;
</content>
</entry>
</feed>
