Date: Wed, 14 Jan 2009 12:55:33 +0000 (UTC) From: Luigi Rizzo <luigi@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r187217 - in user/luigi/geom_sched/sys: geom sys Message-ID: <200901141255.n0ECtX7L043823@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: luigi Date: Wed Jan 14 12:55:33 2009 New Revision: 187217 URL: http://svn.freebsd.org/changeset/base/187217 Log: reduce diffs against RELENG_7 Modified: user/luigi/geom_sched/sys/geom/geom_io.c user/luigi/geom_sched/sys/sys/bio.h Modified: user/luigi/geom_sched/sys/geom/geom_io.c ============================================================================== --- user/luigi/geom_sched/sys/geom/geom_io.c Wed Jan 14 12:50:19 2009 (r187216) +++ user/luigi/geom_sched/sys/geom/geom_io.c Wed Jan 14 12:55:33 2009 (r187217) @@ -169,6 +169,9 @@ g_clone_bio(struct bio *bp) bp2->bio_parent = bp; bp2->bio_cmd = bp->bio_cmd; bp2->bio_length = bp->bio_length; +#ifdef BIO_HAS_CLASSIFY_FIELD + bp2->bio_classify = bp->bio_classify; +#endif bp2->bio_offset = bp->bio_offset; bp2->bio_data = bp->bio_data; bp2->bio_attribute = bp->bio_attribute; @@ -369,14 +372,21 @@ g_io_request(struct bio *bp, struct g_co bp->bio_error = 0; bp->bio_completed = 0; -#if 0 + { /* - * Scheduler support: if this is the first element in the geom - * chain (we know from bp->bio_parent == NULL), store - * the thread that originated the request in bp->bio_caller1, - * which should be unused in this particular entry (at least - * with the code in 7.1/8.0). + * Scheduler support: add classification info to the bio + * (in linux this is called an 'iocontext', we do not have + * it in FreeBSD yet. + * If there is no dedicated field in the bio, use the + * bp->bio_caller1 field in the root of the bio chain, + * which should be unused (at least in 7.x/8.0). + * If we do not do it here, expect someone else to do it, + * e.g. a wrapper function around g_io_requests. */ +#ifdef BIO_HAS_CLASSIFY_FIELD + if (bio->bio_classify == NULL) + bio->bio_classify = (void *)curthread->td_tid; +#elif defined(USE_PATCHED_KERNEL) { struct bio *top = bp; while (top->bio_parent) @@ -384,26 +394,8 @@ g_io_request(struct bio *bp, struct g_co if (top->bio_caller1 == NULL) top->bio_caller1 = (void *)curthread->td_tid; } -#if 0 -{ - struct bio *top = bp; - static int good = 0, req = 0; - static int last = 0; - - req++; - if (top->bio_caller1 == NULL) { - top->bio_caller1 = (void *)curthread->td_tid; - if (0) printf("new label %p (thr %p) size %d\n", - top->bio_caller1, curthread, (int)top->bio_length); - good++; - } - if (ticks > last) { - last = last + hz; - printf("at %d total %d good %d\n", ticks, req, good); - } -} -#endif -#endif +#endif /* no classification set up here */ + } KASSERT(!(bp->bio_flags & BIO_ONQUEUE), ("Bio already on queue bp=%p", bp)); Modified: user/luigi/geom_sched/sys/sys/bio.h ============================================================================== --- user/luigi/geom_sched/sys/sys/bio.h Wed Jan 14 12:50:19 2009 (r187216) +++ user/luigi/geom_sched/sys/sys/bio.h Wed Jan 14 12:55:33 2009 (r187217) @@ -86,6 +86,9 @@ struct bio { /* XXX: these go away when bio chaining is introduced */ daddr_t bio_pblkno; /* physical block number */ +#ifdef BIO_HAS_CLASSIFY_FIELD + void *bio_classify; +#endif }; /* bio_cmd */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200901141255.n0ECtX7L043823>