All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kamal Mostafa <kamal@canonical.com>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org,
	kernel-team@lists.ubuntu.com
Cc: Filipe Manana <fdmanana@suse.com>, Kamal Mostafa <kamal@canonical.com>
Subject: [PATCH 3.19.y-ckt 039/164] Btrfs: fix file corruption and data loss after cloning inline extents
Date: Wed,  2 Dec 2015 08:58:10 -0800	[thread overview]
Message-ID: <1449075615-20754-40-git-send-email-kamal@canonical.com> (raw)
In-Reply-To: <1449075615-20754-1-git-send-email-kamal@canonical.com>

3.19.8-ckt11 -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: Kamal Mostafa <kamal@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 8f07947..230e205 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -3159,6 +3159,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
  *
@@ -3423,21 +3567,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;
@@ -3455,42 +3584,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). */
-- 
1.9.1


  parent reply	other threads:[~2015-12-02 17:53 UTC|newest]

Thread overview: 173+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-02 16:57 [3.19.y-ckt stable] Linux 3.19.8-ckt11 stable review Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 001/164] x86/setup: Extend low identity map to cover whole kernel range Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 002/164] x86/setup: Fix low identity map for >= 2GB " Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 003/164] drm/radeon: add quirk for MSI R7 370 Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 004/164] drm/radeon: add quirk for ASUS " Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 005/164] drm/radeon: fix quirk for MSI R7 370 Armor 2X Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 006/164] irda: precedence bug in irlmp_seq_hb_idx() Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 007/164] tipc: allow non-linear first fragment buffer Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 008/164] qmi_wwan: add Sierra Wireless MC74xx/EM74xx Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 009/164] macvtap: unbreak receiving of gro skb with frag list Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 010/164] RDS-TCP: Recover correctly from pskb_pull()/pksb_trim() failure in rds_tcp_data_recv Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 011/164] stmmac: Correctly report PTP capabilities Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 012/164] ipmr: fix possible race resulting from improper usage of IP_INC_STATS_BH() in preemptible context Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 013/164] qmi_wwan: fix entry for HP lt4112 LTE/HSPA+ Gobi 4G Module Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 014/164] sit: fix sit0 percpu double allocations Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 015/164] sfc: push partner queue for skb->xmit_more Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 016/164] net: avoid NULL deref in inet_ctl_sock_destroy() Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 017/164] ipv6: clean up dev_snmp6 proc entry when we fail to initialize inet6_dev Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 018/164] ipv4: disable BH when changing ip local port range Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 019/164] packet: race condition in packet_bind Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 020/164] net: fix a race in dst_release() Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 021/164] HID: core: Avoid uninitialized buffer access Kamal Mostafa
2015-12-02 16:57   ` Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 022/164] [media] v4l2-compat-ioctl32: fix alignment for ARM64 Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 023/164] net: mvneta: Fix CPU_MAP registers initialisation Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 024/164] mtd: mtdpart: fix add_mtd_partitions error path Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 025/164] fs/proc, core/debug: Don't expose absolute kernel addresses via wchan Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 026/164] [media] v4l2-ctrls: arrays are also considered compound controls Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 027/164] [media] media: v4l2-ctrls: Fix 64bit support in get_ctrl() Kamal Mostafa
2015-12-02 16:57 ` [PATCH 3.19.y-ckt 028/164] ARM: tegra: paz00: use con_id's to refer GPIO's in gpiod_lookup table Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 029/164] ARM: 8426/1: dma-mapping: add missing range check in dma_mmap() Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 030/164] ARM: 8427/1: dma-mapping: add support for offset parameter " Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 031/164] integrity: prevent loading untrusted certificates on the IMA trusted keyring Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 032/164] usb: dwc3: pci: Add the Synopsys HAPS AXI Product ID Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 033/164] usb: dwc3: pci: Add the PCI Product ID for Synopsys USB 3.1 Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 034/164] usb: dwc3: Support Synopsys USB 3.1 IP Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 035/164] usb: dwc3: Add dis_enblslpm_quirk Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 036/164] spi: ti-qspi: Fix data corruption seen on r/w stress test Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 037/164] nfsd: serialize state seqid morphing operations Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 038/164] lockd: create NSM handles per net namespace Kamal Mostafa
2015-12-02 16:58 ` Kamal Mostafa [this message]
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 040/164] ARM: common: edma: Fix channel parameter for irq callbacks Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 041/164] iommu/vt-d: Fix ATSR handling for Root-Complex integrated endpoints Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 042/164] Btrfs: fix truncation of compressed and inlined extents Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 043/164] jbd2: fix checkpoint list cleanup Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 044/164] ext4: fix potential use after free in __ext4_journal_stop Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 045/164] [PATCH] fix calculation of meta_bg descriptor backups Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 046/164] ext4, jbd2: ensure entering into panic after recording an error in superblock Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 047/164] vTPM: fix memory allocation flag for rtce buffer at kernel boot Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 048/164] spi: dw: explicitly free IRQ handler in dw_spi_remove_host() Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 049/164] [media] media: vb2 dma-contig: Fully cache synchronise buffers in prepare and finish Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 050/164] [media] media: vb2 dma-sg: " Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 051/164] [media] media/v4l2-ctrls: fix setting autocluster to manual with VIDIOC_S_CTRL Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 052/164] Bluetooth: hidp: fix device disconnect on idle timeout Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 053/164] Bluetooth: ath3k: Add new AR3012 0930:021c id Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 054/164] Bluetooth: ath3k: Add support of AR3012 0cf3:817b device Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 055/164] Bluetooth: Fix removing connection parameters when unpairing Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 056/164] spi: atmel: Fix DMA-setup for transfers with more than 8 bits per word Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 057/164] USB: qcserial: add Sierra Wireless MC74xx/EM74xx Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 058/164] staging: rtl8712: Add device ID for Sitecom WLA2100 Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 059/164] ACPI: Use correct IRQ when uninstalling ACPI interrupt handler Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 060/164] ACPI: Using correct irq when waiting for events Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 061/164] ACPI / PM: Fix incorrect wakeup IRQ setting during suspend-to-idle Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 062/164] ALSA: hda/realtek - Dell XPS one ALC3260 speaker no sound after resume back Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 063/164] ALSA: hda - Disable 64bit address for Creative HDA controllers Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 064/164] MAINTAINERS: Add public mailing list for ARC Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 065/164] megaraid_sas: Expose TAPE drives unconditionally Kamal Mostafa
2015-12-02 17:09   ` Sumit Saxena
2015-12-02 17:39     ` Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 066/164] megaraid_sas: Do not use PAGE_SIZE for max_sectors Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 067/164] KVM: s390: SCA must not cross page boundaries Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 068/164] arm64: Fix compat register mappings Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 069/164] can: Use correct type in sizeof() in nla_put() Kamal Mostafa
2015-12-02 16:58   ` Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 070/164] mtd: blkdevs: fix potential deadlock + lockdep warnings Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 071/164] Revert "dm mpath: fix stalls when handling invalid ioctls" Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 072/164] drm/i915: add quirk to enable backlight on Dell Chromebook 11 (2015) Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 073/164] crypto: algif_hash - Only export and import on sockets with data Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 074/164] xtensa: fixes for configs without loop option Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 075/164] PCI: spear: Fix dw_pcie_cfg_read/write() usage Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 076/164] megaraid_sas : SMAP restriction--do not access user memory from IOCTL code Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 077/164] mac80211: fix divide by zero when NOA update Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 078/164] nl80211: Fix potential memory leak from parse_acl_data Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 079/164] mac80211: allow null chandef in tracing Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 080/164] xtensa: fix secondary core boot in SMP Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 081/164] recordmcount: Fix endianness handling bug for nop_mcount Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 082/164] recordmcount: arm64: Replace the ignored mcount call into nop Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 083/164] KVM: VMX: fix SMEP and SMAP without EPT Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 084/164] thermal: exynos: Fix unbalanced regulator disable on probe failure Kamal Mostafa
2015-12-09 13:24   ` Krzysztof Kozlowski
2015-12-10  0:49     ` Krzysztof Kozlowski
2015-12-10 16:26       ` Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 085/164] ALSA: hda - Apply pin fixup for HP ProBook 6550b Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 086/164] ALSA: hda - Add Intel Lewisburg device IDs Audio Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 087/164] firewire: ohci: fix JMicron JMB38x IT context discovery Kamal Mostafa
2015-12-02 16:58 ` [PATCH 3.19.y-ckt 088/164] scsi: restart list search after unlock in scsi_remove_target Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 089/164] mm: slab: only move management objects off-slab for sizes larger than KMALLOC_MIN_SIZE Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 090/164] memcg: fix thresholds for 32b architectures Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 091/164] arm64: bpf: fix div-by-zero case Kamal Mostafa
2015-12-02 16:59   ` Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 092/164] arm64: bpf: fix mod-by-zero case Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 093/164] Input: elantech - add Fujitsu Lifebook U745 to force crc_enabled Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 094/164] proc: actually make proc_fd_permission() thread-friendly Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 095/164] printk: prevent userland from spoofing kernel messages Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 096/164] fs, seqfile: always allow oom killer Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 097/164] x86/cpu: Call verify_cpu() after having entered long mode too Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 098/164] parisc: Fixes and cleanups in kernel uapi header files Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 099/164] Btrfs: fix race leading to incorrect item deletion when dropping extents Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 100/164] Btrfs: fix race leading to BUG_ON when running delalloc for nodatacow Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 101/164] ALSA: usb: Add native DSD support for Aune X1S Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 102/164] perf: Fix inherited events vs. tracepoint filters Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 103/164] scsi_sysfs: Fix queue_ramp_up_period return code Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 104/164] Btrfs: fix race when listing an inode's xattrs Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 105/164] ideapad-laptop: Add Lenovo Yoga 900 to no_hw_rfkill dmi list Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 106/164] storvsc: Don't set the SRB_FLAGS_QUEUE_ACTION_ENABLE flag Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 107/164] KVM: x86: work around infinite loop in microcode when #AC is delivered Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 108/164] KVM: svm: unconditionally intercept #DB Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 109/164] drivers: of: of_reserved_mem: fixup the alignment with CMA setup Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 110/164] drm/ast: Initialized data needed to map fbdev memory Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 111/164] FS-Cache: Increase reference of parent after registering, netfs success Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 112/164] FS-Cache: Don't override netfs's primary_index if registering failed Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 113/164] FS-Cache: Handle a write to the page immediately beyond the EOF marker Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 114/164] binfmt_elf: Don't clobber passed executable's file header Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 115/164] fs/pipe.c: return error code rather than 0 in pipe_write() Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 116/164] ALSA: hda/hdmi - apply Skylake fix-ups to Broxton display codec Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 117/164] crypto: crc32c-pclmul - use .rodata instead of .rotata Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 118/164] wm831x_power: Use IRQF_ONESHOT to request threaded IRQs Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 119/164] mwifiex: fix mwifiex_rdeeprom_read() Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 120/164] dmaengine: dw: convert to __ffs() Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 121/164] tcp: call sk_mark_napi_id() on the child, not the listener Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 122/164] vivid: Fix iteration in driver removal path Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 123/164] usb: ehci-orion: fix probe for !GENERIC_PHY Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 124/164] devres: fix a for loop bounds check Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 125/164] netfilter: remove dead code Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 126/164] ipv4: Fix ip_queue_xmit to pass sk into ip_local_out_sk Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 127/164] i2c: img-scb: enable fencing for all versions of the ip Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 128/164] i2c: img-scb: do dummy writes before fifo access Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 129/164] i2c: img-scb: use DIV_ROUND_UP to round divisor values Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 130/164] i2c: img-scb: fix LOW and HIGH period values for the SCL clock Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 131/164] i2c: img-scb: Clear line and interrupt status before starting a transfer Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 132/164] i2c: img-scb: verify support for requested bit rate Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 133/164] hsi: fix double kfree Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 134/164] hsi: omap_ssi_port: Prevent warning if cawake_gpio is not defined Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 135/164] regulator: arizona-ldo1: Fix handling of GPIO 0 Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 136/164] ARM: pxa: remove incorrect __init annotation on pxa27x_set_pwrmode Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 137/164] ALSA: fireworks/bebob/oxfw/dice: enable to make as built-in Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 138/164] drm: Fix return value of drm_framebuffer_init() Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 139/164] ALSA: dice: correct variable types for __be32 data Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 140/164] ALSA: dice: assign converted data to the same type of variable Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 141/164] ALSA: fireworks: use u32 type for be32_to_cpup() macro Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 142/164] ALSA: bebob: use correct type for __be32 data Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 143/164] sunrpc: avoid warning in gss_key_timeout Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 144/164] clk: versatile-icst: fix memory leak Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 145/164] MIPS: atomic: Fix comment describing atomic64_add_unless's return value Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 146/164] mfd: twl6040: Fix deferred probe handling for clk32k Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 147/164] DT: mmc: sh_mmcif: fix "compatible" property text Kamal Mostafa
2015-12-02 16:59 ` [PATCH 3.19.y-ckt 148/164] netfilter: nf_nat_redirect: add missing NULL pointer check Kamal Mostafa
2015-12-02 17:00 ` [PATCH 3.19.y-ckt 149/164] of/fdt: fix error checking for earlycon address Kamal Mostafa
2015-12-02 17:00 ` [PATCH 3.19.y-ckt 150/164] netfilter: nfnetlink: don't probe module if it exists Kamal Mostafa
2015-12-02 17:00 ` [PATCH 3.19.y-ckt 151/164] sparc/PCI: Add mem64 resource parsing for root bus Kamal Mostafa
2015-12-02 17:00 ` [PATCH 3.19.y-ckt 152/164] xprtrdma: Re-arm after missed events Kamal Mostafa
2015-12-02 17:00 ` [PATCH 3.19.y-ckt 153/164] ceph: fix message length computation Kamal Mostafa
2015-12-02 17:00 ` [PATCH 3.19.y-ckt 154/164] tracepoints: Fix documentation of RCU lockdep checks Kamal Mostafa
2015-12-02 17:00 ` [PATCH 3.19.y-ckt 155/164] ipv6: fix tunnel error handling Kamal Mostafa
2015-12-02 17:00 ` [PATCH 3.19.y-ckt 156/164] perf trace: Fix documentation for -i Kamal Mostafa
2015-12-02 17:00 ` [PATCH 3.19.y-ckt 157/164] bonding: fix panic on non-ARPHRD_ETHER enslave failure Kamal Mostafa
2015-12-02 17:00 ` [PATCH 3.19.y-ckt 158/164] rtc: ds1307: Fix alarm programming for mcp794xx Kamal Mostafa
2015-12-02 17:00 ` [PATCH 3.19.y-ckt 159/164] mac80211: fix driver RSSI event calculations Kamal Mostafa
2015-12-02 17:00 ` [PATCH 3.19.y-ckt 160/164] packet: fix match_fanout_group() Kamal Mostafa
2015-12-02 17:00 ` [PATCH 3.19.y-ckt 161/164] tcp: apply Kern's check on RTTs used for congestion control Kamal Mostafa
2015-12-02 17:00 ` [PATCH 3.19.y-ckt 162/164] net: fix percpu memory leaks Kamal Mostafa
2015-12-02 17:00 ` [PATCH 3.19.y-ckt 163/164] TPM: Avoid reference to potentially freed memory Kamal Mostafa
2015-12-02 17:00 ` [PATCH 3.19.y-ckt 164/164] [3.19-stable only] fib_rules: Fix dump_rules() not to exit early Kamal Mostafa

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=1449075615-20754-40-git-send-email-kamal@canonical.com \
    --to=kamal@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.