linux-kernel.vger.kernel.org archive mirror
 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>, Chris Mason <clm@fb.com>,
	Kamal Mostafa <kamal@canonical.com>
Subject: [PATCH 3.13.y-ckt 107/143] Btrfs: fix fsync data loss after adding hard link to inode
Date: Tue, 31 Mar 2015 12:47:52 -0700	[thread overview]
Message-ID: <1427831308-1854-108-git-send-email-kamal@canonical.com> (raw)
In-Reply-To: <1427831308-1854-1-git-send-email-kamal@canonical.com>

3.13.11-ckt18 -stable review patch.  If anyone has any objections, please let me know.

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

From: Filipe Manana <fdmanana@suse.com>

commit 1a4bcf470c886b955adf36486f4c86f2441d85cb upstream.

We have a scenario where after the fsync log replay we can lose file data
that had been previously fsync'ed if we added an hard link for our inode
and after that we sync'ed the fsync log (for example by fsync'ing some
other file or directory).

This is because when adding an hard link we updated the inode item in the
log tree with an i_size value of 0. At that point the new inode item was
in memory only and a subsequent fsync log replay would not make us lose
the file data. However if after adding the hard link we sync the log tree
to disk, by fsync'ing some other file or directory for example, we ended
up losing the file data after log replay, because the inode item in the
persisted log tree had an an i_size of zero.

This is easy to reproduce, and the following excerpt from my test for
xfstests shows this:

  _scratch_mkfs >> $seqres.full 2>&1
  _init_flakey
  _mount_flakey

  # Create one file with data and fsync it.
  # This made the btrfs fsync log persist the data and the inode metadata with
  # a correct inode->i_size (4096 bytes).
  $XFS_IO_PROG -f -c "pwrite -S 0xaa -b 4K 0 4K" -c "fsync" \
       $SCRATCH_MNT/foo | _filter_xfs_io

  # Now add one hard link to our file. This made the btrfs code update the fsync
  # log, in memory only, with an inode metadata having a size of 0.
  ln $SCRATCH_MNT/foo $SCRATCH_MNT/foo_link

  # Now force persistence of the fsync log to disk, for example, by fsyncing some
  # other file.
  touch $SCRATCH_MNT/bar
  $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/bar

  # Before a power loss or crash, we could read the 4Kb of data from our file as
  # expected.
  echo "File content before:"
  od -t x1 $SCRATCH_MNT/foo

  # Simulate a crash/power loss.
  _load_flakey_table $FLAKEY_DROP_WRITES
  _unmount_flakey

  _load_flakey_table $FLAKEY_ALLOW_WRITES
  _mount_flakey

  # After the fsync log replay, because the fsync log had a value of 0 for our
  # inode's i_size, we couldn't read anymore the 4Kb of data that we previously
  # wrote and fsync'ed. The size of the file became 0 after the fsync log replay.
  echo "File content after:"
  od -t x1 $SCRATCH_MNT/foo

Another alternative test, that doesn't need to fsync an inode in the same
transaction it was created, is:

  _scratch_mkfs >> $seqres.full 2>&1
  _init_flakey
  _mount_flakey

  # Create our test file with some data.
  $XFS_IO_PROG -f -c "pwrite -S 0xaa -b 8K 0 8K" \
       $SCRATCH_MNT/foo | _filter_xfs_io

  # Make sure the file is durably persisted.
  sync

  # Append some data to our file, to increase its size.
  $XFS_IO_PROG -f -c "pwrite -S 0xcc -b 4K 8K 4K" \
       $SCRATCH_MNT/foo | _filter_xfs_io

  # Fsync the file, so from this point on if a crash/power failure happens, our
  # new data is guaranteed to be there next time the fs is mounted.
  $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/foo

  # Add one hard link to our file. This made btrfs write into the in memory fsync
  # log a special inode with generation 0 and an i_size of 0 too. Note that this
  # didn't update the inode in the fsync log on disk.
  ln $SCRATCH_MNT/foo $SCRATCH_MNT/foo_link

  # Now make sure the in memory fsync log is durably persisted.
  # Creating and fsync'ing another file will do it.
  touch $SCRATCH_MNT/bar
  $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/bar

  # As expected, before the crash/power failure, we should be able to read the
  # 12Kb of file data.
  echo "File content before:"
  od -t x1 $SCRATCH_MNT/foo

  # Simulate a crash/power loss.
  _load_flakey_table $FLAKEY_DROP_WRITES
  _unmount_flakey

  _load_flakey_table $FLAKEY_ALLOW_WRITES
  _mount_flakey

  # After mounting the fs again, the fsync log was replayed.
  # The btrfs fsync log replay code didn't update the i_size of the persisted
  # inode because the inode item in the log had a special generation with a
  # value of 0 (and it couldn't know the correct i_size, since that inode item
  # had a 0 i_size too). This made the last 4Kb of file data inaccessible and
  # effectively lost.
  echo "File content after:"
  od -t x1 $SCRATCH_MNT/foo

