From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Sat, 23 Oct 2004 13:36:51 +0400 From: "Konstantin A. Lepikhov" To: ALT Linux Kernel Devel Mailing List Message-ID: <20041023093651.GA6653@lks.home> Mail-Followup-To: ALT Linux Kernel Devel Mailing List Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="PEIAKu/WMn1b1Hv9" Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: Mutt/1.4.2.1i X-Operation-System: ALT Linux Sisyphus (20040921) 2.4.27-wks-up-alt1 X-Virus-Scanned: by amavisd-new at smtp.elektrostal.ru Subject: [d-kernel] PATCH: 2.6 fixes for fix-drivers-block and fix-build X-BeenThere: devel-kernel@altlinux.ru X-Mailman-Version: 2.1.5 Precedence: list Reply-To: ALT Linux kernel packages development List-Id: ALT Linux kernel packages development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 23 Oct 2004 09:36:27 -0000 Archived-At: List-Archive: List-Post: --PEIAKu/WMn1b1Hv9 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit Hi! Найдено в -ck1 updates. Есть ли смысл их добавить? -- WBR, Konstantin chat with ==>ICQ: 109916175 Lepikhov, speak to ==>JID: lakostis@jabber.org aka L.A. Kostis write to ==>mailto:lakostis@pisem.net.nospam ...The information is like the bank... (c) EC8OR --PEIAKu/WMn1b1Hv9 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="buildfix.diff" # This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2004/10/18 22:43:26-07:00 torvalds@ppc970.osdl.org # Wrap inside '#ifndef __ASSEMBLY__' # # None of the compatibility defines make sense for assembly # files, and gcc has trouble with vararg macros when using # "-traditional" (which is used for asm), to the point of # ICE'ing. # # include/linux/compiler.h # 2004/10/18 22:43:20-07:00 torvalds@ppc970.osdl.org +4 -2 # Wrap inside '#ifndef __ASSEMBLY__' # # None of the compatibility defines make sense for assembly # files, and gcc has trouble with vararg macros when using # "-traditional" (which is used for asm), to the point of # ICE'ing. # Index: linux-2.6.9-ck1/include/linux/compiler.h =================================================================== --- linux-2.6.9-ck1.orig/include/linux/compiler.h 2004-10-19 08:57:12.000000000 +1000 +++ linux-2.6.9-ck1/include/linux/compiler.h 2004-10-19 20:05:41.255008517 +1000 @@ -1,6 +1,8 @@ #ifndef __LINUX_COMPILER_H #define __LINUX_COMPILER_H +#ifndef __ASSEMBLY__ + #ifdef __CHECKER__ # define __user __attribute__((noderef, address_space(1))) # define __kernel /* default address space */ @@ -21,7 +23,6 @@ extern void __chk_io_ptr(void __iomem *) #ifdef __KERNEL__ -#ifndef __ASSEMBLY__ #if __GNUC__ > 3 # include /* catch-all for GCC 4, 5, etc. */ #elif __GNUC__ == 3 @@ -31,7 +32,6 @@ extern void __chk_io_ptr(void __iomem *) #else # error Sorry, your compiler is too old/not recognized. #endif -#endif /* Intel compiler defines __GNUC__. So we will overwrite implementations * coming from above header files here @@ -61,6 +61,8 @@ extern void __chk_io_ptr(void __iomem *) (typeof(ptr)) (__ptr + (off)); }) #endif +#endif /* __ASSEMBLY__ */ + #endif /* __KERNEL__ */ /* --PEIAKu/WMn1b1Hv9 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="fix-bad-segment-coalescing-in-blk_recalc_rq_segments.patch" From: Jens Axboe blk_recalc_rq_segments forgots to take ->max_segment_size into account and gladly merges segments bigger than we can support, thus underestimating the number of segments needed to fill it. Signed-off-by: Jens Axboe Signed-off-by: Andrew Morton Index: linux-2.6.9-ck2/drivers/block/ll_rw_blk.c =================================================================== --- linux-2.6.9-ck2.orig/drivers/block/ll_rw_blk.c 2004-10-22 10:34:33.000000000 +1000 +++ linux-2.6.9-ck2/drivers/block/ll_rw_blk.c 2004-10-22 21:46:27.286378575 +1000 @@ -2740,22 +2740,36 @@ void blk_recalc_rq_segments(struct reque { struct bio *bio, *prevbio = NULL; int nr_phys_segs, nr_hw_segs; + unsigned int phys_size, hw_size; + request_queue_t *q = rq->q; if (!rq->bio) return; - nr_phys_segs = nr_hw_segs = 0; + phys_size = hw_size = nr_phys_segs = nr_hw_segs = 0; rq_for_each_bio(bio, rq) { /* Force bio hw/phys segs to be recalculated. */ bio->bi_flags &= ~(1 << BIO_SEG_VALID); - nr_phys_segs += bio_phys_segments(rq->q, bio); - nr_hw_segs += bio_hw_segments(rq->q, bio); + nr_phys_segs += bio_phys_segments(q, bio); + nr_hw_segs += bio_hw_segments(q, bio); if (prevbio) { - if (blk_phys_contig_segment(rq->q, prevbio, bio)) + int pseg = phys_size + prevbio->bi_size + bio->bi_size; + int hseg = hw_size + prevbio->bi_size + bio->bi_size; + + if (blk_phys_contig_segment(q, prevbio, bio) && + pseg <= q->max_segment_size) { nr_phys_segs--; - if (blk_hw_contig_segment(rq->q, prevbio, bio)) + phys_size += prevbio->bi_size + bio->bi_size; + } else + phys_size = 0; + + if (blk_hw_contig_segment(q, prevbio, bio) && + hseg <= q->max_segment_size) { nr_hw_segs--; + hw_size += prevbio->bi_size + bio->bi_size; + } else + hw_size = 0; } prevbio = bio; } --PEIAKu/WMn1b1Hv9--