From: Greg Kroah-Hartman Date: Thu, 13 Aug 2009 19:12:32 +0000 (-0700) Subject: .27 patches X-Git-Tag: v2.6.30.5~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b708aebac4b65308eed04c010978f782bca75511;p=thirdparty%2Fkernel%2Fstable-queue.git .27 patches --- diff --git a/queue-2.6.27/alsa-hda-add-missing-vmaster-initialization-for-alc269.patch b/queue-2.6.27/alsa-hda-add-missing-vmaster-initialization-for-alc269.patch new file mode 100644 index 00000000000..0133e6ad883 --- /dev/null +++ b/queue-2.6.27/alsa-hda-add-missing-vmaster-initialization-for-alc269.patch @@ -0,0 +1,33 @@ +From 100d5eb36ba20dc0b99a17ea2b9800c567bfc3d1 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Mon, 10 Aug 2009 11:55:51 +0200 +Subject: ALSA: hda - Add missing vmaster initialization for ALC269 + +From: Takashi Iwai + +commit 100d5eb36ba20dc0b99a17ea2b9800c567bfc3d1 upstream. + +Without the initialization of vmaster NID, the dB information got +confused for ALC269 codec. + +Reference: Novell bnc#527361 + https://bugzilla.novell.com/show_bug.cgi?id=527361 + +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_realtek.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -13767,6 +13767,8 @@ static int patch_alc861vd(struct hda_cod + + spec->vmaster_nid = 0x02; + ++ spec->vmaster_nid = 0x02; ++ + codec->patch_ops = alc_patch_ops; + + if (board_config == ALC861VD_AUTO) diff --git a/queue-2.6.27/nfs-fix-an-o_direct-oops.patch b/queue-2.6.27/nfs-fix-an-o_direct-oops.patch new file mode 100644 index 00000000000..a23d03a626f --- /dev/null +++ b/queue-2.6.27/nfs-fix-an-o_direct-oops.patch @@ -0,0 +1,210 @@ +From 1ae88b2e446261c038f2c0c3150ffae142b227a2 Mon Sep 17 00:00:00 2001 +From: Trond Myklebust +Date: Wed, 12 Aug 2009 09:12:30 -0400 +Subject: NFS: Fix an O_DIRECT Oops... + +From: Trond Myklebust + +commit 1ae88b2e446261c038f2c0c3150ffae142b227a2 upstream. + +We can't call nfs_readdata_release()/nfs_writedata_release() without +first initialising and referencing args.context. Doing so inside +nfs_direct_read_schedule_segment()/nfs_direct_write_schedule_segment() +causes an Oops. + +We should rather be calling nfs_readdata_free()/nfs_writedata_free() in +those cases. + +Looking at the O_DIRECT code, the "struct nfs_direct_req" is already +referencing the nfs_open_context for us. Since the readdata and writedata +structures carry a reference to that, we can simplify things by getting rid +of the extra nfs_open_context references, so that we can replace all +instances of nfs_readdata_release()/nfs_writedata_release(). + +Reported-by: Catalin Marinas +Signed-off-by: Trond Myklebust +Tested-by: Catalin Marinas +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + fs/nfs/direct.c | 20 ++++++++++---------- + fs/nfs/read.c | 6 ++---- + fs/nfs/write.c | 6 ++---- + include/linux/nfs_fs.h | 5 ++--- + 4 files changed, 16 insertions(+), 21 deletions(-) + +--- a/fs/nfs/direct.c ++++ b/fs/nfs/direct.c +@@ -255,7 +255,7 @@ static void nfs_direct_read_release(void + + if (put_dreq(dreq)) + nfs_direct_complete(dreq); +- nfs_readdata_release(calldata); ++ nfs_readdata_free(data); + } + + static const struct rpc_call_ops nfs_read_direct_ops = { +@@ -311,14 +311,14 @@ static ssize_t nfs_direct_read_schedule_ + data->npages, 1, 0, data->pagevec, NULL); + up_read(¤t->mm->mmap_sem); + if (result < 0) { +- nfs_readdata_release(data); ++ nfs_readdata_free(data); + break; + } + if ((unsigned)result < data->npages) { + bytes = result * PAGE_SIZE; + if (bytes <= pgbase) { + nfs_direct_release_pages(data->pagevec, result); +- nfs_readdata_release(data); ++ nfs_readdata_free(data); + break; + } + bytes -= pgbase; +@@ -331,7 +331,7 @@ static ssize_t nfs_direct_read_schedule_ + data->inode = inode; + data->cred = msg.rpc_cred; + data->args.fh = NFS_FH(inode); +- data->args.context = get_nfs_open_context(ctx); ++ data->args.context = ctx; + data->args.offset = pos; + data->args.pgbase = pgbase; + data->args.pages = data->pagevec; +@@ -438,7 +438,7 @@ static void nfs_direct_free_writedata(st + struct nfs_write_data *data = list_entry(dreq->rewrite_list.next, struct nfs_write_data, pages); + list_del(&data->pages); + nfs_direct_release_pages(data->pagevec, data->npages); +- nfs_writedata_release(data); ++ nfs_writedata_free(data); + } + } + +@@ -531,7 +531,7 @@ static void nfs_direct_commit_release(vo + + dprintk("NFS: %5u commit returned %d\n", data->task.tk_pid, status); + nfs_direct_write_complete(dreq, data->inode); +- nfs_commitdata_release(calldata); ++ nfs_commit_free(data); + } + + static const struct rpc_call_ops nfs_commit_direct_ops = { +@@ -564,7 +564,7 @@ static void nfs_direct_commit_schedule(s + data->args.fh = NFS_FH(data->inode); + data->args.offset = 0; + data->args.count = 0; +- data->args.context = get_nfs_open_context(dreq->ctx); ++ data->args.context = dreq->ctx; + data->res.count = 0; + data->res.fattr = &data->fattr; + data->res.verf = &data->verf; +@@ -725,14 +725,14 @@ static ssize_t nfs_direct_write_schedule + data->npages, 0, 0, data->pagevec, NULL); + up_read(¤t->mm->mmap_sem); + if (result < 0) { +- nfs_writedata_release(data); ++ nfs_writedata_free(data); + break; + } + if ((unsigned)result < data->npages) { + bytes = result * PAGE_SIZE; + if (bytes <= pgbase) { + nfs_direct_release_pages(data->pagevec, result); +- nfs_writedata_release(data); ++ nfs_writedata_free(data); + break; + } + bytes -= pgbase; +@@ -747,7 +747,7 @@ static ssize_t nfs_direct_write_schedule + data->inode = inode; + data->cred = msg.rpc_cred; + data->args.fh = NFS_FH(inode); +- data->args.context = get_nfs_open_context(ctx); ++ data->args.context = ctx; + data->args.offset = pos; + data->args.pgbase = pgbase; + data->args.pages = data->pagevec; +--- a/fs/nfs/read.c ++++ b/fs/nfs/read.c +@@ -58,17 +58,15 @@ struct nfs_read_data *nfs_readdata_alloc + return p; + } + +-static void nfs_readdata_free(struct nfs_read_data *p) ++void nfs_readdata_free(struct nfs_read_data *p) + { + if (p && (p->pagevec != &p->page_array[0])) + kfree(p->pagevec); + mempool_free(p, nfs_rdata_mempool); + } + +-void nfs_readdata_release(void *data) ++static void nfs_readdata_release(struct nfs_read_data *rdata) + { +- struct nfs_read_data *rdata = data; +- + put_nfs_open_context(rdata->args.context); + nfs_readdata_free(rdata); + } +--- a/fs/nfs/write.c ++++ b/fs/nfs/write.c +@@ -84,17 +84,15 @@ struct nfs_write_data *nfs_writedata_all + return p; + } + +-static void nfs_writedata_free(struct nfs_write_data *p) ++void nfs_writedata_free(struct nfs_write_data *p) + { + if (p && (p->pagevec != &p->page_array[0])) + kfree(p->pagevec); + mempool_free(p, nfs_wdata_mempool); + } + +-void nfs_writedata_release(void *data) ++static void nfs_writedata_release(struct nfs_write_data *wdata) + { +- struct nfs_write_data *wdata = data; +- + put_nfs_open_context(wdata->args.context); + nfs_writedata_free(wdata); + } +--- a/include/linux/nfs_fs.h ++++ b/include/linux/nfs_fs.h +@@ -461,7 +461,6 @@ extern int nfs_writepages(struct addres + extern int nfs_flush_incompatible(struct file *file, struct page *page); + extern int nfs_updatepage(struct file *, struct page *, unsigned int, unsigned int); + extern int nfs_writeback_done(struct rpc_task *, struct nfs_write_data *); +-extern void nfs_writedata_release(void *); + + /* + * Try to write back everything synchronously (but check the +@@ -476,7 +475,6 @@ extern int nfs_wb_page_cancel(struct ino + extern int nfs_commit_inode(struct inode *, int); + extern struct nfs_write_data *nfs_commitdata_alloc(void); + extern void nfs_commit_free(struct nfs_write_data *wdata); +-extern void nfs_commitdata_release(void *wdata); + #else + static inline int + nfs_commit_inode(struct inode *inode, int how) +@@ -495,6 +493,7 @@ nfs_have_writebacks(struct inode *inode) + * Allocate nfs_write_data structures + */ + extern struct nfs_write_data *nfs_writedata_alloc(unsigned int npages); ++extern void nfs_writedata_free(struct nfs_write_data *); + + /* + * linux/fs/nfs/read.c +@@ -503,12 +502,12 @@ extern int nfs_readpage(struct file *, + extern int nfs_readpages(struct file *, struct address_space *, + struct list_head *, unsigned); + extern int nfs_readpage_result(struct rpc_task *, struct nfs_read_data *); +-extern void nfs_readdata_release(void *data); + + /* + * Allocate nfs_read_data structures + */ + extern struct nfs_read_data *nfs_readdata_alloc(unsigned int npages); ++extern void nfs_readdata_free(struct nfs_read_data *); + + /* + * linux/fs/nfs3proc.c diff --git a/queue-2.6.27/series b/queue-2.6.27/series index d31b865cc88..9e1ce025f8d 100644 --- a/queue-2.6.27/series +++ b/queue-2.6.27/series @@ -24,3 +24,5 @@ usb-usbfs-fix-enoent-error-code-to-be-enodev.patch mm_for_maps-simplify-use-ptrace_may_access.patch mm_for_maps-shift-down_read-to-the-caller.patch make-sock_sendpage-use-kernel_sendpage.patch +alsa-hda-add-missing-vmaster-initialization-for-alc269.patch +nfs-fix-an-o_direct-oops.patch