This isn't a new issue/regression. This problem has been around since the
log tree code was added in 2008:

  Btrfs: Add a write ahead tree log to optimize synchronous operations
  (commit e02119d5a7b4396c5a872582fddc8bd6d305a70a)

Test cases for xfstests follow soon.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Chris Mason <clm@fb.com>
[ kamal: backport to 3.13-stable: context ]
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
 fs/btrfs/tree-log.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 71 insertions(+), 9 deletions(-)

diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index 51c038d..18bf34e 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -469,8 +469,20 @@ insert:
 		src_item = (struct btrfs_inode_item *)src_ptr;
 		dst_item = (struct btrfs_inode_item *)dst_ptr;
 
-		if (btrfs_inode_generation(eb, src_item) == 0)
+		if (btrfs_inode_generation(eb, src_item) == 0) {
+			struct extent_buffer *dst_eb = path->nodes[0];
+
+			if (S_ISREG(btrfs_inode_mode(eb, src_item)) &&
+			    S_ISREG(btrfs_inode_mode(dst_eb, dst_item))) {
+				struct btrfs_map_token token;
+				u64 ino_size = btrfs_inode_size(eb, src_item);
+
+				btrfs_init_map_token(&token);
+				btrfs_set_token_inode_size(dst_eb, dst_item,
+							   ino_size, &token);
+			}
 			goto no_copy;
+		}
 
 		if (overwrite_root &&
 		    S_ISDIR(btrfs_inode_mode(eb, src_item)) &&
@@ -3121,7 +3133,8 @@ static int drop_objectid_items(struct btrfs_trans_handle *trans,
 static void fill_inode_item(struct btrfs_trans_handle *trans,
 			    struct extent_buffer *leaf,
 			    struct btrfs_inode_item *item,
-			    struct inode *inode, int log_inode_only)
+			    struct inode *inode, int log_inode_only,
+			    u64 logged_isize)
 {
 	struct btrfs_map_token token;
 
@@ -3134,7 +3147,7 @@ static void fill_inode_item(struct btrfs_trans_handle *trans,
 		 * to say 'update this inode with these values'
 		 */
 		btrfs_set_token_inode_generation(leaf, item, 0, &token);
-		btrfs_set_token_inode_size(leaf, item, 0, &token);
+		btrfs_set_token_inode_size(leaf, item, logged_isize, &token);
 	} else {
 		btrfs_set_token_inode_generation(leaf, item,
 						 BTRFS_I(inode)->generation,
@@ -3186,7 +3199,7 @@ static int log_inode_item(struct btrfs_trans_handle *trans,
 		return ret;
 	inode_item = btrfs_item_ptr(path->nodes[0], path->slots[0],
 				    struct btrfs_inode_item);
-	fill_inode_item(trans, path->nodes[0], inode_item, inode, 0);
+	fill_inode_item(trans, path->nodes[0], inode_item, inode, 0, 0);
 	btrfs_release_path(path);
 	return 0;
 }
@@ -3195,7 +3208,8 @@ static noinline int copy_items(struct btrfs_trans_handle *trans,
 			       struct inode *inode,
 			       struct btrfs_path *dst_path,
 			       struct extent_buffer *src,
-			       int start_slot, int nr, int inode_only)
+			       int start_slot, int nr, int inode_only,
+			       u64 logged_isize)
 {
 	unsigned long src_offset;
 	unsigned long dst_offset;
@@ -3242,7 +3256,8 @@ static noinline int copy_items(struct btrfs_trans_handle *trans,
 						    dst_path->slots[0],
 						    struct btrfs_inode_item);
 			fill_inode_item(trans, dst_path->nodes[0], inode_item,
-					inode, inode_only == LOG_INODE_EXISTS);
+					inode, inode_only == LOG_INODE_EXISTS,
+					logged_isize);
 		} else {
 			copy_extent_buffer(dst_path->nodes[0], src, dst_offset,
 					   src_offset, ins_sizes[i]);
@@ -3606,6 +3621,33 @@ process:
 	return ret;
 }
 
+static int logged_inode_size(struct btrfs_root *log, struct inode *inode,
+			     struct btrfs_path *path, u64 *size_ret)
+{
+	struct btrfs_key key;
+	int ret;
+
+	key.objectid = btrfs_ino(inode);
+	key.type = BTRFS_INODE_ITEM_KEY;
+	key.offset = 0;
+
+	ret = btrfs_search_slot(NULL, log, &key, path, 0, 0);
+	if (ret < 0) {
+		return ret;
+	} else if (ret > 0) {
+		*size_ret = i_size_read(inode);
+	} else {
+		struct btrfs_inode_item *item;
+
+		item = btrfs_item_ptr(path->nodes[0], path->slots[0],
+				      struct btrfs_inode_item);
+		*size_ret = btrfs_inode_size(path->nodes[0], item);
+	}
+
+	btrfs_release_path(path);
+	return 0;
+}
+
 /* log a single inode in the tree log.
  * At least one parent directory for this inode must exist in the tree
  * or be logged already.
@@ -3637,6 +3679,7 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans,
 	int ins_nr;
 	bool fast_search = false;
 	u64 ino = btrfs_ino(inode);
+	u64 logged_isize = 0;
 
 	path = btrfs_alloc_path();
 	if (!path)
@@ -3690,6 +3733,25 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans,
 			max_key_type = BTRFS_XATTR_ITEM_KEY;
 		ret = drop_objectid_items(trans, log, path, ino, max_key_type);
 	} else {
+		if (inode_only == LOG_INODE_EXISTS) {
+			/*
+			 * Make sure the new inode item we write to the log has
+			 * the same isize as the current one (if it exists).
+			 * This is necessary to prevent data loss after log
+			 * replay, and also to prevent doing a wrong expanding
+			 * truncate - for e.g. create file, write 4K into offset
+			 * 0, fsync, write 4K into offset 4096, add hard link,
+			 * fsync some other file (to sync log), power fail - if
+			 * we use the inode's current i_size, after log replay
+			 * we get a 8Kb file, with the last 4Kb extent as a hole
+			 * (zeroes), as if an expanding truncate happened,
+			 * instead of getting a file of 4Kb only.
+			 */
+			err = logged_inode_size(log, inode, path,
+						&logged_isize);
+			if (err)
+				goto out_unlock;
+		}
 		if (test_and_clear_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
 				       &BTRFS_I(inode)->runtime_flags)) {
 			clear_bit(BTRFS_INODE_COPY_EVERYTHING,
@@ -3746,7 +3808,7 @@ again:
 		}
 
 		ret = copy_items(trans, inode, dst_path, src, ins_start_slot,
-				 ins_nr, inode_only);
+				 ins_nr, inode_only, logged_isize);
 		if (ret) {
 			err = ret;
 			goto out_unlock;
@@ -3765,7 +3827,7 @@ next_slot:
 		if (ins_nr) {
 			ret = copy_items(trans, inode, dst_path, src,
 					 ins_start_slot,
-					 ins_nr, inode_only);
+					 ins_nr, inode_only, logged_isize);
 			if (ret) {
 				err = ret;
 				goto out_unlock;
@@ -3785,7 +3847,7 @@ next_slot:
 	}
 	if (ins_nr) {
 		ret = copy_items(trans, inode, dst_path, src, ins_start_slot,
-				 ins_nr, inode_only);
+				 ins_nr, inode_only, logged_isize);
 		if (ret) {
 			err = ret;
 			goto out_unlock;
-- 
1.9.1


  parent reply	other threads:[~2015-03-31 20:02 UTC|newest]

Thread overview: 146+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-31 19:46 [3.13.y-ckt stable] Linux 3.13.11-ckt18 stable review Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 001/143] quota: Store maximum space limit in bytes Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 002/143] ip: zero sockaddr returned on error queue Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 003/143] net: rps: fix cpu unplug Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 004/143] ipv6: stop sending PTB packets for MTU < 1280 Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 005/143] netxen: fix netxen_nic_poll() logic Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 006/143] udp_diag: Fix socket skipping within chain Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 007/143] ping: Fix race in free in receive path Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 008/143] bnx2x: fix napi poll return value for repoll Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 009/143] net: don't OOPS on socket aio Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 010/143] bridge: dont send notification when skb->len == 0 in rtnl_bridge_notify Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 011/143] ipv4: tcp: get rid of ugly unicast_sock Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 012/143] ppp: deflate: never return len larger than output buffer Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 013/143] net: sctp: fix passing wrong parameter header to param_type2af in sctp_process_param Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 014/143] ARM: pxa: add regulator_has_full_constraints to corgi board file Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 015/143] ARM: pxa: add regulator_has_full_constraints to poodle " Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 016/143] ARM: pxa: add regulator_has_full_constraints to spitz " Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 017/143] hx4700: regulator: declare full constraints Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 018/143] HID: input: fix confusion on conflicting mappings Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 019/143] HID: fixup the conflicting keyboard mappings quirk Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 020/143] megaraid_sas: disable interrupt_mask before enabling hardware interrupts Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 021/143] PCI: Generate uppercase hex for modalias var in uevent Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 022/143] usb: core: buffer: smallest buffer should start at ARCH_DMA_MINALIGN Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 023/143] tty/serial: at91: enable peripheral clock before accessing I/O registers Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 024/143] tty/serial: at91: fix error handling in atmel_serial_probe() Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 025/143] axonram: Fix bug in direct_access Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 026/143] ksoftirqd: Enable IRQs and call cond_resched() before poking RCU Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 027/143] TPM: Add new TPMs to the tail of the list to prevent inadvertent change of dev Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 028/143] char: tpm: Add missing error check for devm_kzalloc Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 029/143] tpm_tis: verify interrupt during init Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 030/143] tpm: Fix NULL return in tpm_ibmvtpm_get_desired_dma Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 031/143] tpm/tpm_i2c_stm_st33: Fix potential bug in tpm_stm_i2c_send Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 032/143] tpm/tpm_i2c_stm_st33: Add status check when reading data on the FIFO Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 033/143] mmc: sdhci-pxav3: fix unbalanced clock issues during probe Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 034/143] iwlwifi: mvm: validate tid and sta_id in ba_notif Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 035/143] power: bq24190: Fix ignored supplicants Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 036/143] ARM: DRA7: hwmod: Fix boot crash with DEBUG_LL enabled on UART3 Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 037/143] Bluetooth: ath3k: Add support of AR3012 bluetooth 13d3:3423 device Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 038/143] cfq-iosched: fix incorrect filing of rt async cfqq Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 039/143] smack: fix possible use after frees in task_security() callers Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 040/143] xfs: ensure buffer types are set correctly Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 041/143] xfs: inode unlink does not set AGI buffer type Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 042/143] xfs: set buf types when converting extent formats Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 043/143] xfs: set superblock buffer type correctly Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 044/143] btrfs: set proper message level for skinny metadata Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 045/143] KVM: s390: base hrtimer on a monotonic clock Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 046/143] PCI: Fix infinite loop with ROM image of size 0 Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 047/143] USB: cp210x: add ID for RUGGEDCOM USB Serial Console Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 048/143] clk: zynq: Force CPU_2X clock to be ungated Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 049/143] mmc: sdhci-pxav3: Remove checks for mandatory host clock Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 050/143] mmc: sdhci-pxav3: fix race between runtime pm and irq Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 051/143] power_supply: 88pm860x: Fix leaked power supply on probe fail Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 052/143] staging: comedi: comedi_compat32.c: fix COMEDI_CMD copy back Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 053/143] mmc: sdhci-pxav3: fix setting of pdata->clk_delay_cycles Kamal Mostafa
2015-03-31 19:46 ` [PATCH 3.13.y-ckt 054/143] ARM: 8284/1: sa1100: clear RCSR_SMR on resume Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 055/143] usb: musb: omap2plus bus glue needs USB host support Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 056/143] usb: musb: add omap-control dependency Kamal Mostafa
2015-04-01  9:37   ` Luis Henriques
2015-04-02 17:39     ` Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 057/143] cdc-acm: add sanity checks Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 058/143] USB: add flag for HCDs that can't receive wakeup requests (isp1760-hcd) Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 059/143] USB: fix use-after-free bug in usb_hcd_unlink_urb() Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 060/143] iwlwifi: mvm: always use mac color zero Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 061/143] iwlwifi: pcie: disable the SCD_BASE_ADDR when we resume from WoWLAN Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 062/143] vt: provide notifications on selection changes Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 063/143] tty: Prevent untrappable signals from malicious program Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 064/143] cpufreq: Set cpufreq_cpu_data to NULL before putting kobject Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 065/143] [media] lmedm04: Fix usb_submit_urb BOGUS urb xfer, pipe 1 != type 3 in interrupt urb Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 066/143] mei: mask interrupt set bit on clean reset bit Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 067/143] mei: me: release hw from reset only during the reset flow Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 068/143] MIPS: KVM: Deliver guest interrupts after local_irq_disable() Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 069/143] KVM: MIPS: Don't leak FPU/DSP to guest Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 070/143] ALSA: hda - Add the pin fixup for HP Envy TS bass speaker Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 071/143] ALSA: hda - Set up GPIO for Toshiba Satellite S50D Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 072/143] xen/manage: Fix USB interaction issues when resuming Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 073/143] drm/i915: Correct the IOSF Dev_FN field for IOSF transfers Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 074/143] cfq-iosched: handle failure of cfq group allocation Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 075/143] tracing: Fix unmapping loop in tracing_mark_write Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 076/143] fsnotify: fix handling of renames in audit Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 077/143] drm/radeon: workaround for CP HW bug on CIK Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 078/143] drm/radeon: only enable kv/kb dpm interrupts once v3 Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 079/143] NFSv4.1: Fix a kfree() of uninitialised pointers in decode_cb_sequence_args Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 080/143] cpufreq: speedstep-smi: enable interrupts when waiting Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 081/143] mm/hugetlb: pmd_huge() returns true for non-present hugepage Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 082/143] mm: cleanup follow_page_mask() Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 083/143] mm/hugetlb: take page table lock in follow_huge_pmd() Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 084/143] mm/hugetlb: fix getting refcount 0 page in hugetlb_fault() Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 085/143] mm/hugetlb: add migration/hwpoisoned entry check in hugetlb_change_protection Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 086/143] mm/hugetlb: add migration entry check in __unmap_hugepage_range Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 087/143] mm: softdirty: unmapped addresses between VMAs are clean Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 088/143] proc/pagemap: walk page tables under pte lock Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 089/143] mm: when stealing freepages, also take pages created by splitting buddy page Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 090/143] mm/mmap.c: fix arithmetic overflow in __vm_enough_memory() Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 091/143] mm/nommu.c: " Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 092/143] iscsi-target: Drop problematic active_ts_list usage Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 093/143] target: Fix PR_APTPL_BUF_LEN buffer size limitation Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 094/143] mm/compaction: fix wrong order check in compact_finished() Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 095/143] mm/memory.c: actually remap enough memory Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 096/143] mm: hwpoison: drop lru_add_drain_all() in __soft_offline_page() Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 097/143] ALSA: hda - enable mute led quirk for one more hp machine Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 098/143] ARC: fix page address calculation if PAGE_OFFSET != LINUX_LINK_BASE Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 099/143] drm/radeon/dp: Set EDP_CONFIGURATION_SET for bridge chips if necessary Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 100/143] drm/radeon: fix voltage setup on hawaii Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 101/143] ALSA: hdspm - Constrain periods to 2 on older cards Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 102/143] jffs2: fix handling of corrupted summary length Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 103/143] dm mirror: do not degrade the mirror on discard error Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 104/143] dm io: reject unsupported DISCARD requests with EOPNOTSUPP Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 105/143] target: Add missing WRITE_SAME end-of-device sanity check Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 106/143] target: Check for LBA + sectors wrap-around in sbc_parse_cdb Kamal Mostafa
2015-03-31 19:47 ` Kamal Mostafa [this message]
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 108/143] Added Little Endian support to vtpm module Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 109/143] fixed invalid assignment of 64bit mask to host dma_boundary for scatter gather segment boundary limit Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 110/143] sg: fix read() error reporting Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 111/143] IB/qib: Do not write EEPROM Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 112/143] md/raid5: Fix livelock when array is both resyncing and degraded Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 113/143] dm: fix a race condition in dm_get_md Kamal Mostafa
2015-03-31 19:47 ` [PATCH 3.13.y-ckt 114/143] dm snapshot: fix a possible invalid memory access on unload Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 115/143] cpufreq: s3c: remove incorrect __init annotations Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 116/143] libceph: assert both regular and lingering lists in __remove_osd() Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 117/143] libceph: change from BUG to WARN for __remove_osd() asserts Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 118/143] libceph: fix double __remove_osd() problem Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 119/143] MIPS: Export FP functions used by lose_fpu(1) for KVM Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 120/143] kdb: fix incorrect counts in KDB summary command output Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 121/143] blk-throttle: check stats_cpu before reading it from sysfs Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 122/143] procfs: fix race between symlink removals and traversals Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 123/143] autofs4 copy_dev_ioctl(): keep the value of ->size we'd used for allocation Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 124/143] pktgen: fix UDP checksum computation Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 125/143] ipv6: fix ipv6_cow_metrics for non DST_HOST case Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 126/143] clk-gate: fix bit # check in clk_register_gate() Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 127/143] ALSA: off by one bug in snd_riptide_joystick_probe() Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 128/143] ath5k: fix spontaneus AR5312 freezes Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 129/143] pinctrl: pinctrl-imx: don't use invalid value of conf_reg Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 130/143] ALSA: hda - Add one more node in the EAPD supporting candidate list Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 131/143] ALSA: hda - Add pin configs for ASUS mobo with IDT 92HD73XX codec Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 132/143] drm/i915/bdw: PCI IDs ending in 0xb are ULT Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 133/143] xfs: Fix quota type in quota structures when reusing quota file Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 134/143] gpiolib: of: allow of_gpiochip_find_and_xlate to find more than one chip per node Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 135/143] gpio: tps65912: fix wrong container_of arguments Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 136/143] ALSA: pcm: Don't leave PREPARED state after draining Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 137/143] metag: Fix KSTK_EIP() and KSTK_ESP() macros Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 138/143] md/raid1: fix read balance when a drive is write-mostly Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 139/143] drm/radeon: use drm_mode_vrefresh() rather than mode->vrefresh Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 140/143] drm/radeon: fix 1 RB harvest config setup for TN/RL Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 141/143] arm64: compat Fix siginfo_t -> compat_siginfo_t conversion on big endian Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 142/143] nilfs2: fix potential memory overrun on inode Kamal Mostafa
2015-03-31 19:48 ` [PATCH 3.13.y-ckt 143/143] HID: i2c-hid: Limit reads to wMaxInputLength bytes for input events 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=1427831308-1854-108-git-send-email-kamal@canonical.com \
    --to=kamal@canonical.com \
    --cc=clm@fb.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).