All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
From: Luis Henriques <luis.henriques@canonical.com>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org,
	kernel-team@lists.ubuntu.com
Cc: Filipe Manana <fdmanana@suse.com>,
	Luis Henriques <luis.henriques@canonical.com>
Subject: [PATCH 3.16.y-ckt 025/126] Btrfs: fix file corruption and data loss after cloning inline extents
Date: Wed,  9 Dec 2015 09:36:35 +0000	[thread overview]
Message-ID: <1449653896-5236-26-git-send-email-luis.henriques@canonical.com> (raw)
In-Reply-To: <1449653896-5236-1-git-send-email-luis.henriques@canonical.com>

3.16.7-ckt21 -stable review patch.  If anyone has any objections, please let me know.

------------------

From: Filipe Manana <fdmanana@suse.com>

commit 8039d87d9e473aeb740d4fdbd59b9d2f89b2ced9 upstream.

Currently the clone ioctl allows to clone an inline extent from one file
to another that already has other (non-inlined) extents. This is a problem
because btrfs is not designed to deal with files having inline and regular
extents, if a file has an inline extent then it must be the only extent
in the file and must start at file offset 0. Having a file with an inline
extent followed by regular extents results in EIO errors when doing reads
or writes against the first 4K of the file.

Also, the clone ioctl allows one to lose data if the source file consists
of a single inline extent, with a size of N bytes, and the destination
file consists of a single inline extent with a size of M bytes, where we
have M > N. In this case the clone operation removes the inline extent
from the destination file and then copies the inline extent from the
source file into the destination file - we lose the M - N bytes from the
destination file, a read operation will get the value 0x00 for any bytes
in the the range [N, M] (the destination inode's i_size remained as M,
that's why we can read past N bytes).

So fix this by not allowing such destructive operations to happen and
return errno EOPNOTSUPP to user space.

Currently the fstest btrfs/035 tests the data loss case but it totally
ignores this - i.e. expects the operation to succeed and does not check
the we got data loss.

The following test case for fstests exercises all these cases that result
in file corruption and data loss:

  seq=`basename $0`
  seqres=$RESULT_DIR/$seq
  echo "QA output created by $seq"
  tmp=/tmp/$$
  status=1	# failure is the default!
  trap "_cleanup; exit \$status" 0 1 2 3 15

  _cleanup()
  {
      rm -f $tmp.*
  }

  # get standard environment, filters and checks
  . ./common/rc
  . ./common/filter

  # real QA test starts here
  _need_to_be_root
  _supported_fs btrfs
  _supported_os Linux
  _require_scratch
  _require_cloner
  _require_btrfs_fs_feature "no_holes"
  _require_btrfs_mkfs_feature "no-holes"

  rm -f $seqres.full

  test_cloning_inline_extents()
  {
      local mkfs_opts=$1
      local mount_opts=$2

      _scratch_mkfs $mkfs_opts >>$seqres.full 2>&1
      _scratch_mount $mount_opts

      # File bar, the source for all the following clone operations, consists
      # of a single inline extent (50 bytes).
      $XFS_IO_PROG -f -c "pwrite -S 0xbb 0 50" $SCRATCH_MNT/bar \
          | _filter_xfs_io

      # Test cloning into a file with an extent (non-inlined) where the
      # destination offset overlaps that extent. It should not be possible to
      # clone the inline extent from file bar into this file.
      $XFS_IO_PROG -f -c "pwrite -S 0xaa 0K 16K" $SCRATCH_MNT/foo \
          | _filter_xfs_io
      $CLONER_PROG -s 0 -d 0 -l 0 $SCRATCH_MNT/bar $SCRATCH_MNT/foo

      # Doing IO against any range in the first 4K of the file should work.
      # Due to a past clone ioctl bug which allowed cloning the inline extent,
      # these operations resulted in EIO errors.
      echo "File foo data after clone operation:"
      # All bytes should have the value 0xaa (clone operation failed and did
      # not modify our file).
      od -t x1 $SCRATCH_MNT/foo
      $XFS_IO_PROG -c "pwrite -S 0xcc 0 100" $SCRATCH_MNT/foo | _filter_xfs_io

      # Test cloning the inline extent against a file which has a hole in its
      # first 4K followed by a non-inlined extent. It should not be possible
      # as well to clone the inline extent from file bar into this file.
      $XFS_IO_PROG -f -c "pwrite -S 0xdd 4K 12K" $SCRATCH_MNT/foo2 \
          | _filter_xfs_io
      $CLONER_PROG -s 0 -d 0 -l 0 $SCRATCH_MNT/bar $SCRATCH_MNT/foo2

      # Doing IO against any range in the first 4K of the file should work.
      # Due to a past clone ioctl bug which allowed cloning the inline extent,
      # these operations resulted in EIO errors.
      echo "File foo2 data after clone operation:"
      # All bytes should have the value 0x00 (clone operation failed and did
      # not modify our file).
      od -t x1 $SCRATCH_MNT/foo2
      $XFS_IO_PROG -c "pwrite -S 0xee 0 90" $SCRATCH_MNT/foo2 | _filter_xfs_io

      # Test cloning the inline extent against a file which has a size of zero
      # but has a prealloc extent. It should not be possible as well to clone
      # the inline extent from file bar into this file.
      $XFS_IO_PROG -f -c "falloc -k 0 1M" $SCRATCH_MNT/foo3 | _filter_xfs_io
      $CLONER_PROG -s 0 -d 0 -l 0 $SCRATCH_MNT/bar $SCRATCH_MNT/foo3

      # Doing IO against any range in the first 4K of the file should work.
      # Due to a past clone ioctl bug which allowed cloning the inline extent,
      # these operations resulted in EIO errors.
      echo "First 50 bytes of foo3 after clone operation:"
      # Should not be able to read any bytes, file has 0 bytes i_size (the
      # clone operation failed and did not modify our file).
      od -t x1 $SCRATCH_MNT/foo3
      $XFS_IO_PROG -c "pwrite -S 0xff 0 90" $SCRATCH_MNT/foo3 | _filter_xfs_io

      # Test cloning the inline extent against a file which consists of a
      # single inline extent that has a size not greater than the size of
      # bar's inline extent (40 < 50).
      # It should be possible to do the extent cloning from bar to this file.
      $XFS_IO_PROG -f -c "pwrite -S 0x01 0 40" $SCRATCH_MNT/foo4 \
          | _filter_xfs_io
      $CLONER_PROG -s 0 -d 0 -l 0 $SCRATCH_MNT/bar $SCRATCH_MNT/foo4

      # Doing IO against any range in the first 4K of the file should work.
      echo "File foo4 data after clone operation:"
      # Must match file bar's content.
      od -t x1 $SCRATCH_MNT/foo4
      $XFS_IO_PROG -c "pwrite -S 0x02 0 90" $SCRATCH_MNT/foo4 | _filter_xfs_io

      # Test cloning the inline extent against a file which consists of a
      # single inline extent that has a size greater than the size of bar's
      # inline extent (60 > 50).
      # It should not be possible to clone the inline extent from file bar
      # into this file.
      $XFS_IO_PROG -f -c "pwrite -S 0x03 0 60" $SCRATCH_MNT/foo5 \
          | _filter_xfs_io
      $CLONER_PROG -s 0 -d 0 -l 0 $SCRATCH_MNT/bar $SCRATCH_MNT/foo5

      # Reading the file should not fail.
      echo "File foo5 data after clone operation:"
      # Must have a size of 60 bytes, with all bytes having a value of 0x03
      # (the clone operation failed and did not modify our file).
      od -t x1 $SCRATCH_MNT/foo5

      # Test cloning the inline extent against a file which has no extents but
      # has a size greater than bar's inline extent (16K > 50).
      # It should not be possible to clone the inline extent from file bar
      # into this file.
      $XFS_IO_PROG -f -c "truncate 16K" $SCRATCH_MNT/foo6 | _filter_xfs_io
      $CLONER_PROG -s 0 -d 0 -l 0 $SCRATCH_MNT/bar $SCRATCH_MNT/foo6

      # Reading the file should not fail.
      echo "File foo6 data after clone operation:"
      # Must have a size of 16K, with all bytes having a value of 0x00 (the
      # clone operation failed and did not modify our file).
      od -t x1 $SCRATCH_MNT/foo6

      # Test cloning the inline extent against a file which has no extents but
      # has a size not greater than bar's inline extent (30 < 50).
      # It should be possible to clone the inline extent from file bar into
      # this file.
      $XFS_IO_PROG -f -c "truncate 30" $SCRATCH_MNT/foo7 | _filter_xfs_io
      $CLONER_PROG -s 0 -d 0 -l 0 $SCRATCH_MNT/bar $SCRATCH_MNT/foo7

      # Reading the file should not fail.
      echo "File foo7 data after clone operation:"
      # Must have a size of 50 bytes, with all bytes having a value of 0xbb.
      od -t x1 $SCRATCH_MNT/foo7

      # Test cloning the inline extent against a file which has a size not
      # greater than the size of bar's inline extent (20 < 50) but has
      # a prealloc extent that goes beyond the file's size. It should not be
      # possible to clone the inline extent from bar into this file.
      $XFS_IO_PROG -f -c "falloc -k 0 1M" \
                      -c "pwrite -S 0x88 0 20" \
                      $SCRATCH_MNT/foo8 | _filter_xfs_io
      $CLONER_PROG -s 0 -d 0 -l 0 $SCRATCH_MNT/bar $SCRATCH_MNT/foo8

      echo "File foo8 data after clone operation:"
      # Must have a size of 20 bytes, with all bytes having a value of 0x88
      # (the clone operation did not modify our file).
      od -t x1 $SCRATCH_MNT/foo8

      _scratch_unmount
  }

  echo -e "\nTesting without compression and without the no-holes feature...\n"
  test_cloning_inline_extents

  echo -e "\nTesting with compression and without the no-holes feature...\n"
  test_cloning_inline_extents "" "-o compress"

  echo -e "\nTesting without compression and with the no-holes feature...\n"
  test_cloning_inline_extents "-O no-holes" ""

  echo -e "\nTesting with compression and with the no-holes feature...\n"
  test_cloning_inline_extents "-O no-holes" "-o compress"

  status=0
  exit

Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
---
 fs/btrfs/ioctl.c | 195 +++++++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 152 insertions(+), 43 deletions(-)

diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 0b5f9183362c..d0733078e5c5 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -3205,6 +3205,150 @@ static void clone_update_extent_map(struct inode *inode,
 			&BTRFS_I(inode)->runtime_flags);
 }
 
