diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2011-08-21 08:05:41 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-08-21 08:05:41 -0700 |
commit | 8a4005d1521586f6dadba573f9abbb42c88db47e (patch) | |
tree | 4b8e182332f02820bde92448d38ad9e2af04b2e7 | |
parent | 7ce7bc4f70aeab6ba9078ce3ba785449562134b3 (diff) | |
download | stable-queue-8a4005d1521586f6dadba573f9abbb42c88db47e.tar.gz |
3.0 patches
8 files changed, 475 insertions, 0 deletions
diff --git a/queue-3.0/alsa-ac97-add-hp-compaq-dc5100-sff-pt003aw-to-headphone-jack-sense-whitelist.patch b/queue-3.0/alsa-ac97-add-hp-compaq-dc5100-sff-pt003aw-to-headphone-jack-sense-whitelist.patch new file mode 100644 index 0000000000..5210d5559a --- /dev/null +++ b/queue-3.0/alsa-ac97-add-hp-compaq-dc5100-sff-pt003aw-to-headphone-jack-sense-whitelist.patch @@ -0,0 +1,33 @@ +From eade7b281c9fc18401b989c77d5e5e660b25a3b7 Mon Sep 17 00:00:00 2001 +From: Daniel T Chen <crimsun@ubuntu.com> +Date: Sun, 14 Aug 2011 22:43:01 -0400 +Subject: ALSA: ac97: Add HP Compaq dc5100 SFF(PT003AW) to Headphone Jack Sense whitelist + +From: Daniel T Chen <crimsun@ubuntu.com> + +commit eade7b281c9fc18401b989c77d5e5e660b25a3b7 upstream. + +BugLink: https://bugs.launchpad.net/bugs/826081 + +The original reporter needs 'Headphone Jack Sense' enabled to have +audible audio, so add his PCI SSID to the whitelist. + +Reported-and-tested-by: Muhammad Khurram Khan +Signed-off-by: Daniel T Chen <crimsun@ubuntu.com> +Signed-off-by: Takashi Iwai <tiwai@suse.de> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + sound/pci/ac97/ac97_patch.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/sound/pci/ac97/ac97_patch.c ++++ b/sound/pci/ac97/ac97_patch.c +@@ -1909,6 +1909,7 @@ static unsigned int ad1981_jacks_whiteli + 0x103c0944, /* HP nc6220 */ + 0x103c0934, /* HP nc8220 */ + 0x103c006d, /* HP nx9105 */ ++ 0x103c300d, /* HP Compaq dc5100 SFF(PT003AW) */ + 0x17340088, /* FSC Scenic-W */ + 0 /* end */ + }; diff --git a/queue-3.0/alsa-snd_usb_caiaq-track-submitted-output-urbs.patch b/queue-3.0/alsa-snd_usb_caiaq-track-submitted-output-urbs.patch new file mode 100644 index 0000000000..ef2228fc05 --- /dev/null +++ b/queue-3.0/alsa-snd_usb_caiaq-track-submitted-output-urbs.patch @@ -0,0 +1,125 @@ +From da6094ea7d3c2295473d8f5134279307255d6ebf Mon Sep 17 00:00:00 2001 +From: Daniel Mack <zonque@gmail.com> +Date: Sun, 14 Aug 2011 11:31:16 +0200 +Subject: ALSA: snd_usb_caiaq: track submitted output urbs + +From: Daniel Mack <zonque@gmail.com> + +commit da6094ea7d3c2295473d8f5134279307255d6ebf upstream. + +The snd_usb_caiaq driver currently assumes that output urbs are serviced +in time and doesn't track when and whether they are given back by the +USB core. That usually works fine, but due to temporary limitations of +the XHCI stack, we faced that urbs were submitted more than once with +this approach. + +As it's no good practice to fire and forget urbs anyway, this patch +introduces a proper bit mask to track which requests have been submitted +and given back. + +That alone however doesn't make the driver work in case the host +controller is broken and doesn't give back urbs at all, and the output +stream will stop once all pre-allocated output urbs are consumed. But +it does prevent crashes of the controller stack in such cases. + +See http://bugzilla.kernel.org/show_bug.cgi?id=40702 for more details. + +Signed-off-by: Daniel Mack <zonque@gmail.com> +Reported-and-tested-by: Matej Laitl <matej@laitl.cz> +Cc: Sarah Sharp <sarah.a.sharp@linux.intel.com> +Signed-off-by: Takashi Iwai <tiwai@suse.de> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + sound/usb/caiaq/audio.c | 31 +++++++++++++++++++++++++++---- + sound/usb/caiaq/device.h | 1 + + 2 files changed, 28 insertions(+), 4 deletions(-) + +--- a/sound/usb/caiaq/audio.c ++++ b/sound/usb/caiaq/audio.c +@@ -139,8 +139,12 @@ static void stream_stop(struct snd_usb_c + + for (i = 0; i < N_URBS; i++) { + usb_kill_urb(dev->data_urbs_in[i]); +- usb_kill_urb(dev->data_urbs_out[i]); ++ ++ if (test_bit(i, &dev->outurb_active_mask)) ++ usb_kill_urb(dev->data_urbs_out[i]); + } ++ ++ dev->outurb_active_mask = 0; + } + + static int snd_usb_caiaq_substream_open(struct snd_pcm_substream *substream) +@@ -612,8 +616,8 @@ static void read_completed(struct urb *u + { + struct snd_usb_caiaq_cb_info *info = urb->context; + struct snd_usb_caiaqdev *dev; +- struct urb *out; +- int frame, len, send_it = 0, outframe = 0; ++ struct urb *out = NULL; ++ int i, frame, len, send_it = 0, outframe = 0; + size_t offset = 0; + + if (urb->status || !info) +@@ -624,7 +628,17 @@ static void read_completed(struct urb *u + if (!dev->streaming) + return; + +- out = dev->data_urbs_out[info->index]; ++ /* find an unused output urb that is unused */ ++ for (i = 0; i < N_URBS; i++) ++ if (test_and_set_bit(i, &dev->outurb_active_mask) == 0) { ++ out = dev->data_urbs_out[i]; ++ break; ++ } ++ ++ if (!out) { ++ log("Unable to find an output urb to use\n"); ++ goto requeue; ++ } + + /* read the recently received packet and send back one which has + * the same layout */ +@@ -655,8 +669,12 @@ static void read_completed(struct urb *u + out->number_of_packets = outframe; + out->transfer_flags = URB_ISO_ASAP; + usb_submit_urb(out, GFP_ATOMIC); ++ } else { ++ struct snd_usb_caiaq_cb_info *oinfo = out->context; ++ clear_bit(oinfo->index, &dev->outurb_active_mask); + } + ++requeue: + /* re-submit inbound urb */ + for (frame = 0; frame < FRAMES_PER_URB; frame++) { + urb->iso_frame_desc[frame].offset = BYTES_PER_FRAME * frame; +@@ -678,6 +696,8 @@ static void write_completed(struct urb * + dev->output_running = 1; + wake_up(&dev->prepare_wait_queue); + } ++ ++ clear_bit(info->index, &dev->outurb_active_mask); + } + + static struct urb **alloc_urbs(struct snd_usb_caiaqdev *dev, int dir, int *ret) +@@ -829,6 +849,9 @@ int snd_usb_caiaq_audio_init(struct snd_ + if (!dev->data_cb_info) + return -ENOMEM; + ++ dev->outurb_active_mask = 0; ++ BUILD_BUG_ON(N_URBS > (sizeof(dev->outurb_active_mask) * 8)); ++ + for (i = 0; i < N_URBS; i++) { + dev->data_cb_info[i].dev = dev; + dev->data_cb_info[i].index = i; +--- a/sound/usb/caiaq/device.h ++++ b/sound/usb/caiaq/device.h +@@ -96,6 +96,7 @@ struct snd_usb_caiaqdev { + int input_panic, output_panic, warned; + char *audio_in_buf, *audio_out_buf; + unsigned int samplerates, bpp; ++ unsigned long outurb_active_mask; + + struct snd_pcm_substream *sub_playback[MAX_STREAMS]; + struct snd_pcm_substream *sub_capture[MAX_STREAMS]; diff --git a/queue-3.0/alsa-usb-audio-fix-missing-mixer-db-information.patch b/queue-3.0/alsa-usb-audio-fix-missing-mixer-db-information.patch new file mode 100644 index 0000000000..f60bb1e741 --- /dev/null +++ b/queue-3.0/alsa-usb-audio-fix-missing-mixer-db-information.patch @@ -0,0 +1,44 @@ +From 38b65190c6ab0be8ce7cff69e734ca5b5e7fa309 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai <tiwai@suse.de> +Date: Fri, 19 Aug 2011 07:55:10 +0200 +Subject: ALSA: usb-audio - Fix missing mixer dB information + +From: Takashi Iwai <tiwai@suse.de> + +commit 38b65190c6ab0be8ce7cff69e734ca5b5e7fa309 upstream. + +The recent fix for testing dB range at the mixer creation time seems +to cause regressions in some devices. In such devices, reading the dB +info at probing time gives an error, thus both dBmin and dBmax are still +zero, and TLV flag isn't set although the later read of dB info succeeds. + +This patch adds a workaround for such a case by assuming that the later +read will succeed. In future, a similar test should be performed in a +case where a wrong dB range is seen even in the later read. + +Signed-off-by: Takashi Iwai <tiwai@suse.de> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + sound/usb/mixer.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/sound/usb/mixer.c ++++ b/sound/usb/mixer.c +@@ -152,6 +152,7 @@ static inline void check_mapped_dB(const + if (p && p->dB) { + cval->dBmin = p->dB->min; + cval->dBmax = p->dB->max; ++ cval->initialized = 1; + } + } + +@@ -1092,7 +1093,7 @@ static void build_feature_ctl(struct mix + " Switch" : " Volume"); + if (control == UAC_FU_VOLUME) { + check_mapped_dB(map, cval); +- if (cval->dBmin < cval->dBmax) { ++ if (cval->dBmin < cval->dBmax || !cval->initialized) { + kctl->tlv.c = mixer_vol_tlv; + kctl->vd[0].access |= + SNDRV_CTL_ELEM_ACCESS_TLV_READ | diff --git a/queue-3.0/ext4-call-ext4_ioend_wait-and-ext4_flush_completed_io-in.patch b/queue-3.0/ext4-call-ext4_ioend_wait-and-ext4_flush_completed_io-in.patch new file mode 100644 index 0000000000..7d1934b967 --- /dev/null +++ b/queue-3.0/ext4-call-ext4_ioend_wait-and-ext4_flush_completed_io-in.patch @@ -0,0 +1,66 @@ +From 2581fdc810889fdea97689cb62481201d579c796 Mon Sep 17 00:00:00 2001 +From: Jiaying Zhang <jiayingz@google.com> +Date: Sat, 13 Aug 2011 12:17:13 -0400 +Subject: ext4: call ext4_ioend_wait and ext4_flush_completed_IO in ext4_evict_inode + +From: Jiaying Zhang <jiayingz@google.com> + +commit 2581fdc810889fdea97689cb62481201d579c796 upstream. + +Flush inode's i_completed_io_list before calling ext4_io_wait to +prevent the following deadlock scenario: A page fault happens while +some process is writing inode A. During page fault, +shrink_icache_memory is called that in turn evicts another inode +B. Inode B has some pending io_end work so it calls ext4_ioend_wait() +that waits for inode B's i_ioend_count to become zero. However, inode +B's ioend work was queued behind some of inode A's ioend work on the +same cpu's ext4-dio-unwritten workqueue. As the ext4-dio-unwritten +thread on that cpu is processing inode A's ioend work, it tries to +grab inode A's i_mutex lock. Since the i_mutex lock of inode A is +still hold before the page fault happened, we enter a deadlock. + +Also moves ext4_flush_completed_IO and ext4_ioend_wait from +ext4_destroy_inode() to ext4_evict_inode(). During inode deleteion, +ext4_evict_inode() is called before ext4_destroy_inode() and in +ext4_evict_inode(), we may call ext4_truncate() without holding +i_mutex lock. As a result, there is a race between flush_completed_IO +that is called from ext4_ext_truncate() and ext4_end_io_work, which +may cause corruption on an io_end structure. This change moves +ext4_flush_completed_IO and ext4_ioend_wait from ext4_destroy_inode() +to ext4_evict_inode() to resolve the race between ext4_truncate() and +ext4_end_io_work during inode deletion. + +Signed-off-by: Jiaying Zhang <jiayingz@google.com> +Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + fs/ext4/inode.c | 6 ++++++ + fs/ext4/super.c | 1 - + 2 files changed, 6 insertions(+), 1 deletion(-) + +--- a/fs/ext4/inode.c ++++ b/fs/ext4/inode.c +@@ -189,6 +189,12 @@ void ext4_evict_inode(struct inode *inod + int err; + + trace_ext4_evict_inode(inode); ++ ++ mutex_lock(&inode->i_mutex); ++ ext4_flush_completed_IO(inode); ++ mutex_unlock(&inode->i_mutex); ++ ext4_ioend_wait(inode); ++ + if (inode->i_nlink) { + truncate_inode_pages(&inode->i_data, 0); + goto no_delete; +--- a/fs/ext4/super.c ++++ b/fs/ext4/super.c +@@ -892,7 +892,6 @@ static void ext4_i_callback(struct rcu_h + + static void ext4_destroy_inode(struct inode *inode) + { +- ext4_ioend_wait(inode); + if (!list_empty(&(EXT4_I(inode)->i_orphan))) { + ext4_msg(inode->i_sb, KERN_ERR, + "Inode %lu (%p): orphan list check failed!", diff --git a/queue-3.0/ext4-fix-ext4_should_writeback_data-for-no-journal-mode.patch b/queue-3.0/ext4-fix-ext4_should_writeback_data-for-no-journal-mode.patch new file mode 100644 index 0000000000..16d8edca08 --- /dev/null +++ b/queue-3.0/ext4-fix-ext4_should_writeback_data-for-no-journal-mode.patch @@ -0,0 +1,83 @@ +From 441c850857148935babe000fc2ba1455fe54a6a9 Mon Sep 17 00:00:00 2001 +From: Curt Wohlgemuth <curtw@google.com> +Date: Sat, 13 Aug 2011 11:25:18 -0400 +Subject: ext4: Fix ext4_should_writeback_data() for no-journal mode + +From: Curt Wohlgemuth <curtw@google.com> + +commit 441c850857148935babe000fc2ba1455fe54a6a9 upstream. + +ext4_should_writeback_data() had an incorrect sequence of +tests to determine if it should return 0 or 1: in +particular, even in no-journal mode, 0 was being returned +for a non-regular-file inode. + +This meant that, in non-journal mode, we would use +ext4_journalled_aops for directories, symlinks, and other +non-regular files. However, calling journalled aop +callbacks when there is no valid handle, can cause problems. + +This would cause a kernel crash with Jan Kara's commit +2d859db3e4 ("ext4: fix data corruption in inodes with +journalled data"), because we now dereference 'handle' in +ext4_journalled_write_end(). + +I also added BUG_ONs to check for a valid handle in the +obviously journal-only aops callbacks. + +I tested this running xfstests with a scratch device in +these modes: + + - no-journal + - data=ordered + - data=writeback + - data=journal + +All work fine; the data=journal run has many failures and a +crash in xfstests 074, but this is no different from a +vanilla kernel. + +Signed-off-by: Curt Wohlgemuth <curtw@google.com> +Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + fs/ext4/ext4_jbd2.h | 4 ++-- + fs/ext4/inode.c | 4 ++++ + 2 files changed, 6 insertions(+), 2 deletions(-) + +--- a/fs/ext4/ext4_jbd2.h ++++ b/fs/ext4/ext4_jbd2.h +@@ -289,10 +289,10 @@ static inline int ext4_should_order_data + + static inline int ext4_should_writeback_data(struct inode *inode) + { +- if (!S_ISREG(inode->i_mode)) +- return 0; + if (EXT4_JOURNAL(inode) == NULL) + return 1; ++ if (!S_ISREG(inode->i_mode)) ++ return 0; + if (ext4_test_inode_flag(inode, EXT4_INODE_JOURNAL_DATA)) + return 0; + if (test_opt(inode->i_sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA) +--- a/fs/ext4/inode.c ++++ b/fs/ext4/inode.c +@@ -1849,6 +1849,8 @@ static int ext4_journalled_write_end(str + from = pos & (PAGE_CACHE_SIZE - 1); + to = from + len; + ++ BUG_ON(!ext4_handle_valid(handle)); ++ + if (copied < len) { + if (!PageUptodate(page)) + copied = 0; +@@ -2564,6 +2566,8 @@ static int __ext4_journalled_writepage(s + goto out; + } + ++ BUG_ON(!ext4_handle_valid(handle)); ++ + ret = walk_page_buffers(handle, page_bufs, 0, len, NULL, + do_journal_get_write_access); + diff --git a/queue-3.0/ext4-fix-nomblk_io_submit-option-so-it-correctly-converts-uninit-blocks.patch b/queue-3.0/ext4-fix-nomblk_io_submit-option-so-it-correctly-converts-uninit-blocks.patch new file mode 100644 index 0000000000..69b0e7df11 --- /dev/null +++ b/queue-3.0/ext4-fix-nomblk_io_submit-option-so-it-correctly-converts-uninit-blocks.patch @@ -0,0 +1,50 @@ +From 9dd75f1f1a02d656a11a7b9b9e6c2759b9c1e946 Mon Sep 17 00:00:00 2001 +From: Theodore Ts'o <tytso@mit.edu> +Date: Sat, 13 Aug 2011 12:58:21 -0400 +Subject: ext4: fix nomblk_io_submit option so it correctly converts uninit blocks + +From: Theodore Ts'o <tytso@mit.edu> + +commit 9dd75f1f1a02d656a11a7b9b9e6c2759b9c1e946 upstream. + +Bug discovered by Jan Kara: + +Finally, commit 1449032be17abb69116dbc393f67ceb8bd034f92 returned back +the old IO submission code but apparently it forgot to return the old +handling of uninitialized buffers so we unconditionnaly call +block_write_full_page() without specifying end_io function. So AFAICS +we never convert unwritten extents to written in some cases. For +example when I mount the fs as: mount -t ext4 -o +nomblk_io_submit,dioread_nolock /dev/ubdb /mnt and do + int fd = open(argv[1], O_RDWR | O_CREAT | O_TRUNC, 0600); + char buf[1024]; + memset(buf, 'a', sizeof(buf)); + fallocate(fd, 0, 0, 16384); + write(fd, buf, sizeof(buf)); + +I get a file full of zeros (after remounting the filesystem so that +pagecache is dropped) instead of seeing the first KB contain 'a's. + +Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + fs/ext4/inode.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +--- a/fs/ext4/inode.c ++++ b/fs/ext4/inode.c +@@ -2156,7 +2156,12 @@ static int mpage_da_submit_io(struct mpa + else if (test_opt(inode->i_sb, MBLK_IO_SUBMIT)) + err = ext4_bio_write_page(&io_submit, page, + len, mpd->wbc); +- else ++ else if (buffer_uninit(page_bufs)) { ++ ext4_set_bh_endio(page_bufs, inode); ++ err = block_write_full_page_endio(page, ++ noalloc_get_block_write, ++ mpd->wbc, ext4_end_io_buffer_write); ++ } else + err = block_write_full_page(page, + noalloc_get_block_write, mpd->wbc); + diff --git a/queue-3.0/ext4-resolve-the-hang-of-direct-i-o-read-in-handling-ext4_io_end_unwritten.patch b/queue-3.0/ext4-resolve-the-hang-of-direct-i-o-read-in-handling-ext4_io_end_unwritten.patch new file mode 100644 index 0000000000..d14b06febd --- /dev/null +++ b/queue-3.0/ext4-resolve-the-hang-of-direct-i-o-read-in-handling-ext4_io_end_unwritten.patch @@ -0,0 +1,67 @@ +From 32c80b32c053dc52712dedac5e4d0aa7c93fc353 Mon Sep 17 00:00:00 2001 +From: Tao Ma <boyu.mt@taobao.com> +Date: Sat, 13 Aug 2011 12:30:59 -0400 +Subject: ext4: Resolve the hang of direct i/o read in handling EXT4_IO_END_UNWRITTEN. + +From: Tao Ma <boyu.mt@taobao.com> + +commit 32c80b32c053dc52712dedac5e4d0aa7c93fc353 upstream. + +EXT4_IO_END_UNWRITTEN flag set and the increase of i_aiodio_unwritten +should be done simultaneously since ext4_end_io_nolock always clear +the flag and decrease the counter in the same time. + +We don't increase i_aiodio_unwritten when setting +EXT4_IO_END_UNWRITTEN so it will go nagative and causes some process +to wait forever. + +Part of the patch came from Eric in his e-mail, but it doesn't fix the +problem met by Michael actually. + +http://marc.info/?l=linux-ext4&m=131316851417460&w=2 + +Reported-and-Tested-by: Michael Tokarev<mjt@tls.msk.ru> +Signed-off-by: Eric Sandeen <sandeen@redhat.com> +Signed-off-by: Tao Ma <boyu.mt@taobao.com> +Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + fs/ext4/inode.c | 9 ++++++++- + fs/ext4/page-io.c | 6 ++++-- + 2 files changed, 12 insertions(+), 3 deletions(-) + +--- a/fs/ext4/inode.c ++++ b/fs/ext4/inode.c +@@ -3645,8 +3645,15 @@ static void ext4_end_io_buffer_write(str + goto out; + } + +- io_end->flag = EXT4_IO_END_UNWRITTEN; ++ /* ++ * It may be over-defensive here to check EXT4_IO_END_UNWRITTEN now, ++ * but being more careful is always safe for the future change. ++ */ + inode = io_end->inode; ++ if (!(io_end->flag & EXT4_IO_END_UNWRITTEN)) { ++ io_end->flag |= EXT4_IO_END_UNWRITTEN; ++ atomic_inc(&EXT4_I(inode)->i_aiodio_unwritten); ++ } + + /* Add the io_end to per-inode completed io list*/ + spin_lock_irqsave(&EXT4_I(inode)->i_completed_io_lock, flags); +--- a/fs/ext4/page-io.c ++++ b/fs/ext4/page-io.c +@@ -338,8 +338,10 @@ submit_and_retry: + if ((io_end->num_io_pages >= MAX_IO_PAGES) && + (io_end->pages[io_end->num_io_pages-1] != io_page)) + goto submit_and_retry; +- if (buffer_uninit(bh)) +- io->io_end->flag |= EXT4_IO_END_UNWRITTEN; ++ if (buffer_uninit(bh) && !(io_end->flag & EXT4_IO_END_UNWRITTEN)) { ++ io_end->flag |= EXT4_IO_END_UNWRITTEN; ++ atomic_inc(&EXT4_I(inode)->i_aiodio_unwritten); ++ } + io->io_end->size += bh->b_size; + io->io_next_block++; + ret = bio_add_page(io->io_bio, bh->b_page, bh->b_size, bh_offset(bh)); diff --git a/queue-3.0/series b/queue-3.0/series index d909a3917c..b7b8376800 100644 --- a/queue-3.0/series +++ b/queue-3.0/series @@ -12,3 +12,10 @@ x86-mtrr-lock-stop-machine-during-mtrr-rendezvous-sequence.patch btrfs-detect-wether-a-device-supports-discard.patch loop-fix-deadlock-when-sysfs-and-loop_clr_fd-race-against.patch btrfs-fix-an-oops-of-log-replay.patch +alsa-usb-audio-fix-missing-mixer-db-information.patch +alsa-snd_usb_caiaq-track-submitted-output-urbs.patch +alsa-ac97-add-hp-compaq-dc5100-sff-pt003aw-to-headphone-jack-sense-whitelist.patch +ext4-fix-ext4_should_writeback_data-for-no-journal-mode.patch +ext4-call-ext4_ioend_wait-and-ext4_flush_completed_io-in.patch +ext4-resolve-the-hang-of-direct-i-o-read-in-handling-ext4_io_end_unwritten.patch +ext4-fix-nomblk_io_submit-option-so-it-correctly-converts-uninit-blocks.patch |