+/*
+ * Make sure we do not end up inserting an inline extent into a file that has
+ * already other (non-inline) extents. If a file has an inline extent it can
+ * not have any other extents and the (single) inline extent must start at the
+ * file offset 0. Failing to respect these rules will lead to file corruption,
+ * resulting in EIO errors on read/write operations, hitting BUG_ON's in mm, etc
+ *
+ * We can have extents that have been already written to disk or we can have
+ * dirty ranges still in delalloc, in which case the extent maps and items are
+ * created only when we run delalloc, and the delalloc ranges might fall outside
+ * the range we are currently locking in the inode's io tree. So we check the
+ * inode's i_size because of that (i_size updates are done while holding the
+ * i_mutex, which we are holding here).
+ * We also check to see if the inode has a size not greater than "datal" but has
+ * extents beyond it, due to an fallocate with FALLOC_FL_KEEP_SIZE (and we are
+ * protected against such concurrent fallocate calls by the i_mutex).
+ *
+ * If the file has no extents but a size greater than datal, do not allow the
+ * copy because we would need turn the inline extent into a non-inline one (even
+ * with NO_HOLES enabled). If we find our destination inode only has one inline
+ * extent, just overwrite it with the source inline extent if its size is less
+ * than the source extent's size, or we could copy the source inline extent's
+ * data into the destination inode's inline extent if the later is greater then
+ * the former.
+ */
+static int clone_copy_inline_extent(struct inode *src,
+				    struct inode *dst,
+				    struct btrfs_trans_handle *trans,
+				    struct btrfs_path *path,
+				    struct btrfs_key *new_key,
+				    const u64 drop_start,
+				    const u64 datal,
+				    const u64 skip,
+				    const u64 size,
+				    char *inline_data)
+{
+	struct btrfs_root *root = BTRFS_I(dst)->root;
+	const u64 aligned_end = ALIGN(new_key->offset + datal,
+				      root->sectorsize);
+	int ret;
+	struct btrfs_key key;
+
+	if (new_key->offset > 0)
+		return -EOPNOTSUPP;
+
+	key.objectid = btrfs_ino(dst);
+	key.type = BTRFS_EXTENT_DATA_KEY;
+	key.offset = 0;
+	ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
+	if (ret < 0) {
+		return ret;
+	} else if (ret > 0) {
+		if (path->slots[0] >= btrfs_header_nritems(path->nodes[0])) {
+			ret = btrfs_next_leaf(root, path);
+			if (ret < 0)
+				return ret;
+			else if (ret > 0)
+				goto copy_inline_extent;
+		}
+		btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
+		if (key.objectid == btrfs_ino(dst) &&
+		    key.type == BTRFS_EXTENT_DATA_KEY) {
+			ASSERT(key.offset > 0);
+			return -EOPNOTSUPP;
+		}
+	} else if (i_size_read(dst) <= datal) {
+		struct btrfs_file_extent_item *ei;
+		u64 ext_len;
+
+		/*
+		 * If the file size is <= datal, make sure there are no other
+		 * extents following (can happen do to an fallocate call with
+		 * the flag FALLOC_FL_KEEP_SIZE).
+		 */
+		ei = btrfs_item_ptr(path->nodes[0], path->slots[0],
+				    struct btrfs_file_extent_item);
+		/*
+		 * If it's an inline extent, it can not have other extents
+		 * following it.
+		 */
+		if (btrfs_file_extent_type(path->nodes[0], ei) ==
+		    BTRFS_FILE_EXTENT_INLINE)
+			goto copy_inline_extent;
+
+		ext_len = btrfs_file_extent_num_bytes(path->nodes[0], ei);
+		if (ext_len > aligned_end)
+			return -EOPNOTSUPP;
+
+		ret = btrfs_next_item(root, path);
+		if (ret < 0) {
+			return ret;
+		} else if (ret == 0) {
+			btrfs_item_key_to_cpu(path->nodes[0], &key,
+					      path->slots[0]);
+			if (key.objectid == btrfs_ino(dst) &&
+			    key.type == BTRFS_EXTENT_DATA_KEY)
+				return -EOPNOTSUPP;
+		}
+	}
+
+copy_inline_extent:
+	/*
+	 * We have no extent items, or we have an extent at offset 0 which may
+	 * or may not be inlined. All these cases are dealt the same way.
+	 */
+	if (i_size_read(dst) > datal) {
+		/*
+		 * If the destination inode has an inline extent...
+		 * This would require copying the data from the source inline
+		 * extent into the beginning of the destination's inline extent.
+		 * But this is really complex, both extents can be compressed
+		 * or just one of them, which would require decompressing and
+		 * re-compressing data (which could increase the new compressed
+		 * size, not allowing the compressed data to fit anymore in an
+		 * inline extent).
+		 * So just don't support this case for now (it should be rare,
+		 * we are not really saving space when cloning inline extents).
+		 */
+		return -EOPNOTSUPP;
+	}
+
+	btrfs_release_path(path);
+	ret = btrfs_drop_extents(trans, root, dst, drop_start, aligned_end, 1);
+	if (ret)
+		return ret;
+	ret = btrfs_insert_empty_item(trans, root, path, new_key, size);
+	if (ret)
+		return ret;
+
+	if (skip) {
+		const u32 start = btrfs_file_extent_calc_inline_size(0);
+
+		memmove(inline_data + start, inline_data + start + skip, datal);
+	}
+
+	write_extent_buffer(path->nodes[0], inline_data,
+			    btrfs_item_ptr_offset(path->nodes[0],
+						  path->slots[0]),
+			    size);
+	inode_add_bytes(dst, datal);
+
+	return 0;
+}
+
 /**
  * btrfs_clone() - clone a range from inode file to another
  *
@@ -3469,21 +3613,6 @@ process_slot:
 			} else if (type == BTRFS_FILE_EXTENT_INLINE) {
 				u64 skip = 0;
 				u64 trim = 0;
-				u64 aligned_end = 0;
-
-				/*
-				 * Don't copy an inline extent into an offset
-				 * greater than zero. Having an inline extent
-				 * at such an offset results in chaos as btrfs
-				 * isn't prepared for such cases. Just skip
-				 * this case for the same reasons as commented
-				 * at btrfs_ioctl_clone().
-				 */
-				if (last_dest_end > 0) {
-					ret = -EOPNOTSUPP;
-					btrfs_end_transaction(trans, root);
-					goto out;
-				}
 
 				if (off > key.offset) {
 					skip = off - key.offset;
@@ -3501,42 +3630,22 @@ process_slot:
 				size -= skip + trim;
 				datal -= skip + trim;
 
-				aligned_end = ALIGN(new_key.offset + datal,
-						    root->sectorsize);
-				ret = btrfs_drop_extents(trans, root, inode,
-							 drop_start,
-							 aligned_end,
-							 1);
+				ret = clone_copy_inline_extent(src, inode,
+							       trans, path,
+							       &new_key,
+							       drop_start,
+							       datal,
+							       skip, size, buf);
 				if (ret) {
 					if (ret != -EOPNOTSUPP)
 						btrfs_abort_transaction(trans,
-							root, ret);
-					btrfs_end_transaction(trans, root);
-					goto out;
-				}
-
-				ret = btrfs_insert_empty_item(trans, root, path,
-							      &new_key, size);
-				if (ret) {
-					btrfs_abort_transaction(trans, root,
-								ret);
+									root,
+									ret);
 					btrfs_end_transaction(trans, root);
 					goto out;
 				}
-
-				if (skip) {
-					u32 start =
-					  btrfs_file_extent_calc_inline_size(0);
-					memmove(buf+start, buf+start+skip,
-						datal);
-				}
-
 				leaf = path->nodes[0];
 				slot = path->slots[0];
-				write_extent_buffer(leaf, buf,
-					    btrfs_item_ptr_offset(leaf, slot),
-					    size);
-				inode_add_bytes(inode, datal);
 			}
 
 			/* If we have an implicit hole (NO_HOLES feature). */

  parent reply	other threads:[~2015-12-09 10:35 UTC|newest]

Thread overview: 154+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-09  9:36 [3.16.y-ckt stable] Linux 3.16.7-ckt21 stable review Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 001/126] irda: precedence bug in irlmp_seq_hb_idx() Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 002/126] qmi_wwan: add Sierra Wireless MC74xx/EM74xx Luis Henriques
2015-12-09 11:27   ` Bjørn Mork
2015-12-09 11:44     ` Luis Henriques
2015-12-09 11:44       ` Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 003/126] macvtap: unbreak receiving of gro skb with frag list Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 004/126] RDS-TCP: Recover correctly from pskb_pull()/pksb_trim() failure in rds_tcp_data_recv Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 005/126] stmmac: Correctly report PTP capabilities Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 006/126] ipmr: fix possible race resulting from improper usage of IP_INC_STATS_BH() in preemptible context Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 007/126] net: qmi_wwan: add HP lt4111 LTE/EV-DO/HSPA+ Gobi 4G Module Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 008/126] qmi_wwan: fix entry for HP lt4112 LTE/HSPA+ " Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 009/126] sit: fix sit0 percpu double allocations Luis Henriques
2015-12-12  4:18   ` Ben Hutchings
2015-12-13 18:54     ` Luis Henriques
2015-12-13 18:54       ` Luis Henriques
2015-12-13 20:20       ` Ben Hutchings
2015-12-13 20:43         ` Eric Dumazet
2015-12-13 21:22           ` Ben Hutchings
2015-12-13 21:44             ` Eric Dumazet
2015-12-13 21:49               ` Ben Hutchings
2015-12-13 22:45                 ` Eric Dumazet
2015-12-13 23:03                   ` Ben Hutchings
2015-12-13 21:32           ` Luis Henriques
2015-12-13 21:32             ` Luis Henriques
2015-12-13 22:14           ` David Miller
2015-12-13 22:22             ` Luis Henriques
2015-12-13 22:22               ` Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 010/126] packet: race condition in packet_bind Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 011/126] net: avoid NULL deref in inet_ctl_sock_destroy() Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 012/126] net: fix a race in dst_release() Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 013/126] Failing to send a CLOSE if file is opened WRONLY and server reboots on a 4.x mount Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 014/126] x86/xen: Do not clip xen_e820_map to xen_e820_map_entries when sanitizing map Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 015/126] HID: core: Avoid uninitialized buffer access Luis Henriques
2015-12-09  9:36   ` Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 016/126] [media] v4l2-compat-ioctl32: fix alignment for ARM64 Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 017/126] net: mvneta: Fix CPU_MAP registers initialisation Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 018/126] mtd: mtdpart: fix add_mtd_partitions error path Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 019/126] ARM: 8426/1: dma-mapping: add missing range check in dma_mmap() Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 020/126] ARM: 8427/1: dma-mapping: add support for offset parameter " Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 021/126] mm: Check if section present during memory block (un)registering Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 022/126] spi: ti-qspi: Fix data corruption seen on r/w stress test Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 023/126] lockd: create NSM handles per net namespace Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 024/126] Revert "mm: Check if section present during memory block (un)registering" Luis Henriques
2015-12-12  4:37   ` Ben Hutchings
2015-12-13 18:57     ` Luis Henriques
2015-12-13 18:57       ` Luis Henriques
2015-12-09  9:36 ` Luis Henriques [this message]
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 026/126] ARM: common: edma: Fix channel parameter for irq callbacks Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 027/126] iommu/vt-d: Fix ATSR handling for Root-Complex integrated endpoints Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 028/126] Btrfs: fix truncation of compressed and inlined extents Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 029/126] ext4: fix potential use after free in __ext4_journal_stop Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 030/126] [PATCH] fix calculation of meta_bg descriptor backups Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 031/126] ext4, jbd2: ensure entering into panic after recording an error in superblock Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 032/126] vTPM: fix memory allocation flag for rtce buffer at kernel boot Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 033/126] spi: dw: explicitly free IRQ handler in dw_spi_remove_host() Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 034/126] [media] media: vb2 dma-contig: Fully cache synchronise buffers in prepare and finish Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 035/126] Bluetooth: hidp: fix device disconnect on idle timeout Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 036/126] Bluetooth: ath3k: Add new AR3012 0930:021c id Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 037/126] Bluetooth: ath3k: Add support of AR3012 0cf3:817b device Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 038/126] spi: atmel: Fix DMA-setup for transfers with more than 8 bits per word Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 039/126] USB: qcserial: add Sierra Wireless MC74xx/EM74xx Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 040/126] staging: rtl8712: Add device ID for Sitecom WLA2100 Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 041/126] ACPI: Use correct IRQ when uninstalling ACPI interrupt handler Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 042/126] ALSA: hda/realtek - Dell XPS one ALC3260 speaker no sound after resume back Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 043/126] MAINTAINERS: Add public mailing list for ARC Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 044/126] megaraid_sas: Do not use PAGE_SIZE for max_sectors Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 045/126] KVM: s390: SCA must not cross page boundaries Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 046/126] arm64: Fix compat register mappings Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 047/126] can: Use correct type in sizeof() in nla_put() Luis Henriques
2015-12-09  9:36   ` Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 048/126] mtd: blkdevs: fix potential deadlock + lockdep warnings Luis Henriques
2015-12-09  9:36 ` [PATCH 3.16.y-ckt 049/126] Revert "dm mpath: fix stalls when handling invalid ioctls" Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 050/126] drm/i915: add quirk to enable backlight on Dell Chromebook 11 (2015) Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 051/126] crypto: algif_hash - Only export and import on sockets with data Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 052/126] xtensa: fixes for configs without loop option Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 053/126] megaraid_sas : SMAP restriction--do not access user memory from IOCTL code Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 054/126] mac80211: fix divide by zero when NOA update Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 055/126] mac80211: allow null chandef in tracing Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 056/126] xtensa: fix secondary core boot in SMP Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 057/126] recordmcount: Fix endianness handling bug for nop_mcount Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 058/126] KVM: VMX: fix SMEP and SMAP without EPT Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 059/126] thermal: exynos: Fix unbalanced regulator disable on probe failure Luis Henriques
2015-12-09 13:22   ` Krzysztof Kozlowski
2015-12-09 13:59     ` Luis Henriques
2015-12-09 13:59       ` Luis Henriques
2015-12-10  0:48       ` Krzysztof Kozlowski
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 060/126] ALSA: hda - Apply pin fixup for HP ProBook 6550b Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 061/126] ALSA: hda - Add Intel Lewisburg device IDs Audio Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 062/126] firewire: ohci: fix JMicron JMB38x IT context discovery Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 063/126] scsi: restart list search after unlock in scsi_remove_target Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 064/126] mm: slab: only move management objects off-slab for sizes larger than KMALLOC_MIN_SIZE Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 065/126] Input: elantech - add Fujitsu Lifebook U745 to force crc_enabled Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 066/126] proc: actually make proc_fd_permission() thread-friendly Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 067/126] x86/setup: Extend low identity map to cover whole kernel range Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 068/126] x86/setup: Fix low identity map for >= 2GB " Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 069/126] x86/cpu: Call verify_cpu() after having entered long mode too Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 070/126] Btrfs: fix race leading to incorrect item deletion when dropping extents Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 071/126] Btrfs: fix race leading to BUG_ON when running delalloc for nodatacow Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 072/126] perf: Fix inherited events vs. tracepoint filters Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 073/126] scsi_sysfs: Fix queue_ramp_up_period return code Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 074/126] Btrfs: fix race when listing an inode's xattrs Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 075/126] ideapad-laptop: Add Lenovo Yoga 900 to no_hw_rfkill dmi list Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 076/126] storvsc: Don't set the SRB_FLAGS_QUEUE_ACTION_ENABLE flag Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 077/126] KVM: x86: Defining missing x86 vectors Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 078/126] KVM: x86: work around infinite loop in microcode when #AC is delivered Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 079/126] KVM: svm: unconditionally intercept #DB Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 080/126] drivers: of: of_reserved_mem: fixup the alignment with CMA setup Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 081/126] drm/ast: Initialized data needed to map fbdev memory Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 082/126] FS-Cache: Increase reference of parent after registering, netfs success Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 083/126] FS-Cache: Don't override netfs's primary_index if registering failed Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 084/126] binfmt_elf: Don't clobber passed executable's file header Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 085/126] fs/pipe.c: return error code rather than 0 in pipe_write() Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 086/126] splice: sendfile() at once fails for big files Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 087/126] mac80211: fix driver RSSI event calculations Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 088/126] wm831x_power: Use IRQF_ONESHOT to request threaded IRQs Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 089/126] mwifiex: fix mwifiex_rdeeprom_read() Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 090/126] dmaengine: dw: convert to __ffs() Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 091/126] usb: ehci-orion: fix probe for !GENERIC_PHY Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 092/126] devres: fix a for loop bounds check Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 093/126] netfilter: remove dead code Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 094/126] ipv4: Fix ip_queue_xmit to pass sk into ip_local_out_sk Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 095/126] packet: fix match_fanout_group() Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 096/126] hsi: fix double kfree Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 097/126] hsi: omap_ssi_port: Prevent warning if cawake_gpio is not defined Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 098/126] ARM: pxa: remove incorrect __init annotation on pxa27x_set_pwrmode Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 099/126] ALSA: fireworks/bebob/oxfw/dice: enable to make as built-in Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 100/126] drm: Fix return value of drm_framebuffer_init() Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 101/126] ALSA: fireworks: use u32 type for be32_to_cpup() macro Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 102/126] ALSA: bebob: use correct type for __be32 data Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 103/126] tcp: apply Kern's check on RTTs used for congestion control Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 104/126] clk: versatile-icst: fix memory leak Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 105/126] MIPS: atomic: Fix comment describing atomic64_add_unless's return value Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 106/126] mfd: twl6040: Fix deferred probe handling for clk32k Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 107/126] of/fdt: fix error checking for earlycon address Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 108/126] netfilter: nfnetlink: don't probe module if it exists Luis Henriques
2015-12-09  9:37 ` [PATCH 3.16.y-ckt 109/126] xprtrdma: Re-arm after missed events Luis Henriques
2015-12-09  9:38 ` [PATCH 3.16.y-ckt 110/126] ceph: fix message length computation Luis Henriques
2015-12-09  9:38 ` [PATCH 3.16.y-ckt 111/126] ipv6: fix tunnel error handling Luis Henriques
2015-12-09  9:38 ` [PATCH 3.16.y-ckt 112/126] perf trace: Fix documentation for -i Luis Henriques
2015-12-09  9:38 ` [PATCH 3.16.y-ckt 113/126] bonding: fix panic on non-ARPHRD_ETHER enslave failure Luis Henriques
2015-12-09  9:38 ` [PATCH 3.16.y-ckt 114/126] rtc: ds1307: Fix alarm programming for mcp794xx Luis Henriques
2015-12-09  9:38 ` [PATCH 3.16.y-ckt 115/126] TPM: Avoid reference to potentially freed memory Luis Henriques
2015-12-09  9:38 ` [PATCH 3.16.y-ckt 116/126] xtensa: nommu: provide _PAGE_CHG_MASK definition Luis Henriques
2015-12-09  9:38 ` [PATCH 3.16.y-ckt 117/126] md/raid0: update queue parameter in a safer location Luis Henriques
2015-12-09  9:38 ` [PATCH 3.16.y-ckt 118/126] md/raid0: apply base queue limits *before* disk_stack_limits Luis Henriques
2015-12-09  9:38 ` [PATCH 3.16.y-ckt 119/126] drm/radeon: add quirk for MSI R7 370 Luis Henriques
2015-12-09  9:38 ` [PATCH 3.16.y-ckt 120/126] drm/radeon: add quirk for ASUS " Luis Henriques
2015-12-09  9:38 ` [PATCH 3.16.y-ckt 121/126] drm/radeon: fix quirk for MSI R7 370 Armor 2X Luis Henriques
2015-12-09  9:38 ` [PATCH 3.16.y-ckt 122/126] tty: fix stall caused by missing memory barrier in drivers/tty/n_tty.c Luis Henriques
2015-12-09  9:38 ` [PATCH 3.16.y-ckt 123/126] fs/proc, core/debug: Don't expose absolute kernel addresses via wchan Luis Henriques
2015-12-09  9:38 ` [PATCH 3.16.y-ckt 124/126] ALSA: hda - Disable 64bit address for Creative HDA controllers Luis Henriques
2015-12-09  9:38 ` [PATCH 3.16.y-ckt 125/126] printk: prevent userland from spoofing kernel messages Luis Henriques
2015-12-09  9:38 ` [PATCH 3.16.y-ckt 126/126] FS-Cache: Handle a write to the page immediately beyond the EOF marker Luis Henriques

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1449653896-5236-26-git-send-email-luis.henriques@canonical.com \
    --to=luis.henriques@canonical.com \
    --cc=fdmanana@suse.com \
    --cc=kernel-team@lists.ubuntu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.