From 372d6db7ee8a3a9de69413fec77dcaf68bef3c10 Mon Sep 17 00:00:00 2001 From: adilger Date: Tue, 5 Oct 2004 04:31:01 +0000 Subject: [PATCH] Land b1_2_smallfix onto b1_2 (20041004_1740) - ignore -ENOENT errors in osc_destroy (3639) - notify osc create thread that OSC is being cleaned up (4600) - bind to privileged port in socknal and tcpnal (3689) - add nettype argument for llmount in #5d in conf-sanity.sh (3936) - reconstruct ost_handle() like mds_handle() (4657) - create a new thread to do import eviction to avoid deadlock (3969) - let lconf resolve symlinked-to devices (4629) - don't unlink "objects" from directory with default EA (4554) - hold socknal file ref over connect in case target is down (4394) - allow more than 32000 subdirectories in a single directory (3244) - OST returns ENOSPC from object create when no space left (4539) - don't send truncate RPC if file size isn't changing (4410) - limit OSC precreate to 1/2 of value OST considers bogus (4778) - rate limit CERROR/CWARN console message to avoid overload (4519) - GETFILEINFO dir ioctl returns LOV EA + MDS stat in 1 call (3327) - basic mmap support (3918) - kernel patch series update from b1_4 (4711) - revalidate should check working dir is a directory (4134) - don't always mark "slow" obdfilter messages as errors (4418) --- lnet/include/linux/kp30.h | 5 + lnet/include/linux/libcfs.h | 39 +- lnet/klnds/socklnd/socklnd.c | 3 + lnet/klnds/socklnd/socklnd_cb.c | 158 +- lnet/libcfs/debug.c | 6 +- lnet/libcfs/module.c | 2 + lnet/libcfs/proc.c | 2 - lnet/libcfs/tracefile.c | 9 +- lnet/ulnds/connection.c | 114 +- lnet/ulnds/socklnd/connection.c | 114 +- lnet/utils/acceptor.c | 36 +- lnet/utils/debug.c | 9 +- lnet/utils/portals.c | 89 +- lustre/ChangeLog | 29 +- lustre/configure.in | 8 +- lustre/include/linux/lustre_debug.h | 5 + lustre/include/linux/lustre_idl.h | 1 + lustre/include/linux/lustre_net.h | 4 +- lustre/include/linux/obd.h | 2 + lustre/include/linux/obd_class.h | 13 + lustre/include/lustre/lustre_user.h | 15 + .../kernel-2.4.21-rhel-2.4-x86_64-smp.config | 1612 ++++++++++++++++++++ .../kernel-2.4.21-rhel-2.4-x86_64.config | 1612 ++++++++++++++++++++ lustre/kernel_patches/targets/.cvsignore | 1 + lustre/kernel_patches/targets/2.6-suse.target.in | 17 + .../kernel_patches/targets/2.6-vanilla.target.in | 15 + .../kernel_patches/targets/hp_pnnl-2.4.target.in | 16 + lustre/kernel_patches/targets/rh-2.4.target.in | 23 + lustre/kernel_patches/targets/rhel-2.4.target.in | 24 + .../kernel_patches/targets/suse-2.4.21-2.target.in | 14 + lustre/ldlm/ldlm_flock.c | 2 +- lustre/ldlm/ldlm_lockd.c | 3 +- lustre/ldlm/ldlm_request.c | 2 +- lustre/llite/dcache.c | 12 +- lustre/llite/dir.c | 30 +- lustre/llite/file.c | 5 +- lustre/llite/llite_internal.h | 8 +- lustre/llite/llite_lib.c | 2 +- lustre/llite/namei.c | 33 +- lustre/llite/rw.c | 73 +- lustre/llite/rw24.c | 3 +- lustre/lov/lov_obd.c | 38 +- lustre/lvfs/fsfilt_ext3.c | 2 + lustre/lvfs/lvfs_linux.c | 12 +- lustre/mdc/mdc_locks.c | 4 +- lustre/mdc/mdc_request.c | 15 +- lustre/mds/handler.c | 8 +- lustre/mds/mds_fs.c | 1 + lustre/mds/mds_open.c | 25 +- lustre/mds/mds_reint.c | 6 +- lustre/mds/mds_unlink_open.c | 46 +- lustre/obdclass/llog_internal.h | 2 + lustre/obdclass/llog_ioctl.c | 4 +- lustre/obdclass/llog_lvfs.c | 6 +- lustre/obdclass/lprocfs_status.c | 1 + lustre/obdclass/lustre_peer.c | 5 +- lustre/obdclass/obd_config.c | 12 +- lustre/obdclass/simple.c | 12 +- lustre/obdfilter/filter.c | 105 +- lustre/obdfilter/filter_internal.h | 1 + lustre/obdfilter/filter_io.c | 7 +- lustre/obdfilter/filter_lvb.c | 29 +- lustre/osc/osc_create.c | 31 +- lustre/osc/osc_internal.h | 1 + lustre/osc/osc_request.c | 10 + lustre/ost/ost_handler.c | 33 +- lustre/portals/include/linux/kp30.h | 5 + lustre/portals/include/linux/libcfs.h | 39 +- lustre/portals/knals/socknal/socknal.c | 3 + lustre/portals/knals/socknal/socknal_cb.c | 158 +- lustre/portals/libcfs/debug.c | 6 +- lustre/portals/libcfs/module.c | 2 + lustre/portals/libcfs/proc.c | 2 - lustre/portals/libcfs/tracefile.c | 9 +- lustre/portals/unals/connection.c | 114 +- lustre/portals/utils/acceptor.c | 36 +- lustre/portals/utils/debug.c | 9 +- lustre/portals/utils/portals.c | 89 +- lustre/ptlrpc/client.c | 8 +- lustre/ptlrpc/import.c | 2 +- lustre/ptlrpc/llog_server.c | 1 + lustre/scripts/lmake | 2 +- lustre/scripts/lustre | 18 +- lustre/tests/Makefile.am | 1 - lustre/tests/conf-sanity.sh | 6 +- lustre/tests/createmany.c | 22 +- lustre/tests/fsx.c | 2 +- lustre/tests/recovery-small.sh | 8 +- lustre/tests/replay-dual.sh | 7 +- lustre/tests/replay-single.sh | 1 + lustre/tests/runtests | 8 +- lustre/tests/sanity.sh | 94 +- lustre/tests/sanityN.sh | 41 +- lustre/tests/test-framework.sh | 14 +- lustre/tests/unlinkmany.c | 18 +- lustre/utils/lconf | 46 +- lustre/utils/lctl.c | 6 +- lustre/utils/lfind | 6 + lustre/utils/liblustreapi.c | 2 +- lustre/utils/lstripe | 6 + 100 files changed, 4741 insertions(+), 636 deletions(-) create mode 100644 lustre/kernel_patches/kernel_configs/kernel-2.4.21-rhel-2.4-x86_64-smp.config create mode 100644 lustre/kernel_patches/kernel_configs/kernel-2.4.21-rhel-2.4-x86_64.config create mode 100644 lustre/kernel_patches/targets/.cvsignore create mode 100644 lustre/kernel_patches/targets/2.6-suse.target.in create mode 100644 lustre/kernel_patches/targets/2.6-vanilla.target.in create mode 100644 lustre/kernel_patches/targets/hp_pnnl-2.4.target.in create mode 100644 lustre/kernel_patches/targets/rh-2.4.target.in create mode 100644 lustre/kernel_patches/targets/rhel-2.4.target.in create mode 100644 lustre/kernel_patches/targets/suse-2.4.21-2.target.in diff --git a/lnet/include/linux/kp30.h b/lnet/include/linux/kp30.h index 4a88b88..b5f1041 100644 --- a/lnet/include/linux/kp30.h +++ b/lnet/include/linux/kp30.h @@ -321,6 +321,11 @@ void portals_debug_dumplog(void); printf("%02x:%06x (@%lu %s:%s,l. %d %d %lu): " format, \ (subsys), (mask), (long)time(0), file, fn, line, \ getpid() , stack, ## a); + +#undef CWARN +#undef CERROR +#define CWARN(format, a...) CDEBUG(D_WARNING, format, ## a) +#define CERROR(format, a...) CDEBUG(D_ERROR, format, ## a) #endif /* support decl needed both by kernel and liblustre */ diff --git a/lnet/include/linux/libcfs.h b/lnet/include/linux/libcfs.h index cad7a69..301dca1 100644 --- a/lnet/include/linux/libcfs.h +++ b/lnet/include/linux/libcfs.h @@ -19,7 +19,6 @@ extern unsigned int portal_subsystem_debug; extern unsigned int portal_stack; extern unsigned int portal_debug; extern unsigned int portal_printk; -extern unsigned int portal_cerror; #include struct ptldebug_header { @@ -131,8 +130,6 @@ struct ptldebug_header { #if 1 #define CDEBUG(mask, format, a...) \ do { \ - if (portal_cerror == 0) \ - break; \ CHECK_STACK(CDEBUG_STACK); \ if (((mask) & (D_ERROR | D_EMERG | D_WARNING)) || \ (portal_debug & (mask) && \ @@ -142,8 +139,40 @@ do { \ CDEBUG_STACK, format, ## a); \ } while (0) -#define CWARN(format, a...) CDEBUG(D_WARNING, format, ## a) -#define CERROR(format, a...) CDEBUG(D_ERROR, format, ## a) +#define CDEBUG_MAX_LIMIT 600 +#define CDEBUG_LIMIT(cdebug_mask, cdebug_format, a...) \ +do { \ + static unsigned long cdebug_next; \ + static int cdebug_count, cdebug_delay = 1; \ + \ + CHECK_STACK(CDEBUG_STACK); \ + if (time_after(jiffies, cdebug_next)) { \ + portals_debug_msg(DEBUG_SUBSYSTEM, cdebug_mask, __FILE__, \ + __FUNCTION__, __LINE__, CDEBUG_STACK, \ + cdebug_format, ## a); \ + if (cdebug_count) { \ + portals_debug_msg(DEBUG_SUBSYSTEM, cdebug_mask, \ + __FILE__, __FUNCTION__, __LINE__, \ + 0, cdebug_format, ## a); \ + cdebug_count = 0; \ + } \ + if (time_after(jiffies, cdebug_next+(CDEBUG_MAX_LIMIT+10)*HZ))\ + cdebug_delay = cdebug_delay > 8 ? cdebug_delay/8 : 1; \ + else \ + cdebug_delay = cdebug_delay*2 >= CDEBUG_MAX_LIMIT*HZ? \ + CDEBUG_MAX_LIMIT * HZ : cdebug_delay*2; \ + cdebug_next = jiffies + cdebug_delay; \ + } else { \ + portals_debug_msg(DEBUG_SUBSYSTEM, \ + portal_debug & ~(D_EMERG|D_ERROR|D_WARNING),\ + __FILE__, __FUNCTION__, __LINE__, \ + CDEBUG_STACK, cdebug_format, ## a); \ + cdebug_count++; \ + } \ +} while (0) + +#define CWARN(format, a...) CDEBUG_LIMIT(D_WARNING, format, ## a) +#define CERROR(format, a...) CDEBUG_LIMIT(D_ERROR, format, ## a) #define CEMERG(format, a...) CDEBUG(D_EMERG, format, ## a) #define GOTO(label, rc) \ diff --git a/lnet/klnds/socklnd/socklnd.c b/lnet/klnds/socklnd/socklnd.c index f17ac4b..bbe19cf 100644 --- a/lnet/klnds/socklnd/socklnd.c +++ b/lnet/klnds/socklnd/socklnd.c @@ -791,6 +791,9 @@ ksocknal_create_conn (ksock_route_t *route, struct socket *sock, } } + /* Give conn a ref on sock->file since we're going to return success */ + get_file(sock->file); + LASSERT (!peer->ksnp_closing); conn->ksnc_peer = peer; diff --git a/lnet/klnds/socklnd/socklnd_cb.c b/lnet/klnds/socklnd/socklnd_cb.c index d556aa6..f6ac855 100644 --- a/lnet/klnds/socklnd/socklnd_cb.c +++ b/lnet/klnds/socklnd/socklnd_cb.c @@ -2212,18 +2212,32 @@ ksocknal_setup_sock (struct socket *sock) return (0); } -int -ksocknal_connect_peer (ksock_route_t *route, int type) +static int +ksocknal_connect_sock(struct socket **sockp, int *may_retry, + ksock_route_t *route, int local_port) { - struct sockaddr_in peer_addr; - mm_segment_t oldmm = get_fs(); - struct timeval tv; - int fd; + struct sockaddr_in locaddr; + struct sockaddr_in srvaddr; struct socket *sock; int rc; - char ipbuf[PTL_NALFMT_SIZE]; + int option; + mm_segment_t oldmm = get_fs(); + struct timeval tv; + + memset(&locaddr, 0, sizeof(locaddr)); + locaddr.sin_family = AF_INET; + locaddr.sin_port = htons(local_port); + locaddr.sin_addr.s_addr = INADDR_ANY; + + memset (&srvaddr, 0, sizeof (srvaddr)); + srvaddr.sin_family = AF_INET; + srvaddr.sin_port = htons (route->ksnr_port); + srvaddr.sin_addr.s_addr = htonl (route->ksnr_ipaddr); + + *may_retry = 0; rc = sock_create (PF_INET, SOCK_STREAM, 0, &sock); + *sockp = sock; if (rc != 0) { CERROR ("Can't create autoconnect socket: %d\n", rc); return (rc); @@ -2233,17 +2247,23 @@ ksocknal_connect_peer (ksock_route_t *route, int type) * from userspace. And we actually need the sock->file refcounting * that this gives you :) */ - fd = sock_map_fd (sock); - if (fd < 0) { + rc = sock_map_fd (sock); + if (rc < 0) { sock_release (sock); - CERROR ("sock_map_fd error %d\n", fd); - return (fd); + CERROR ("sock_map_fd error %d\n", rc); + return (rc); } - /* NB the fd now owns the ref on sock->file */ + /* NB the file descriptor (rc) now owns the ref on sock->file */ LASSERT (sock->file != NULL); LASSERT (file_count(sock->file) == 1); + get_file(sock->file); /* extra ref makes sock->file */ + sys_close(rc); /* survive this close */ + + /* Still got a single ref on sock->file */ + LASSERT (file_count(sock->file) == 1); + /* Set the socket timeouts, so our connection attempt completes in * finite time */ tv.tv_sec = ksocknal_data.ksnd_io_timeout; @@ -2254,9 +2274,9 @@ ksocknal_connect_peer (ksock_route_t *route, int type) (char *)&tv, sizeof (tv)); set_fs (oldmm); if (rc != 0) { - CERROR ("Can't set send timeout %d: %d\n", + CERROR ("Can't set send timeout %d: %d\n", ksocknal_data.ksnd_io_timeout, rc); - goto out; + goto failed; } set_fs (KERNEL_DS); @@ -2266,25 +2286,21 @@ ksocknal_connect_peer (ksock_route_t *route, int type) if (rc != 0) { CERROR ("Can't set receive timeout %d: %d\n", ksocknal_data.ksnd_io_timeout, rc); - goto out; + goto failed; } - { - int option = 1; - - set_fs (KERNEL_DS); - rc = sock->ops->setsockopt (sock, SOL_TCP, TCP_NODELAY, - (char *)&option, sizeof (option)); - set_fs (oldmm); - if (rc != 0) { - CERROR ("Can't disable nagle: %d\n", rc); - goto out; - } + option = 1; + set_fs (KERNEL_DS); + rc = sock_setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, + (char *)&option, sizeof (option)); + set_fs (oldmm); + if (rc != 0) { + CERROR("Can't set SO_REUSEADDR for socket: %d\n", rc); + goto failed; } if (route->ksnr_buffer_size != 0) { - int option = route->ksnr_buffer_size; - + option = route->ksnr_buffer_size; set_fs (KERNEL_DS); rc = sock_setsockopt (sock, SOL_SOCKET, SO_SNDBUF, (char *)&option, sizeof (option)); @@ -2292,7 +2308,7 @@ ksocknal_connect_peer (ksock_route_t *route, int type) if (rc != 0) { CERROR ("Can't set send buffer %d: %d\n", route->ksnr_buffer_size, rc); - goto out; + goto failed; } set_fs (KERNEL_DS); @@ -2302,36 +2318,74 @@ ksocknal_connect_peer (ksock_route_t *route, int type) if (rc != 0) { CERROR ("Can't set receive buffer %d: %d\n", route->ksnr_buffer_size, rc); - goto out; + goto failed; } } - - memset (&peer_addr, 0, sizeof (peer_addr)); - peer_addr.sin_family = AF_INET; - peer_addr.sin_port = htons (route->ksnr_port); - peer_addr.sin_addr.s_addr = htonl (route->ksnr_ipaddr); - - rc = sock->ops->connect (sock, (struct sockaddr *)&peer_addr, - sizeof (peer_addr), sock->file->f_flags); + + rc = sock->ops->bind(sock, + (struct sockaddr *)&locaddr, sizeof(locaddr)); + if (rc == -EADDRINUSE) { + CDEBUG(D_NET, "Port %d already in use\n", local_port); + *may_retry = 1; + goto failed; + } if (rc != 0) { - CERROR ("Error %d connecting to "LPX64" %s\n", rc, - route->ksnr_peer->ksnp_nid, - portals_nid2str(SOCKNAL, - route->ksnr_peer->ksnp_nid, - ipbuf)); - goto out; + CERROR("Error trying to bind to reserved port %d: %d\n", + local_port, rc); + goto failed; } + + rc = sock->ops->connect(sock, + (struct sockaddr *)&srvaddr, sizeof(srvaddr), + sock->file->f_flags); + if (rc == 0) + return 0; + + /* EADDRNOTAVAIL probably means we're already connected to the same + * peer/port on the same local port on a differently typed + * connection. Let our caller retry with a different local + * port... */ + *may_retry = (rc == -EADDRNOTAVAIL); + + CDEBUG(*may_retry ? D_NET : D_ERROR, + "Error %d connecting to %u.%u.%u.%u/%d\n", rc, + HIPQUAD(route->ksnr_ipaddr), route->ksnr_port); + + failed: + fput(sock->file); + return rc; +} + +int +ksocknal_connect_peer (ksock_route_t *route, int type) +{ + struct socket *sock; + int rc; + int port; + int may_retry; - rc = ksocknal_create_conn (route, sock, route->ksnr_irq_affinity, type); - if (rc == 0) { - /* Take an extra ref on sock->file to compensate for the - * upcoming close which will lose fd's ref on it. */ - get_file (sock->file); + /* Iterate through reserved ports. When typed connections are + * used, we will need to bind to multiple ports, but we only know + * this at connect time. But, by that time we've already called + * bind() so we need a new socket. */ + + for (port = 1023; port > 512; --port) { + + rc = ksocknal_connect_sock(&sock, &may_retry, route, port); + + if (rc == 0) { + rc = ksocknal_create_conn(route, sock, + route->ksnr_irq_affinity, type); + fput(sock->file); + return rc; + } + + if (!may_retry) + return rc; } - out: - sys_close (fd); - return (rc); + CERROR("Out of ports trying to bind to a reserved port\n"); + return (-EADDRINUSE); } void diff --git a/lnet/libcfs/debug.c b/lnet/libcfs/debug.c index 0b55543..3e5531a 100644 --- a/lnet/libcfs/debug.c +++ b/lnet/libcfs/debug.c @@ -67,9 +67,6 @@ unsigned int portal_debug = (D_WARNING | D_DLMTRACE | D_ERROR | D_EMERG | D_HA | D_RPCTRACE | D_VFSTRACE); EXPORT_SYMBOL(portal_debug); -unsigned int portal_cerror = 1; -EXPORT_SYMBOL(portal_cerror); - unsigned int portal_printk; EXPORT_SYMBOL(portal_printk); @@ -100,6 +97,7 @@ int portals_do_debug_dumplog(void *arg) snprintf(debug_file_name, sizeof(debug_file_path) - 1, "%s.%ld.%ld", debug_file_path, CURRENT_SECONDS, (long)arg); + printk(KERN_ALERT "LustreError: dumping log to %s\n", debug_file_name); tracefile_dump_all_pages(debug_file_name); current->journal_info = journal_info; @@ -183,7 +181,7 @@ int portals_debug_clear_buffer(void) int portals_debug_mark_buffer(char *text) { CDEBUG(D_TRACE,"***************************************************\n"); - CWARN("DEBUG MARKER: %s\n", text); + CDEBUG(D_WARNING, "DEBUG MARKER: %s\n", text); CDEBUG(D_TRACE,"***************************************************\n"); return 0; diff --git a/lnet/libcfs/module.c b/lnet/libcfs/module.c index c510aa4..f1d086b 100644 --- a/lnet/libcfs/module.c +++ b/lnet/libcfs/module.c @@ -400,6 +400,8 @@ kportal_nal_cmd(struct portals_cfg *pcfg) CDEBUG(D_IOCTL, "calling handler nal: %d, cmd: %d\n", nal, pcfg->pcfg_command); rc = nal_cmd[nal].nch_handler(pcfg, nal_cmd[nal].nch_private); + } else { + CERROR("invalid nal: %d, cmd: %d\n", nal, pcfg->pcfg_command); } up(&nal_cmd_sem); RETURN(rc); diff --git a/lnet/libcfs/proc.c b/lnet/libcfs/proc.c index 8565939..f71d672 100644 --- a/lnet/libcfs/proc.c +++ b/lnet/libcfs/proc.c @@ -78,8 +78,6 @@ static struct ctl_table portals_table[PORTALS_PRIMARY_CTLCNT + 1] = { sizeof(int), 0644, NULL, &proc_dointvec}, {PSDEV_PRINTK, "printk", &portal_printk, sizeof(int), 0644, NULL, &proc_dointvec}, - {PSDEV_CONSOLE, "console", &portal_cerror, sizeof(int), 0644, NULL, - &proc_dointvec}, {PSDEV_DEBUG_PATH, "debug_path", debug_file_path, sizeof(debug_file_path), 0644, NULL, &proc_dostring, &sysctl_string}, {PSDEV_PORTALS_UPCALL, "upcall", portals_upcall, diff --git a/lnet/libcfs/tracefile.c b/lnet/libcfs/tracefile.c index 7d79635..cf196fb 100644 --- a/lnet/libcfs/tracefile.c +++ b/lnet/libcfs/tracefile.c @@ -126,7 +126,7 @@ static struct page *trace_get_page(struct trace_cpu_data *tcd, return NULL; } page->index = 0; - page->mapping = (void *)smp_processor_id(); + page->mapping = (void *)(long)smp_processor_id(); list_add_tail(&PAGE_LIST(page), &tcd->tcd_pages); tcd->tcd_cur_pages++; @@ -190,7 +190,7 @@ static void print_to_console(struct ptldebug_header *hdr, int mask, char *buf, ptype = KERN_INFO; } - printk("%s%s: %d:%d:(%s:%d:%s()) %*s", ptype, prefix, hdr->ph_pid, + printk("%s%s: %d:%d:(%s:%d:%s()) %.*s", ptype, prefix, hdr->ph_pid, hdr->ph_extern_pid, file, hdr->ph_line_num, fn, len, buf); } @@ -453,7 +453,8 @@ int tracefile_dump_all_pages(char *filename) filp = filp_open(filename, O_CREAT|O_EXCL|O_WRONLY, 0600); if (IS_ERR(filp)) { rc = PTR_ERR(filp); - printk(KERN_ERR "couldn't open %s: %d\n", filename, rc); + printk(KERN_ERR "LustreError: can't open %s for dump: rc %d\n", + filename, rc); goto out; } @@ -625,7 +626,7 @@ static int tracefiled(void *arg) LASSERT(page_count(page) > 0); rc = filp->f_op->write(filp, page_address(page), - page->index, &filp->f_pos); + page->index, &filp->f_pos); if (rc != page->index) { printk(KERN_WARNING "wanted to write %lu but " "wrote %d\n", page->index, rc); diff --git a/lnet/ulnds/connection.c b/lnet/ulnds/connection.c index ca6999a..7b4cecd 100644 --- a/lnet/ulnds/connection.c +++ b/lnet/ulnds/connection.c @@ -314,9 +314,16 @@ connection force_tcp_connection(manager m, { connection conn; struct sockaddr_in addr; + struct sockaddr_in locaddr; unsigned int id[2]; + struct timeval tv; + __u64 incarnation; - port = tcpnal_acceptor_port; + int fd; + int option; + int rc; + int rport; + ptl_nid_t peernid = PTL_NID_ANY; id[0] = ip; id[1] = port; @@ -324,51 +331,86 @@ connection force_tcp_connection(manager m, pthread_mutex_lock(&m->conn_lock); conn = hash_table_find(m->connections, id); - if (!conn) { - int fd; - int option; - ptl_nid_t peernid = PTL_NID_ANY; - - bzero((char *) &addr, sizeof(addr)); - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = htonl(ip); - addr.sin_port = htons(port); - - if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { - perror("tcpnal socket failed"); - exit(-1); - } - if (connect(fd, (struct sockaddr *)&addr, - sizeof(struct sockaddr_in))) { - perror("tcpnal connect"); - return(0); - } + if (conn) + goto out; + memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = htonl(ip); + addr.sin_port = htons(port); + + memset(&locaddr, 0, sizeof(locaddr)); + locaddr.sin_family = AF_INET; + locaddr.sin_addr.s_addr = INADDR_ANY; + + for (rport = IPPORT_RESERVED - 1; rport > IPPORT_RESERVED / 2; --rport) { + fd = socket(AF_INET, SOCK_STREAM, 0); + if (fd < 0) { + perror("tcpnal socket failed"); + goto out; + } + + option = 1; + rc = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, + &option, sizeof(option)); + if (rc != 0) { + perror ("Can't set SO_REUSEADDR for socket"); + close(fd); + goto out; + } + + locaddr.sin_port = htons(rport); + rc = bind(fd, (struct sockaddr *)&locaddr, sizeof(locaddr)); + if (rc == 0 || errno == EACCES) { + rc = connect(fd, (struct sockaddr *)&addr, + sizeof(struct sockaddr_in)); + if (rc == 0) { + break; + } else if (errno != EADDRINUSE) { + perror("Error connecting to remote host"); + close(fd); + goto out; + } + } else if (errno != EADDRINUSE) { + perror("Error binding to privileged port"); + close(fd); + goto out; + } + close(fd); + } + + if (rport == IPPORT_RESERVED / 2) { + fprintf(stderr, "Out of ports trying to bind to a reserved port\n"); + goto out; + } + #if 1 - option = 1; - setsockopt(fd, SOL_TCP, TCP_NODELAY, &option, sizeof(option)); - option = 1<<20; - setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &option, sizeof(option)); - option = 1<<20; - setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &option, sizeof(option)); + option = 1; + setsockopt(fd, SOL_TCP, TCP_NODELAY, &option, sizeof(option)); + option = 1<<20; + setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &option, sizeof(option)); + option = 1<<20; + setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &option, sizeof(option)); #endif - /* say hello */ - if (tcpnal_hello(fd, &peernid, SOCKNAL_CONN_ANY, 0)) - exit(-1); + gettimeofday(&tv, NULL); + incarnation = (((__u64)tv.tv_sec) * 1000000) + tv.tv_usec; - conn = allocate_connection(m, ip, port, fd); - - /* let nal thread know this event right away */ - if (conn) - procbridge_wakeup_nal(pb); - } + /* say hello */ + if (tcpnal_hello(fd, &peernid, SOCKNAL_CONN_ANY, incarnation)) + exit(-1); + + conn = allocate_connection(m, ip, port, fd); + + /* let nal thread know this event right away */ + if (conn) + procbridge_wakeup_nal(pb); +out: pthread_mutex_unlock(&m->conn_lock); return (conn); } - /* Function: bind_socket * Arguments: t: the nal state for this interface * port: the port to attempt to bind to diff --git a/lnet/ulnds/socklnd/connection.c b/lnet/ulnds/socklnd/connection.c index ca6999a..7b4cecd 100644 --- a/lnet/ulnds/socklnd/connection.c +++ b/lnet/ulnds/socklnd/connection.c @@ -314,9 +314,16 @@ connection force_tcp_connection(manager m, { connection conn; struct sockaddr_in addr; + struct sockaddr_in locaddr; unsigned int id[2]; + struct timeval tv; + __u64 incarnation; - port = tcpnal_acceptor_port; + int fd; + int option; + int rc; + int rport; + ptl_nid_t peernid = PTL_NID_ANY; id[0] = ip; id[1] = port; @@ -324,51 +331,86 @@ connection force_tcp_connection(manager m, pthread_mutex_lock(&m->conn_lock); conn = hash_table_find(m->connections, id); - if (!conn) { - int fd; - int option; - ptl_nid_t peernid = PTL_NID_ANY; - - bzero((char *) &addr, sizeof(addr)); - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = htonl(ip); - addr.sin_port = htons(port); - - if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { - perror("tcpnal socket failed"); - exit(-1); - } - if (connect(fd, (struct sockaddr *)&addr, - sizeof(struct sockaddr_in))) { - perror("tcpnal connect"); - return(0); - } + if (conn) + goto out; + memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = htonl(ip); + addr.sin_port = htons(port); + + memset(&locaddr, 0, sizeof(locaddr)); + locaddr.sin_family = AF_INET; + locaddr.sin_addr.s_addr = INADDR_ANY; + + for (rport = IPPORT_RESERVED - 1; rport > IPPORT_RESERVED / 2; --rport) { + fd = socket(AF_INET, SOCK_STREAM, 0); + if (fd < 0) { + perror("tcpnal socket failed"); + goto out; + } + + option = 1; + rc = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, + &option, sizeof(option)); + if (rc != 0) { + perror ("Can't set SO_REUSEADDR for socket"); + close(fd); + goto out; + } + + locaddr.sin_port = htons(rport); + rc = bind(fd, (struct sockaddr *)&locaddr, sizeof(locaddr)); + if (rc == 0 || errno == EACCES) { + rc = connect(fd, (struct sockaddr *)&addr, + sizeof(struct sockaddr_in)); + if (rc == 0) { + break; + } else if (errno != EADDRINUSE) { + perror("Error connecting to remote host"); + close(fd); + goto out; + } + } else if (errno != EADDRINUSE) { + perror("Error binding to privileged port"); + close(fd); + goto out; + } + close(fd); + } + + if (rport == IPPORT_RESERVED / 2) { + fprintf(stderr, "Out of ports trying to bind to a reserved port\n"); + goto out; + } + #if 1 - option = 1; - setsockopt(fd, SOL_TCP, TCP_NODELAY, &option, sizeof(option)); - option = 1<<20; - setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &option, sizeof(option)); - option = 1<<20; - setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &option, sizeof(option)); + option = 1; + setsockopt(fd, SOL_TCP, TCP_NODELAY, &option, sizeof(option)); + option = 1<<20; + setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &option, sizeof(option)); + option = 1<<20; + setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &option, sizeof(option)); #endif - /* say hello */ - if (tcpnal_hello(fd, &peernid, SOCKNAL_CONN_ANY, 0)) - exit(-1); + gettimeofday(&tv, NULL); + incarnation = (((__u64)tv.tv_sec) * 1000000) + tv.tv_usec; - conn = allocate_connection(m, ip, port, fd); - - /* let nal thread know this event right away */ - if (conn) - procbridge_wakeup_nal(pb); - } + /* say hello */ + if (tcpnal_hello(fd, &peernid, SOCKNAL_CONN_ANY, incarnation)) + exit(-1); + + conn = allocate_connection(m, ip, port, fd); + + /* let nal thread know this event right away */ + if (conn) + procbridge_wakeup_nal(pb); +out: pthread_mutex_unlock(&m->conn_lock); return (conn); } - /* Function: bind_socket * Arguments: t: the nal state for this interface * port: the port to attempt to bind to diff --git a/lnet/utils/acceptor.c b/lnet/utils/acceptor.c index daed215..cff2235 100644 --- a/lnet/utils/acceptor.c +++ b/lnet/utils/acceptor.c @@ -145,7 +145,7 @@ show_connection (int fd, __u32 net_ip) void usage (char *myname) { - fprintf (stderr, "Usage: %s [-r recv_mem] [-s send_mem] [-n] [-N nal_id] port\n", myname); + fprintf (stderr, "Usage: %s [-r recv_mem] [-s send_mem] [-n] [-p] [-N nal_id] port\n", myname); exit (1); } @@ -159,9 +159,11 @@ int main(int argc, char **argv) int noclose = 0; int nonagle = 1; int nal = SOCKNAL; - int bind_irq = 0; + int bind_irq = 0; + int rport; + int require_privports = 1; - while ((c = getopt (argc, argv, "N:r:s:nli")) != -1) + while ((c = getopt (argc, argv, "N:pr:s:nli")) != -1) switch (c) { case 'r': @@ -185,7 +187,9 @@ int main(int argc, char **argv) case 'i': bind_irq = 1; break; - + case 'p': + require_privports = 0; + break; case 'N': if (parse_size(&nal, optarg) != 0 || nal < 0 || nal > NAL_MAX_NR) @@ -271,7 +275,7 @@ int main(int argc, char **argv) exit(1); } - rc = daemon(1, noclose); + rc = daemon(0, noclose); if (rc < 0) { perror("daemon(): "); exit(1); @@ -287,11 +291,12 @@ int main(int argc, char **argv) int cfd; struct portal_ioctl_data data; struct portals_cfg pcfg; + int privileged = 0; + char addrstr[INET_ADDRSTRLEN]; #ifdef HAVE_LIBWRAP struct request_info request; - char addrstr[INET_ADDRSTRLEN]; #endif - + cfd = accept(fd, (struct sockaddr *)&clntaddr, &len); if ( cfd < 0 ) { perror("accept"); @@ -299,6 +304,7 @@ int main(int argc, char **argv) continue; } + rport = ntohs(clntaddr.sin_port); #ifdef HAVE_LIBWRAP /* libwrap access control */ request_init(&request, RQ_DAEMON, "lustre", RQ_FILE, cfd, 0); @@ -307,11 +313,21 @@ int main(int argc, char **argv) inet_ntop(AF_INET, &clntaddr.sin_addr, addrstr, INET_ADDRSTRLEN); syslog(LOG_WARNING, "Unauthorized access from %s:%hd\n", - addrstr, ntohs(clntaddr.sin_port)); + addrstr, rport); close (cfd); continue; } #endif + + if (require_privports && rport >= IPPORT_RESERVED) { + inet_ntop(AF_INET, &clntaddr.sin_addr, + addrstr, INET_ADDRSTRLEN); + syslog(LOG_ERR, "Closing non-privileged connection from %s:%d\n", + addrstr, rport); + close(cfd); + continue; + } + show_connection (cfd, clntaddr.sin_addr.s_addr); PCFG_INIT(pcfg, NAL_CMD_REGISTER_PEER_FD); @@ -319,11 +335,11 @@ int main(int argc, char **argv) pcfg.pcfg_fd = cfd; pcfg.pcfg_flags = bind_irq; pcfg.pcfg_misc = SOCKNAL_CONN_NONE; /* == incoming connection */ - + PORTAL_IOC_INIT(data); data.ioc_pbuf1 = (char*)&pcfg; data.ioc_plen1 = sizeof(pcfg); - + if (ioctl(pfd, IOC_PORTAL_NAL_CMD, &data) < 0) { perror("ioctl failed"); } else { diff --git a/lnet/utils/debug.c b/lnet/utils/debug.c index dce196f..78d4eb6 100644 --- a/lnet/utils/debug.c +++ b/lnet/utils/debug.c @@ -452,6 +452,7 @@ int jt_dbg_debug_file(int argc, char **argv) return parse_buffer(in, out); } +const char debug_daemon_usage[]="usage: debug_daemon {start file [MB]|stop}\n"; int jt_dbg_debug_daemon(int argc, char **argv) { int i, rc, fd; @@ -459,8 +460,7 @@ int jt_dbg_debug_daemon(int argc, char **argv) struct portal_ioctl_data data; if (argc <= 1) { - fprintf(stderr, "usage: %s [start file <#MB>|stop|pause|" - "continue]\n", argv[0]); + fprintf(stderr, debug_daemon_usage); return 0; } @@ -473,8 +473,7 @@ int jt_dbg_debug_daemon(int argc, char **argv) if (strcasecmp(argv[1], "start") == 0) { if (argc != 3) { - fprintf(stderr, "usage: %s [start file|stop]\n", - argv[0]); + fprintf(stderr, debug_daemon_usage); return 1; } @@ -494,7 +493,7 @@ int jt_dbg_debug_daemon(int argc, char **argv) return 1; } } else { - fprintf(stderr, "usage: %s [start file|stop]\n", argv[0]); + fprintf(stderr, debug_daemon_usage); return 1; } diff --git a/lnet/utils/portals.c b/lnet/utils/portals.c index 9760984..6025ee6 100644 --- a/lnet/utils/portals.c +++ b/lnet/utils/portals.c @@ -61,7 +61,6 @@ unsigned int portal_debug; unsigned int portal_printk; unsigned int portal_stack; -unsigned int portal_cerror = 1; static unsigned int g_nal = 0; @@ -657,6 +656,7 @@ int jt_ptl_connect(int argc, char **argv) { struct portals_cfg pcfg; struct sockaddr_in srvaddr; + struct sockaddr_in locaddr; __u32 ipaddr; char *flag; int fd, rc; @@ -665,7 +665,7 @@ int jt_ptl_connect(int argc, char **argv) int txmem = 0; int bind_irq = 0; int type = SOCKNAL_CONN_ANY; - int port; + int port, rport; int o; int olen; @@ -726,45 +726,76 @@ int jt_ptl_connect(int argc, char **argv) return (-1); } + memset(&locaddr, 0, sizeof(locaddr)); + locaddr.sin_family = AF_INET; + locaddr.sin_addr.s_addr = INADDR_ANY; + memset(&srvaddr, 0, sizeof(srvaddr)); srvaddr.sin_family = AF_INET; srvaddr.sin_port = htons(port); srvaddr.sin_addr.s_addr = htonl(ipaddr); - fd = socket(PF_INET, SOCK_STREAM, 0); - if ( fd < 0 ) { - fprintf(stderr, "socket() failed: %s\n", strerror(errno)); - return -1; - } + for (rport = IPPORT_RESERVED - 1; rport > IPPORT_RESERVED / 2; --rport) { + fd = socket(PF_INET, SOCK_STREAM, 0); + if ( fd < 0 ) { + fprintf(stderr, "socket() failed: %s\n", strerror(errno)); + return -1; + } - if (g_socket_nonagle) - { o = 1; - if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &o, sizeof (o)) != 0) { - fprintf(stderr, "cannot disable nagle: %s\n", strerror(errno)); - return (-1); + rc = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, + &o, sizeof(o)); + + if (g_socket_nonagle) { + o = 1; + rc = setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &o, sizeof (o)); + if (rc != 0) { + fprintf(stderr, "cannot disable nagle: %s\n", + strerror(errno)); + return (-1); + } } - } - - if (g_socket_rxmem != 0) { - o = g_socket_rxmem; - if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &o, sizeof (o)) != 0) { - fprintf(stderr, "cannot set receive buffer size: %s\n", strerror(errno)); - return (-1); + + if (g_socket_rxmem != 0) { + o = g_socket_rxmem; + rc = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &o, sizeof (o)); + if (rc != 0) { + fprintf(stderr, "cannot set receive buffer size: %s\n", + strerror(errno)); + return (-1); + } } - } - - if (g_socket_txmem != 0) { - o = g_socket_txmem; - if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &o, sizeof (o)) != 0) { - fprintf(stderr, "cannot set send buffer size: %s\n", strerror(errno)); - return (-1); + + if (g_socket_txmem != 0) { + o = g_socket_txmem; + rc = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &o, sizeof (o)); + if (rc != 0) { + fprintf(stderr, "cannot set send buffer size: %s\n", strerror(errno)); + return (-1); + } + } + + locaddr.sin_port = htons(rport); + rc = bind(fd, (struct sockaddr *)&locaddr, sizeof(locaddr)); + if (rc == 0 || errno == EACCES) { + rc = connect(fd, (struct sockaddr *)&srvaddr, sizeof(srvaddr)); + if (rc == 0) { + break; + } else if (errno != EADDRINUSE) { + fprintf(stderr, "Error connecting to host: %s\n", strerror(errno)); + close(fd); + return -1; + } + } else if (errno != EADDRINUSE) { + fprintf(stderr, "Error binding to port %d: %d: %s\n", port, errno, strerror(errno)); + close(fd); + return -1; } } - rc = connect(fd, (struct sockaddr *)&srvaddr, sizeof(srvaddr)); - if ( rc == -1 ) { - fprintf(stderr, "connect() failed: %s\n", strerror(errno)); + if (rport == IPPORT_RESERVED / 2) { + fprintf(stderr, + "Warning: all privileged ports are in use.\n"); return -1; } diff --git a/lustre/ChangeLog b/lustre/ChangeLog index d06186d..983ead3 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -1,3 +1,25 @@ +tbd Cluster File Systems, Inc. + * version 1.2.7 + * bug fixes + - ignore -ENOENT errors in osc_destroy (3639) + - notify osc create thread that OSC is being cleaned up (4600) + - bind to privileged port in socknal and tcpnal (3689) + - add nettype argument for llmount in #5d in conf-sanity.sh (3936) + - reconstruct ost_handle() like mds_handle() (4657) + - create a new thread to do import eviction to avoid deadlock (3969) + - let lconf resolve symlinked-to devices (4629) + - don't unlink "objects" from directory with default EA (4554) + - hold socknal file ref over connect in case target is down (4394) + - allow more than 32000 subdirectories in a single directory (3244) + - OST returns ENOSPC from object create when no space left (4539) + - don't send truncate RPC if file size isn't changing (4410) + - limit OSC precreate to 1/2 of value OST considers bogus (4778) + * miscellania + - rate limit CERROR/CWARN console message to avoid overload (4519) + - GETFILEINFO dir ioctl returns LOV EA + MDS stat in 1 call (3327) + - basic mmap support (3918) + - kernel patch series update from b1_4 (4711) + 2004-09-16 Cluster File Systems, Inc. * version 1.2.6 * bug fixes @@ -11,7 +33,9 @@ - "lctl deactivate" will stop automatic recovery attempts (3406) - look for existing locks in ldlm_handle_enqueue() (3764) - don't resolve lock handle twice in recovery avoiding race (4401) - - basic mmap support (3918) + - revalidate should check working dir is a directory (4134) + * miscellania + - don't always mark "slow" obdfilter messages as errors (4418) 2004-08-24 Cluster File Systems, Inc. * version 1.2.5 @@ -19,7 +43,7 @@ - don't close LustreDB during write_conf until it is done (3860) - fix typo in lconf for_each_profile (3821) - allow dumping logs from multiple threads at one time (3820) - - don't allow multiple threads in OSC recovery(3812) + - don't allow multiple threads in OSC recovery (3812) - fix debug_size parameters (3864) - fix mds_postrecov to initialize import for llog ctxt (3121) - replace config semaphore with spinlock (3306) @@ -35,7 +59,6 @@ - don't match INVALID dentries from d_lookup and spin (3784) - hold dcache_lock while marking dentries INVALID and hashing (4255) - fix invalid assertion in ptlrpc_set_wait (3880) - - create a new thread to do import eviction to avoid deadlock (3969) * miscellania - add libwrap support for the TCP acceptor (3996) - add /proc/sys/portals/routes for non-root route listing (3994) diff --git a/lustre/configure.in b/lustre/configure.in index 44ce9a1..e8763cb 100644 --- a/lustre/configure.in +++ b/lustre/configure.in @@ -5,7 +5,7 @@ AC_INIT AC_CANONICAL_SYSTEM -AM_INIT_AUTOMAKE(lustre, 1.2.6) +AM_INIT_AUTOMAKE(lustre, 1.2.7) # AM_MAINTAINER_MODE # Four main targets: lustre kernel modules, utilities, tests, and liblustre @@ -189,6 +189,12 @@ doc/Makefile include/Makefile include/linux/Makefile include/lustre/Makefile +kernel_patches/targets/2.6-suse.target +kernel_patches/targets/2.6-vanilla.target +kernel_patches/targets/hp_pnnl-2.4.target +kernel_patches/targets/rh-2.4.target +kernel_patches/targets/rhel-2.4.target +kernel_patches/targets/suse-2.4.21-2.target ldiskfs/Makefile ldiskfs/autoMakefile ldlm/Makefile diff --git a/lustre/include/linux/lustre_debug.h b/lustre/include/linux/lustre_debug.h index 669c0e8..fc7349d 100644 --- a/lustre/include/linux/lustre_debug.h +++ b/lustre/include/linux/lustre_debug.h @@ -42,6 +42,11 @@ do { if (offset > ASSERT_MAX_SIZE_MB << 20) { \ OP; \ }} while(0) +#define LL_CDEBUG_PAGE(mask, page, fmt, arg...) \ + CDEBUG(mask, "page %p map %p index %lu flags %lx count %u priv %0lx: " \ + fmt, page, page->mapping, page->index, page->flags, \ + atomic_read(&page->count), page->private, ## arg) + /* lib/debug.c */ int dump_lniobuf(struct niobuf_local *lnb); int dump_rniobuf(struct niobuf_remote *rnb); diff --git a/lustre/include/linux/lustre_idl.h b/lustre/include/linux/lustre_idl.h index 53a172c..6e053b8 100644 --- a/lustre/include/linux/lustre_idl.h +++ b/lustre/include/linux/lustre_idl.h @@ -407,6 +407,7 @@ extern void lustre_swab_obd_statfs (struct obd_statfs *os); #define OBD_BRW_CHECK 0x10 #define OBD_BRW_FROM_GRANT 0x20 /* the osc manages this under llite */ #define OBD_BRW_GRANTED 0x40 /* the ost manages this */ +#define OBD_BRW_DROP 0x80 /* drop the page after IO */ #define OBD_OBJECT_EOF 0xffffffffffffffffULL diff --git a/lustre/include/linux/lustre_net.h b/lustre/include/linux/lustre_net.h index 489b5a1..aba2ff1 100644 --- a/lustre/include/linux/lustre_net.h +++ b/lustre/include/linux/lustre_net.h @@ -89,7 +89,7 @@ #define MDT_MAX_THREADS 32UL #define MDT_NUM_THREADS max(min_t(unsigned long, num_physpages / 8192, \ MDT_MAX_THREADS), 2UL) -#define MDS_NBUFS 64 +#define MDS_NBUFS (64 * smp_num_cpus) #define MDS_BUFSIZE (8 * 1024) /* Assume file name length = FNAME_MAX = 256 (true for extN). * path name length = PATH_MAX = 4096 @@ -110,7 +110,7 @@ #define OST_MAX_THREADS 36UL #define OST_NUM_THREADS max(min_t(unsigned long, num_physpages / 8192, \ OST_MAX_THREADS), 2UL) -#define OST_NBUFS 64 +#define OST_NBUFS (64 * smp_num_cpus) #define OST_BUFSIZE (8 * 1024) /* OST_MAXREQSIZE ~= 1640 bytes = * lustre_msg + obdo + 16 * obd_ioobj + 64 * niobuf_remote diff --git a/lustre/include/linux/obd.h b/lustre/include/linux/obd.h index d8869b1..7f01b9b 100644 --- a/lustre/include/linux/obd.h +++ b/lustre/include/linux/obd.h @@ -610,6 +610,8 @@ struct obd_ops { int (*o_teardown_async_page)(struct obd_export *exp, struct lov_stripe_md *lsm, struct lov_oinfo *loi, void *cookie); + int (*o_increase_kms)(struct obd_export *exp, struct lov_stripe_md *lsm, + obd_off size); int (*o_punch)(struct obd_export *exp, struct obdo *oa, struct lov_stripe_md *ea, obd_size start, obd_size end, struct obd_trans_info *oti); diff --git a/lustre/include/linux/obd_class.h b/lustre/include/linux/obd_class.h index d70264c..31e2c4f 100644 --- a/lustre/include/linux/obd_class.h +++ b/lustre/include/linux/obd_class.h @@ -765,6 +765,19 @@ static inline int obd_commitrw(int cmd, struct obd_export *exp, struct obdo *oa, RETURN(rc); } +static inline int obd_increase_kms(struct obd_export *exp, + struct lov_stripe_md *lsm, obd_off size) +{ + int rc; + ENTRY; + + OBD_CHECK_OP(exp->exp_obd, increase_kms, -EOPNOTSUPP); + OBD_COUNTER_INCREMENT(exp->exp_obd, increase_kms); + + rc = OBP(exp->exp_obd, increase_kms)(exp, lsm, size); + RETURN(rc); +} + static inline int obd_iocontrol(unsigned int cmd, struct obd_export *exp, int len, void *karg, void *uarg) { diff --git a/lustre/include/lustre/lustre_user.h b/lustre/include/lustre/lustre_user.h index 795de30..38ea2f2 100644 --- a/lustre/include/lustre/lustre_user.h +++ b/lustre/include/lustre/lustre_user.h @@ -28,6 +28,7 @@ #include #else #include +#include #endif /* for statfs() */ @@ -45,6 +46,7 @@ #define IOC_MDC_TYPE 'i' #define IOC_MDC_GETSTRIPE _IOWR(IOC_MDC_TYPE, 21, struct lov_mds_md *) +#define IOC_MDC_GETFILEINFO _IOWR(IOC_MDC_TYPE, 22, struct lov_mds_data *) #define O_LOV_DELAY_CREATE 0100000000 /* hopefully this does not conflict */ @@ -78,6 +80,19 @@ struct lov_user_md_v1 { /* LOV EA user data (host-endian) */ struct lov_user_ost_data_v1 lmm_objects[0]; /* per-stripe data */ } __attribute__((packed)); +#if defined(__x86_64__) || defined(__ia64__) || defined(__ppc64__) +typedef struct stat lstat_t; +#else +typedef struct stat64 lstat_t; +#endif + +#define lov_user_mds_data lov_user_mds_data_v1 +struct lov_user_mds_data_v1 { + lstat_t lmd_st; /* MDS stat struct */ + struct lov_user_md_v1 lmd_lmm; /* LOV EA user data */ +} __attribute__((packed)); + + struct ll_recreate_obj { __u64 lrc_id; __u32 lrc_ost_idx; diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.4.21-rhel-2.4-x86_64-smp.config b/lustre/kernel_patches/kernel_configs/kernel-2.4.21-rhel-2.4-x86_64-smp.config new file mode 100644 index 0000000..1a08c37 --- /dev/null +++ b/lustre/kernel_patches/kernel_configs/kernel-2.4.21-rhel-2.4-x86_64-smp.config @@ -0,0 +1,1612 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_X86_64=y +CONFIG_X86=y +# CONFIG_ISA is not set +# CONFIG_SBUS is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +CONFIG_X86_CMPXCHG=y +CONFIG_EARLY_PRINTK=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODVERSIONS=y +CONFIG_KMOD=y + +# +# Processor type and features +# +CONFIG_MK8=y +# CONFIG_IA32E is not set +# CONFIG_GENERIC_CPU is not set +CONFIG_X86_L1_CACHE_BYTES=64 +CONFIG_X86_L1_CACHE_SHIFT=6 +CONFIG_X86_TSC=y +CONFIG_X86_GOOD_APIC=y +# CONFIG_MICROCODE is not set +CONFIG_X86_MSR=m +CONFIG_X86_CPUID=m +# CONFIG_MATH_EMULATION is not set +# CONFIG_MCA is not set +# CONFIG_EISA is not set +CONFIG_X86_IO_APIC=y +CONFIG_X86_LOCAL_APIC=y +CONFIG_MTRR=y +CONFIG_SMP=y +CONFIG_HPET_TIMER=y +CONFIG_GART_IOMMU=y +# CONFIG_SWIOTLB is not set +CONFIG_NR_SIBLINGS_0=y +# CONFIG_NR_SIBLINGS_2 is not set +CONFIG_HAVE_DEC_LOCK=y +CONFIG_MCE=y +CONFIG_K8_NUMA=y +CONFIG_DISCONTIGMEM=y +CONFIG_NUMA=y + +# +# General setup +# +CONFIG_NET=y +CONFIG_PCI=y +CONFIG_PCI_DIRECT=y +CONFIG_PCI_NAMES=y +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +# CONFIG_PCMCIA is not set + +# +# PCI Hotplug Support +# +# CONFIG_HOTPLUG_PCI is not set +# CONFIG_HOTPLUG_PCI_COMPAQ is not set +# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set +# CONFIG_HOTPLUG_PCI_IBM is not set +# CONFIG_HOTPLUG_PCI_ACPI is not set +CONFIG_SYSVIPC=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_SYSCTL=y +CONFIG_KCORE_ELF=y +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=m +CONFIG_AUDIT=m +CONFIG_PM=y +CONFIG_IA32_EMULATION=y +CONFIG_COMPAT=y +CONFIG_ACPI=y + +# +# ACPI Support +# +CONFIG_ACPI=y +# CONFIG_ACPI_HT_ONLY is not set +CONFIG_ACPI_BOOT=y +CONFIG_ACPI_BUS=y +CONFIG_ACPI_INTERPRETER=y +CONFIG_ACPI_EC=y +CONFIG_ACPI_POWER=y +CONFIG_ACPI_PCI=y +# CONFIG_ACPI_SLEEP is not set +CONFIG_ACPI_SYSTEM=y +CONFIG_ACPI_AC=m +CONFIG_ACPI_BATTERY=m +CONFIG_ACPI_BUTTON=m +CONFIG_ACPI_FAN=m +CONFIG_ACPI_PROCESSOR=m +CONFIG_ACPI_THERMAL=m +# CONFIG_ACPI_NUMA is not set +# CONFIG_ACPI_ASUS is not set +# CONFIG_ACPI_TOSHIBA is not set +# CONFIG_ACPI_DEBUG is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Parallel port support +# +CONFIG_PARPORT=m +CONFIG_PARPORT_PC=m +CONFIG_PARPORT_PC_CML1=m +CONFIG_PARPORT_SERIAL=m +# CONFIG_PARPORT_PC_FIFO is not set +# CONFIG_PARPORT_PC_SUPERIO is not set +# CONFIG_PARPORT_AMIGA is not set +# CONFIG_PARPORT_MFC3 is not set +# CONFIG_PARPORT_ATARI is not set +# CONFIG_PARPORT_GSC is not set +# CONFIG_PARPORT_SUNBPP is not set +# CONFIG_PARPORT_OTHER is not set +CONFIG_PARPORT_1284=y + +# +# Block devices +# +CONFIG_BLK_DEV_FD=m +# CONFIG_BLK_DEV_XD is not set +CONFIG_PARIDE=m +CONFIG_PARIDE_PARPORT=m +CONFIG_PARIDE_PD=m +CONFIG_PARIDE_PCD=m +CONFIG_PARIDE_PF=m +CONFIG_PARIDE_PT=m +CONFIG_PARIDE_PG=m +CONFIG_PARIDE_ATEN=m +CONFIG_PARIDE_BPCK=m +CONFIG_PARIDE_BPCK6=m +CONFIG_PARIDE_COMM=m +CONFIG_PARIDE_DSTR=m +CONFIG_PARIDE_FIT2=m +CONFIG_PARIDE_FIT3=m +CONFIG_PARIDE_EPAT=m +CONFIG_PARIDE_EPATC8=y +CONFIG_PARIDE_EPIA=m +CONFIG_PARIDE_FRIQ=m +CONFIG_PARIDE_FRPW=m +CONFIG_PARIDE_KBIC=m +CONFIG_PARIDE_KTTI=m +CONFIG_PARIDE_ON20=m +CONFIG_PARIDE_ON26=m +CONFIG_BLK_CPQ_DA=m +CONFIG_BLK_CPQ_CISS_DA=m +CONFIG_CISS_SCSI_TAPE=y +# CONFIG_CISS_MONITOR_THREAD is not set +CONFIG_BLK_DEV_DAC960=m +CONFIG_BLK_DEV_UMEM=m +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y +CONFIG_BLK_STATS=y + +# +# Multi-device support (RAID and LVM) +# +CONFIG_MD=y +CONFIG_BLK_DEV_MD=y +CONFIG_MD_LINEAR=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID5=m +CONFIG_MD_MULTIPATH=m +CONFIG_BLK_DEV_LVM=m + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK_DEV=y +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_FILTER=y +CONFIG_UNIX=y +CONFIG_NET_KEY=m +CONFIG_INET=y +CONFIG_TUX=m +CONFIG_TUX_EXTCGI=y +# CONFIG_TUX_EXTENDED_LOG is not set +# CONFIG_TUX_DEBUG is not set +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_FWMARK=y +CONFIG_IP_ROUTE_NAT=y +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_TOS=y +CONFIG_IP_ROUTE_VERBOSE=y +# CONFIG_IP_PNP is not set +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE=m +CONFIG_NET_IPGRE_BROADCAST=y +CONFIG_IP_MROUTE=y +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +CONFIG_SYN_COOKIES=y +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_CONNTRACK=m +CONFIG_IP_NF_FTP=m +CONFIG_IP_NF_AMANDA=m +CONFIG_IP_NF_TFTP=m +CONFIG_IP_NF_IRC=m +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_LIMIT=m +CONFIG_IP_NF_MATCH_MAC=m +CONFIG_IP_NF_MATCH_PKTTYPE=m +CONFIG_IP_NF_MATCH_MARK=m +CONFIG_IP_NF_MATCH_MULTIPORT=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_DSCP=m +CONFIG_IP_NF_MATCH_AH_ESP=m +CONFIG_IP_NF_MATCH_LENGTH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_TCPMSS=m +CONFIG_IP_NF_MATCH_HELPER=m +CONFIG_IP_NF_MATCH_STATE=m +CONFIG_IP_NF_MATCH_CONNTRACK=m +CONFIG_IP_NF_MATCH_UNCLEAN=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_MIRROR=m +CONFIG_IP_NF_NAT=m +CONFIG_IP_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_NAT_AMANDA=m +CONFIG_IP_NF_NAT_LOCAL=y +CONFIG_IP_NF_NAT_SNMP_BASIC=m +CONFIG_IP_NF_NAT_IRC=m +CONFIG_IP_NF_NAT_FTP=m +CONFIG_IP_NF_NAT_TFTP=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_DSCP=m +CONFIG_IP_NF_TARGET_MARK=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_NF_TARGET_TCPMSS=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m +CONFIG_IP_NF_COMPAT_IPCHAINS=m +CONFIG_IP_NF_NAT_NEEDED=y +CONFIG_IP_NF_COMPAT_IPFWADM=m +CONFIG_IP_NF_NAT_NEEDED=y + +# +# IP: Virtual Server Configuration +# +CONFIG_IP_VS=m +# CONFIG_IP_VS_DEBUG is not set +CONFIG_IP_VS_TAB_BITS=16 +CONFIG_IP_VS_RR=m +CONFIG_IP_VS_WRR=m +CONFIG_IP_VS_LC=m +CONFIG_IP_VS_WLC=m +CONFIG_IP_VS_LBLC=m +CONFIG_IP_VS_LBLCR=m +CONFIG_IP_VS_DH=m +CONFIG_IP_VS_SH=m +CONFIG_IP_VS_FTP=m +CONFIG_IPV6=m +CONFIG_IPV6_PRIVACY=y + +# +# IPv6: Netfilter Configuration +# +# CONFIG_IP6_NF_QUEUE is not set +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_LIMIT=m +CONFIG_IP6_NF_MATCH_MAC=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_MULTIPORT=m +CONFIG_IP6_NF_MATCH_OWNER=m +CONFIG_IP6_NF_MATCH_MARK=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_AHESP=m +CONFIG_IP6_NF_MATCH_LENGTH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_TARGET_MARK=m +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_TUNNEL=m +CONFIG_XFRM=y +CONFIG_XFRM_USER=y +# CONFIG_KHTTPD is not set +CONFIG_ATM=y +CONFIG_ATM_CLIP=y +# CONFIG_ATM_CLIP_NO_ICMP is not set +CONFIG_ATM_LANE=m +CONFIG_ATM_MPOA=m +CONFIG_ATM_BR2684=m +CONFIG_ATM_BR2684_IPFILTER=y +CONFIG_VLAN_8021Q=m +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set +CONFIG_ATALK=m + +# +# Appletalk devices +# +CONFIG_DEV_APPLETALK=y +CONFIG_COPS_DAYNA=y +CONFIG_COPS_TANGENT=y +CONFIG_IPDDP=m +CONFIG_IPDDP_ENCAP=y +CONFIG_IPDDP_DECAP=y +CONFIG_DECNET=m +CONFIG_DECNET_SIOCGIFCONF=y +CONFIG_DECNET_ROUTER=y +CONFIG_DECNET_ROUTE_FWMARK=y +CONFIG_BRIDGE=m +# CONFIG_X25 is not set +CONFIG_EDP2=m +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +CONFIG_NET_DIVERT=y +# CONFIG_ECONET is not set +CONFIG_WAN_ROUTER=m +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_CSZ=m +# CONFIG_NET_SCH_ATM is not set +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_DSMARK=m +CONFIG_NET_SCH_INGRESS=m +CONFIG_NET_QOS=y +CONFIG_NET_ESTIMATOR=y +CONFIG_NET_CLS=y +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_ROUTE=y +CONFIG_NET_CLS_FW=m +CONFIG_NET_CLS_U32=m +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +CONFIG_NET_CLS_POLICE=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set + +# +# Telephony Support +# +# CONFIG_PHONE is not set +# CONFIG_PHONE_IXJ is not set +# CONFIG_PHONE_IXJ_PCMCIA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +CONFIG_IDEDISK_MULTI_MODE=y +# CONFIG_IDEDISK_STROKE is not set +# CONFIG_BLK_DEV_IDECS is not set +CONFIG_BLK_DEV_IDECD=m +CONFIG_BLK_DEV_IDETAPE=m +CONFIG_BLK_DEV_IDEFLOPPY=y +CONFIG_BLK_DEV_IDESCSI=m +# CONFIG_IDE_TASK_IOCTL is not set +CONFIG_BLK_DEV_CMD640=y +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +CONFIG_BLK_DEV_IDEPCI=y +CONFIG_BLK_DEV_GENERIC=y +CONFIG_IDEPCI_SHARE_IRQ=y +CONFIG_BLK_DEV_IDEDMA_PCI=y +# CONFIG_BLK_DEV_OFFBOARD is not set +# CONFIG_BLK_DEV_IDEDMA_FORCED is not set +CONFIG_IDEDMA_PCI_AUTO=y +# CONFIG_IDEDMA_ONLYDISK is not set +CONFIG_BLK_DEV_IDEDMA=y +# CONFIG_IDEDMA_PCI_WIP is not set +CONFIG_BLK_DEV_ADMA100=y +CONFIG_BLK_DEV_AEC62XX=y +CONFIG_BLK_DEV_ALI15X3=y +# CONFIG_WDC_ALI15X3 is not set +CONFIG_BLK_DEV_AMD74XX=y +# CONFIG_AMD74XX_OVERRIDE is not set +CONFIG_BLK_DEV_CMD64X=y +CONFIG_BLK_DEV_TRIFLEX=y +CONFIG_BLK_DEV_CY82C693=y +CONFIG_BLK_DEV_CS5530=y +CONFIG_BLK_DEV_HPT34X=y +# CONFIG_HPT34X_AUTODMA is not set +CONFIG_BLK_DEV_HPT366=y +CONFIG_BLK_DEV_PIIX=y +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_OPTI621 is not set +CONFIG_BLK_DEV_PDC202XX_OLD=y +# CONFIG_PDC202XX_BURST is not set +CONFIG_BLK_DEV_PDC202XX_NEW=y +CONFIG_PDC202XX_FORCE=y +# CONFIG_BLK_DEV_RZ1000 is not set +# CONFIG_BLK_DEV_SC1200 is not set +CONFIG_BLK_DEV_SVWKS=y +CONFIG_BLK_DEV_SIIMAGE=y +CONFIG_BLK_DEV_SIS5513=y +CONFIG_BLK_DEV_SLC90E66=y +# CONFIG_BLK_DEV_TRM290 is not set +CONFIG_BLK_DEV_VIA82CXXX=y +# CONFIG_IDE_CHIPSETS is not set +CONFIG_IDEDMA_AUTO=y +# CONFIG_IDEDMA_IVB is not set +# CONFIG_DMA_NONPCI is not set +CONFIG_BLK_DEV_PDC202XX=y +CONFIG_BLK_DEV_IDE_MODES=y +CONFIG_BLK_DEV_ATARAID=m +CONFIG_BLK_DEV_ATARAID_PDC=m +CONFIG_BLK_DEV_ATARAID_HPT=m +CONFIG_BLK_DEV_ATARAID_SII=m + +# +# SCSI support +# +CONFIG_SCSI=m +CONFIG_BLK_DEV_SD=m +CONFIG_SD_EXTRA_DEVS=256 +CONFIG_CHR_DEV_ST=m +CONFIG_CHR_DEV_OSST=m +CONFIG_BLK_DEV_SR=m +CONFIG_BLK_DEV_SR_VENDOR=y +CONFIG_SR_EXTRA_DEVS=4 +CONFIG_CHR_DEV_SG=m +# CONFIG_SCSI_DEBUG_QUEUES is not set +# CONFIG_SCSI_MULTI_LUN is not set +CONFIG_SCSI_CONSTANTS=y +CONFIG_SCSI_LOGGING=y + +# +# SCSI low-level drivers +# +CONFIG_BLK_DEV_3W_XXXX_RAID=m +# CONFIG_SCSI_7000FASST is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AHA152X is not set +# CONFIG_SCSI_AHA1542 is not set +# CONFIG_SCSI_AHA1740 is not set +CONFIG_SCSI_AACRAID=m +CONFIG_SCSI_AIC7XXX=m +CONFIG_AIC7XXX_CMDS_PER_DEVICE=32 +CONFIG_AIC7XXX_RESET_DELAY_MS=15000 +# CONFIG_AIC7XXX_PROBE_EISA_VL is not set +# CONFIG_AIC7XXX_BUILD_FIRMWARE is not set +# CONFIG_AIC7XXX_DEBUG_ENABLE is not set +CONFIG_AIC7XXX_DEBUG_MASK=0 +# CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set +CONFIG_SCSI_AIC79XX=m +CONFIG_AIC79XX_CMDS_PER_DEVICE=32 +CONFIG_AIC79XX_RESET_DELAY_MS=15000 +# CONFIG_AIC79XX_BUILD_FIRMWARE is not set +# CONFIG_AIC79XX_ENABLE_RD_STRM is not set +# CONFIG_AIC79XX_DEBUG_ENABLE is not set +CONFIG_AIC79XX_DEBUG_MASK=0 +# CONFIG_AIC79XX_REG_PRETTY_PRINT is not set +CONFIG_SCSI_AIC7XXX_OLD=m +CONFIG_AIC7XXX_OLD_TCQ_ON_BY_DEFAULT=y +CONFIG_AIC7XXX_OLD_CMDS_PER_DEVICE=32 +CONFIG_AIC7XXX_OLD_PROC_STATS=y +# CONFIG_SCSI_ADVANSYS is not set +# CONFIG_SCSI_IN2000 is not set +# CONFIG_SCSI_AM53C974 is not set +CONFIG_SCSI_MEGARAID=m +CONFIG_SCSI_MEGARAID2=m +CONFIG_SCSI_SATA=y +# CONFIG_SCSI_SATA_SVW is not set +CONFIG_SCSI_ATA_PIIX=m +# CONFIG_SCSI_SATA_PROMISE is not set +# CONFIG_SCSI_SATA_SIL is not set +# CONFIG_SCSI_SATA_VIA is not set +# CONFIG_SCSI_BUSLOGIC is not set +# CONFIG_SCSI_CPQFCTS is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_DTC3280 is not set +# CONFIG_SCSI_EATA is not set +# CONFIG_SCSI_EATA_DMA is not set +# CONFIG_SCSI_EATA_PIO is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +CONFIG_SCSI_GDTH=m +# CONFIG_SCSI_GENERIC_NCR5380 is not set +CONFIG_SCSI_IPS=m +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +CONFIG_SCSI_PPA=m +CONFIG_SCSI_IMM=m +# CONFIG_SCSI_IZIP_EPP16 is not set +# CONFIG_SCSI_IZIP_SLOW_CTR is not set +# CONFIG_SCSI_NCR53C406A is not set +# CONFIG_SCSI_NCR53C7xx is not set +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set +CONFIG_SCSI_NCR53C8XX=m +CONFIG_SCSI_SYM53C8XX=m +CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8 +CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32 +CONFIG_SCSI_NCR53C8XX_SYNC=40 +# CONFIG_SCSI_NCR53C8XX_PROFILE is not set +# CONFIG_SCSI_NCR53C8XX_IOMAPPED is not set +# CONFIG_SCSI_NCR53C8XX_PQS_PDS is not set +# CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT is not set +# CONFIG_SCSI_PAS16 is not set +# CONFIG_SCSI_PCI2000 is not set +# CONFIG_SCSI_PCI2220I is not set +# CONFIG_SCSI_PSI240I is not set +CONFIG_SCSI_QLOGIC_FAS=m +CONFIG_SCSI_QLOGIC_ISP=m +CONFIG_SCSI_QLOGIC_FC=m +# CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_SEAGATE=m +# CONFIG_SCSI_SIM710 is not set +# CONFIG_SCSI_SYM53C416 is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_T128 is not set +# CONFIG_SCSI_U14_34F is not set +CONFIG_SCSI_ULTRASTOR=m +CONFIG_SCSI_NSP32=m +# CONFIG_SCSI_DEBUG is not set + +# +# Fusion MPT device support +# +CONFIG_FUSION=m +# CONFIG_FUSION_BOOT is not set +CONFIG_FUSION_MAX_SGE=40 +# CONFIG_FUSION_ISENSE is not set +CONFIG_FUSION_CTL=m +CONFIG_FUSION_LAN=m +CONFIG_NET_FC=y + +# +# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# +CONFIG_IEEE1394=m +CONFIG_IEEE1394_OHCI1394=m +CONFIG_IEEE1394_VIDEO1394=m +CONFIG_IEEE1394_SBP2=m +CONFIG_IEEE1394_SBP2_PHYS_DMA=y +CONFIG_IEEE1394_ETH1394=m +CONFIG_IEEE1394_DV1394=m +CONFIG_IEEE1394_RAWIO=m +CONFIG_IEEE1394_CMP=m +CONFIG_IEEE1394_AMDTP=m +# CONFIG_IEEE1394_VERBOSEDEBUG is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +CONFIG_DUMMY=m +CONFIG_BONDING=m +CONFIG_EQUALIZER=m +CONFIG_TUN=m +CONFIG_ETHERTAP=m + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +CONFIG_HAPPYMEAL=m +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +CONFIG_SUNGEM=m +CONFIG_NET_VENDOR_3COM=y +# CONFIG_EL1 is not set +# CONFIG_EL2 is not set +# CONFIG_ELPLUS is not set +# CONFIG_EL16 is not set +# CONFIG_ELMC is not set +# CONFIG_ELMC_II is not set +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRAMCA is not set +# CONFIG_ULTRA is not set +# CONFIG_ULTRA32 is not set +# CONFIG_SMC9194 is not set +CONFIG_NET_VENDOR_RACAL=y +# CONFIG_NI5010 is not set +# CONFIG_NI52 is not set +# CONFIG_NI65 is not set +CONFIG_HP100=m +# CONFIG_NET_ISA is not set +CONFIG_NET_PCI=y +CONFIG_PCNET32=m +CONFIG_AMD8111_ETH=m +CONFIG_ADAPTEC_STARFIRE=m +# CONFIG_APRICOT is not set +CONFIG_B44=m +# CONFIG_CS89x0 is not set +CONFIG_TULIP=m +# CONFIG_TULIP_MWI is not set +CONFIG_TULIP_MMIO=y +CONFIG_DE4X5=m +CONFIG_DGRS=m +CONFIG_DM9102=m +CONFIG_EEPRO100=m +# CONFIG_EEPRO100_PIO is not set +CONFIG_E100=m +# CONFIG_LNE390 is not set +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=m +# CONFIG_NE3210 is not set +# CONFIG_ES3210 is not set +CONFIG_8139CP=m +CONFIG_8139TOO=m +# CONFIG_8139TOO_PIO is not set +# CONFIG_8139TOO_TUNE_TWISTER is not set +CONFIG_8139TOO_8129=y +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SUNDANCE=m +# CONFIG_SUNDANCE_MMIO is not set +CONFIG_TLAN=m +CONFIG_TC35815=m +CONFIG_VIA_RHINE=m +# CONFIG_VIA_RHINE_MMIO is not set +CONFIG_WINBOND_840=m +CONFIG_NET_POCKET=y +# CONFIG_DE600 is not set +# CONFIG_DE620 is not set + +# +# Ethernet (1000 Mbit) +# +CONFIG_ACENIC=m +# CONFIG_ACENIC_OMIT_TIGON_I is not set +CONFIG_DL2K=m +CONFIG_E1000=m +CONFIG_E1000_NAPI=y +# CONFIG_MYRI_SBUS is not set +CONFIG_NS83820=m +CONFIG_HAMACHI=m +CONFIG_YELLOWFIN=m +CONFIG_R8169=m +CONFIG_SK98LIN=m +CONFIG_TIGON3=m +CONFIG_FDDI=y +CONFIG_DEFXX=m +CONFIG_SKFP=m +# CONFIG_NETCONSOLE is not set +# CONFIG_HIPPI is not set +CONFIG_PLIP=m +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +# CONFIG_PPP_DEFLATE is not set +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPPOE is not set +CONFIG_PPPOATM=m +CONFIG_SLIP=m +CONFIG_SLIP_COMPRESSED=y +CONFIG_SLIP_SMART=y +CONFIG_SLIP_MODE_SLIP6=y + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +CONFIG_STRIP=m +CONFIG_WAVELAN=m +CONFIG_AIRONET4500=m +CONFIG_AIRONET4500_NONCS=m +CONFIG_AIRONET4500_PNP=y +CONFIG_AIRONET4500_PCI=y +CONFIG_AIRONET4500_ISA=y +CONFIG_AIRONET4500_I365=y +CONFIG_AIRONET4500_PROC=m +CONFIG_AIRO=m +CONFIG_HERMES=m +CONFIG_PLX_HERMES=m +CONFIG_PCI_HERMES=m +CONFIG_NET_WIRELESS=y + +# +# Token Ring devices +# +CONFIG_TR=y +CONFIG_IBMOL=m +CONFIG_IBMLS=m +CONFIG_3C359=m +# CONFIG_TMS380TR is not set +CONFIG_NET_FC=y +CONFIG_IPHASE5526=m +# CONFIG_RCPCI is not set +CONFIG_SHAPER=m + +# +# Wan interfaces +# +CONFIG_WAN=y +# CONFIG_COMX is not set +# CONFIG_DSCC4 is not set +# CONFIG_LANMEDIA is not set +CONFIG_ATI_XX20=m +CONFIG_SEALEVEL_4021=m +# CONFIG_SYNCLINK_SYNCPPP is not set +# CONFIG_HDLC is not set +CONFIG_DLCI=m +CONFIG_DLCI_COUNT=24 +CONFIG_DLCI_MAX=8 +CONFIG_SDLA=m +CONFIG_WAN_ROUTER_DRIVERS=y +CONFIG_VENDOR_SANGOMA=m +CONFIG_WANPIPE_CHDLC=y +CONFIG_WANPIPE_FR=y +CONFIG_WANPIPE_X25=y +CONFIG_WANPIPE_PPP=y +CONFIG_WANPIPE_MULTPPP=y +# CONFIG_CYCLADES_SYNC is not set +# CONFIG_LAPBETHER is not set +# CONFIG_X25_ASY is not set +CONFIG_SBNI=m +CONFIG_SBNI_MULTILINE=y + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +CONFIG_IRDA_ULTRA=y +CONFIG_IRDA_CACHE_LAST_LSAP=y +CONFIG_IRDA_FAST_RR=y +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# +CONFIG_IRTTY_SIR=m +CONFIG_IRPORT_SIR=m +CONFIG_DONGLE=y +CONFIG_ESI_DONGLE=m +CONFIG_ACTISYS_DONGLE=m +CONFIG_TEKRAM_DONGLE=m +CONFIG_GIRBIL_DONGLE=m +CONFIG_LITELINK_DONGLE=m +CONFIG_MCP2120_DONGLE=m +CONFIG_OLD_BELKIN_DONGLE=m +CONFIG_ACT200L_DONGLE=m +CONFIG_MA600_DONGLE=m +CONFIG_USB_IRDA=m +CONFIG_NSC_FIR=m +CONFIG_WINBOND_FIR=m +CONFIG_TOSHIBA_OLD=m +CONFIG_TOSHIBA_FIR=m +CONFIG_SMC_IRCC_FIR=m +CONFIG_ALI_FIR=m +CONFIG_VLSI_FIR=m + +# +# ISDN subsystem +# +CONFIG_ISDN=m +CONFIG_ISDN_BOOL=y +CONFIG_ISDN_PPP=y +CONFIG_ISDN_PPP_VJ=y +CONFIG_ISDN_MPP=y +CONFIG_ISDN_PPP_BSDCOMP=m +CONFIG_ISDN_AUDIO=y +CONFIG_ISDN_TTY_FAX=y + +# +# ISDN feature submodules +# +CONFIG_ISDN_DRV_LOOP=m +# CONFIG_ISDN_DIVERSION is not set + +# +# Passive ISDN cards +# +CONFIG_ISDN_DRV_HISAX=m +CONFIG_ISDN_HISAX=y +CONFIG_HISAX_EURO=y +CONFIG_DE_AOC=y +# CONFIG_HISAX_NO_SENDCOMPLETE is not set +# CONFIG_HISAX_NO_LLC is not set +# CONFIG_HISAX_NO_KEYPAD is not set +CONFIG_HISAX_1TR6=y +CONFIG_HISAX_NI1=y +CONFIG_HISAX_MAX_CARDS=8 +CONFIG_HISAX_TELESPCI=y +CONFIG_HISAX_S0BOX=y +CONFIG_HISAX_FRITZPCI=y +# CONFIG_HISAX_AVM_A1_PCMCIA is not set +CONFIG_HISAX_ELSA=y +CONFIG_HISAX_DIEHLDIVA=y +CONFIG_HISAX_SEDLBAUER=y +CONFIG_HISAX_NETJET=y +CONFIG_HISAX_NETJET_U=y +CONFIG_HISAX_NICCY=y +CONFIG_HISAX_BKM_A4T=y +CONFIG_HISAX_SCT_QUADRO=y +CONFIG_HISAX_GAZEL=y +CONFIG_HISAX_HFC_PCI=y +CONFIG_HISAX_W6692=y +CONFIG_HISAX_HFC_SX=y +CONFIG_HISAX_ENTERNOW_PCI=y +CONFIG_HISAX_DEBUG=y +# CONFIG_HISAX_SEDLBAUER_CS is not set +# CONFIG_HISAX_ELSA_CS is not set +# CONFIG_HISAX_AVM_A1_CS is not set +CONFIG_HISAX_ST5481=m +CONFIG_HISAX_FRITZ_PCIPNP=m +CONFIG_USB_AUERISDN=m + +# +# Active ISDN cards +# +CONFIG_ISDN_DRV_ICN=m +CONFIG_ISDN_DRV_PCBIT=m +# CONFIG_ISDN_DRV_SC is not set +# CONFIG_ISDN_DRV_ACT2000 is not set +CONFIG_ISDN_DRV_EICON=y +CONFIG_ISDN_DRV_EICON_DIVAS=m +# CONFIG_ISDN_DRV_EICON_OLD is not set +CONFIG_ISDN_DRV_TPAM=m +CONFIG_ISDN_CAPI=m +# CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON is not set +CONFIG_ISDN_CAPI_MIDDLEWARE=y +CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_CAPIFS_BOOL=y +CONFIG_ISDN_CAPI_CAPIFS=m +CONFIG_ISDN_CAPI_CAPIDRV=m +# CONFIG_ISDN_DRV_AVMB1_B1ISA is not set +# CONFIG_ISDN_DRV_AVMB1_B1PCI is not set +# CONFIG_ISDN_DRV_AVMB1_B1PCIV4 is not set +# CONFIG_ISDN_DRV_AVMB1_T1ISA is not set +# CONFIG_ISDN_DRV_AVMB1_B1PCMCIA is not set +# CONFIG_ISDN_DRV_AVMB1_AVM_CS is not set +# CONFIG_ISDN_DRV_AVMB1_T1PCI is not set +# CONFIG_ISDN_DRV_AVMB1_C4 is not set +# CONFIG_HYSDN is not set +# CONFIG_HYSDN_CAPI is not set + +# +# Input core support +# +CONFIG_INPUT=m +CONFIG_INPUT_KEYBDEV=m +CONFIG_INPUT_MOUSEDEV=m +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +CONFIG_INPUT_JOYDEV=m +CONFIG_INPUT_EVDEV=m + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_ECC is not set +CONFIG_VT_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_SERIAL_CONSOLE=y +CONFIG_SERIAL_ACPI=y +CONFIG_SERIAL_EXTENDED=y +CONFIG_SERIAL_MANY_PORTS=y +CONFIG_SERIAL_SHARE_IRQ=y +# CONFIG_SERIAL_DETECT_IRQ is not set +CONFIG_SERIAL_MULTIPORT=y +# CONFIG_HUB6 is not set +CONFIG_SERIAL_NONSTANDARD=y +CONFIG_ATI_CD1865=m +# CONFIG_COMPUTONE is not set +CONFIG_ROCKETPORT=m +CONFIG_CYCLADES=m +# CONFIG_CYZ_INTR is not set +# CONFIG_ESPSERIAL is not set +CONFIG_MOXA_INTELLIO=m +CONFIG_MOXA_SMARTIO=m +CONFIG_ISI=m +# CONFIG_ICOM is not set +CONFIG_SYNCLINK=m +# CONFIG_SYNCLINKMP is not set +CONFIG_N_HDLC=m +CONFIG_RISCOM8=m +CONFIG_STALDRV=y +CONFIG_STALLION=m +CONFIG_ISTALLION=m +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=2048 +CONFIG_PRINTER=m +CONFIG_LP_CONSOLE=y +CONFIG_PPDEV=m +CONFIG_TIPAR=m + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=y +CONFIG_PSMOUSE=y +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set +CONFIG_MK712_MOUSE=m + +# +# Joysticks +# +CONFIG_INPUT_GAMEPORT=m +CONFIG_INPUT_NS558=m +CONFIG_INPUT_LIGHTNING=m +CONFIG_INPUT_PCIGAME=m +CONFIG_INPUT_CS461X=m +CONFIG_INPUT_EMU10K1=m +CONFIG_INPUT_SERIO=m +CONFIG_INPUT_SERPORT=m +CONFIG_INPUT_ANALOG=m +CONFIG_INPUT_A3D=m +CONFIG_INPUT_ADI=m +CONFIG_INPUT_COBRA=m +CONFIG_INPUT_GF2K=m +CONFIG_INPUT_GRIP=m +CONFIG_INPUT_INTERACT=m +CONFIG_INPUT_TMDC=m +CONFIG_INPUT_SIDEWINDER=m +CONFIG_INPUT_IFORCE_USB=m +CONFIG_INPUT_IFORCE_232=m +CONFIG_INPUT_WARRIOR=m +CONFIG_INPUT_MAGELLAN=m +CONFIG_INPUT_SPACEORB=m +CONFIG_INPUT_SPACEBALL=m +CONFIG_INPUT_STINGER=m +CONFIG_INPUT_DB9=m +CONFIG_INPUT_GAMECON=m +CONFIG_INPUT_TURBOGRAFX=m +# CONFIG_QIC02_TAPE is not set +CONFIG_IPMI_HANDLER=m +# CONFIG_IPMI_PANIC_EVENT is not set +CONFIG_IPMI_DEVICE_INTERFACE=m +CONFIG_IPMI_KCS=m +CONFIG_IPMI_WATCHDOG=m + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_ACQUIRE_WDT=m +CONFIG_ADVANTECH_WDT=m +CONFIG_ALIM1535_WDT=m +CONFIG_ALIM7101_WDT=m +CONFIG_SC520_WDT=m +CONFIG_PCWATCHDOG=m +CONFIG_EUROTECH_WDT=m +CONFIG_IB700_WDT=m +CONFIG_WAFER_WDT=m +CONFIG_I810_TCO=m +# CONFIG_MIXCOMWD is not set +# CONFIG_60XX_WDT is not set +CONFIG_SC1200_WDT=m +# CONFIG_SCx200_WDT is not set +CONFIG_SOFT_WATCHDOG=m +CONFIG_W83877F_WDT=m +CONFIG_WDT=m +CONFIG_WDTPCI=m +# CONFIG_WDT_501 is not set +CONFIG_MACHZ_WDT=m +# CONFIG_AMD7XX_TCO is not set +CONFIG_HANGCHECK_TIMER=m +CONFIG_HANGCHECK_DELAY=m +# CONFIG_SCx200_GPIO is not set +CONFIG_AMD_RNG=m +CONFIG_INTEL_RNG=m +# CONFIG_AMD_PM768 is not set +CONFIG_NVRAM=m +CONFIG_RTC=y +CONFIG_DTLK=m +CONFIG_R3964=m +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +CONFIG_AGP=y +CONFIG_AGP_AMD_8151=y +CONFIG_AGP_INTEL=y +CONFIG_AGP_I810=y +CONFIG_AGP_VIA=y +CONFIG_AGP_AMD=y +CONFIG_AGP_SIS=y +CONFIG_AGP_ALI=y +CONFIG_AGP_SWORKS=y +CONFIG_AGP_NVIDIA=y +CONFIG_DRM=y +# CONFIG_DRM_OLD is not set +CONFIG_DRM_NEW=y +CONFIG_DRM_TDFX=m +CONFIG_DRM_GAMMA=m +CONFIG_DRM_R128=m +CONFIG_DRM_RADEON=m +CONFIG_DRM_I810=m +# CONFIG_DRM_I810_XFREE_41 is not set +CONFIG_DRM_I830=m +CONFIG_DRM_MGA=m +# CONFIG_DRM_SIS is not set +CONFIG_MWAVE=m + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m + +# +# Video For Linux +# +CONFIG_VIDEO_PROC_FS=y +# CONFIG_I2C_PARPORT is not set +# CONFIG_VIDEO_BT848 is not set +CONFIG_VIDEO_PMS=m +CONFIG_VIDEO_BWQCAM=m +CONFIG_VIDEO_CQCAM=m +CONFIG_VIDEO_W9966=m +CONFIG_VIDEO_CPIA=m +CONFIG_VIDEO_CPIA_PP=m +CONFIG_VIDEO_CPIA_USB=m +# CONFIG_VIDEO_SAA5249 is not set +# CONFIG_TUNER_3036 is not set +CONFIG_VIDEO_STRADIS=m +# CONFIG_VIDEO_ZORAN is not set +# CONFIG_VIDEO_ZORAN_BUZ is not set +# CONFIG_VIDEO_ZORAN_DC10 is not set +# CONFIG_VIDEO_ZORAN_LML33 is not set +# CONFIG_VIDEO_ZR36120 is not set +# CONFIG_VIDEO_MEYE is not set + +# +# Radio Adapters +# +CONFIG_RADIO_GEMTEK_PCI=m +CONFIG_RADIO_MAXIRADIO=m +CONFIG_RADIO_MAESTRO=m +# CONFIG_RADIO_MIROPCM20 is not set + +# +# File systems +# +CONFIG_QUOTA=y +# CONFIG_QFMT_V1 is not set +CONFIG_QFMT_V2=y +# CONFIG_QIFACE_COMPAT is not set +CONFIG_AUTOFS_FS=m +CONFIG_AUTOFS4_FS=m +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +CONFIG_REISERFS_PROC_INFO=y +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +CONFIG_HFS_FS=m +CONFIG_BEFS_FS=m +# CONFIG_BEFS_DEBUG is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BFS_FS is not set +CONFIG_EXT3_FS=m +CONFIG_EXT3_FS_XATTR=y +CONFIG_EXT3_FS_XATTR_SHARING=y +CONFIG_EXT3_FS_XATTR_USER=y +CONFIG_EXT3_FS_XATTR_TRUSTED=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_JBD=m +# CONFIG_JBD_DEBUG is not set +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_UMSDOS_FS=m +CONFIG_VFAT_FS=m +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_HUGETLBFS=y +CONFIG_HUGETLB_PAGE=y +CONFIG_CRAMFS=m +CONFIG_TMPFS=y +CONFIG_RAMFS=y +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_JFS_FS=m +CONFIG_JFS_POSIX_ACL=y +CONFIG_JFS_DEBUG=y +# CONFIG_JFS_STATISTICS is not set +CONFIG_MINIX_FS=m +CONFIG_VXFS_FS=m +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +CONFIG_ROMFS_FS=m +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT2_FS_XATTR_SHARING=y +CONFIG_EXT2_FS_XATTR_USER=y +CONFIG_SYSV_FS=m +CONFIG_UDF_FS=m +CONFIG_UDF_RW=y +CONFIG_UFS_FS=m +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +CONFIG_CODA_FS=m +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +CONFIG_NFS_DIRECTIO=y +CONFIG_NFS_ACL=y +# CONFIG_ROOT_NFS is not set +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +CONFIG_NFSD_ACL=y +CONFIG_NFSD_TCP=y +CONFIG_SUNRPC=m +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_NCP_FS=m +CONFIG_NCPFS_PACKET_SIGNING=y +CONFIG_NCPFS_IOCTL_LOCKING=y +CONFIG_NCPFS_STRONG=y +CONFIG_NCPFS_NFS_NS=y +CONFIG_NCPFS_OS2_NS=y +CONFIG_NCPFS_SMALLDOS=y +CONFIG_NCPFS_NLS=y +CONFIG_NCPFS_EXTRAS=y +CONFIG_ZISOFS_FS=y +CONFIG_FS_MBCACHE=y +CONFIG_FS_POSIX_ACL=y +CONFIG_FS_MBCACHE=y + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +CONFIG_OSF_PARTITION=y +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +CONFIG_MAC_PARTITION=y +CONFIG_MSDOS_PARTITION=y +CONFIG_BSD_DISKLABEL=y +CONFIG_MINIX_SUBPARTITION=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +# CONFIG_LDM_PARTITION is not set +CONFIG_SGI_PARTITION=y +# CONFIG_ULTRIX_PARTITION is not set +CONFIG_SUN_PARTITION=y +# CONFIG_EFI_PARTITION is not set +CONFIG_SMB_NLS=y +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m + +# +# Console drivers +# +CONFIG_VGA_CONSOLE=y +CONFIG_VIDEO_SELECT=y +CONFIG_MDA_CONSOLE=m + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +CONFIG_FB_RIVA=m +CONFIG_FB_CLGEN=m +CONFIG_FB_PM2=m +# CONFIG_FB_PM2_FIFO_DISCONNECT is not set +CONFIG_FB_PM2_PCI=y +CONFIG_FB_PM3=m +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_VESA=y +CONFIG_FB_VGA16=m +CONFIG_FB_HGA=m +CONFIG_VIDEO_SELECT=y +CONFIG_FB_MATROX=m +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +CONFIG_FB_MATROX_G450=y +CONFIG_FB_MATROX_G100=y +# CONFIG_FB_MATROX_PROC is not set +CONFIG_FB_MATROX_MULTIHEAD=y +CONFIG_FB_ATY=m +CONFIG_FB_ATY_GX=y +CONFIG_FB_ATY_CT=y +CONFIG_FB_ATY_CT_VAIO_LCD=y +CONFIG_FB_RADEON=m +CONFIG_FB_ATY128=m +# CONFIG_FB_INTEL is not set +# CONFIG_FB_SIS is not set +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_3DFX=m +CONFIG_FB_VOODOO1=m +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_MFB=m +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_CFB24=y +CONFIG_FBCON_CFB32=y +CONFIG_FBCON_VGA_PLANES=m +CONFIG_FBCON_HGA=m +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +# CONFIG_FBCON_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Cryptographic options +# +CONFIG_CRYPTO=y +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_SHA1=y +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_DEFLATE=y +CONFIG_CRYPTO_TEST=m + +# +# Sound +# +CONFIG_SOUND=m +CONFIG_SOUND_ALI5455=m +# CONFIG_SOUND_BT878 is not set +CONFIG_SOUND_CMPCI=m +CONFIG_SOUND_CMPCI_FM=y +CONFIG_SOUND_CMPCI_FMIO=388 +CONFIG_SOUND_CMPCI_FMIO=388 +CONFIG_SOUND_CMPCI_MIDI=y +CONFIG_SOUND_CMPCI_MPUIO=330 +CONFIG_SOUND_CMPCI_JOYSTICK=y +CONFIG_SOUND_CMPCI_CM8738=y +# CONFIG_SOUND_CMPCI_SPDIFINVERSE is not set +CONFIG_SOUND_CMPCI_SPDIFLOOP=y +CONFIG_SOUND_CMPCI_SPEAKERS=2 +CONFIG_SOUND_EMU10K1=m +CONFIG_MIDI_EMU10K1=y +CONFIG_SOUND_AUDIGY=m +CONFIG_SOUND_FUSION=m +CONFIG_SOUND_CS4281=m +CONFIG_SOUND_ES1370=m +CONFIG_SOUND_ES1371=m +CONFIG_SOUND_ESSSOLO1=m +CONFIG_SOUND_MAESTRO=m +CONFIG_SOUND_MAESTRO3=m +CONFIG_SOUND_FORTE=m +CONFIG_SOUND_ICH=m +CONFIG_SOUND_RME96XX=m +CONFIG_SOUND_SONICVIBES=m +CONFIG_SOUND_TRIDENT=m +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +CONFIG_SOUND_VIA82CXXX=m +CONFIG_MIDI_VIA82CXXX=y +CONFIG_SOUND_OSS=m +# CONFIG_SOUND_TRACEINIT is not set +CONFIG_SOUND_DMAP=y +# CONFIG_SOUND_AD1816 is not set +CONFIG_SOUND_AD1889=m +# CONFIG_SOUND_SGALAXY is not set +# CONFIG_SOUND_ADLIB is not set +# CONFIG_SOUND_ACI_MIXER is not set +# CONFIG_SOUND_CS4232 is not set +# CONFIG_SOUND_SSCAPE is not set +# CONFIG_SOUND_GUS is not set +CONFIG_SOUND_VMIDI=m +# CONFIG_SOUND_TRIX is not set +# CONFIG_SOUND_MSS is not set +# CONFIG_SOUND_MPU401 is not set +# CONFIG_SOUND_NM256 is not set +# CONFIG_SOUND_MAD16 is not set +# CONFIG_SOUND_PAS is not set +# CONFIG_PAS_JOYSTICK is not set +# CONFIG_SOUND_PSS is not set +# CONFIG_SOUND_SB is not set +# CONFIG_SOUND_AWE32_SYNTH is not set +# CONFIG_SOUND_KAHLUA is not set +# CONFIG_SOUND_WAVEFRONT is not set +# CONFIG_SOUND_MAUI is not set +# CONFIG_SOUND_YM3812 is not set +# CONFIG_SOUND_OPL3SA1 is not set +# CONFIG_SOUND_OPL3SA2 is not set +CONFIG_SOUND_YMFPCI=m +CONFIG_SOUND_YMFPCI_LEGACY=y +# CONFIG_SOUND_UART6850 is not set +# CONFIG_SOUND_AEDSP16 is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# USB support +# +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_UHCI=m +CONFIG_USB_UHCI_ALT=m +CONFIG_USB_OHCI=m +CONFIG_USB_AUDIO=m +# CONFIG_USB_EMI26 is not set +CONFIG_USB_MIDI=m +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +CONFIG_USB_STORAGE_DATAFAB=y +CONFIG_USB_STORAGE_FREECOM=y +CONFIG_USB_STORAGE_ISD200=y +CONFIG_USB_STORAGE_DPCM=y +CONFIG_USB_STORAGE_HP8200e=y +CONFIG_USB_STORAGE_SDDR09=y +CONFIG_USB_STORAGE_SDDR55=y +CONFIG_USB_STORAGE_JUMPSHOT=y +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m +CONFIG_USB_HID=m +CONFIG_USB_HIDINPUT=y +CONFIG_USB_HIDDEV=y +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +CONFIG_USB_AIPTEK=m +CONFIG_USB_WACOM=m +CONFIG_USB_KBTAB=m +CONFIG_USB_POWERMATE=m +# CONFIG_USB_DC2XX is not set +CONFIG_USB_MDC800=m +CONFIG_USB_SCANNER=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_HPUSBSCSI=m +CONFIG_USB_IBMCAM=m +CONFIG_USB_KONICAWC=m +CONFIG_USB_OV511=m +CONFIG_USB_PWC=m +CONFIG_USB_SE401=m +CONFIG_USB_STV680=m +CONFIG_USB_VICAM=m +CONFIG_USB_DSBR=m +CONFIG_USB_DABUSB=m +CONFIG_USB_PEGASUS=m +# CONFIG_USB_RTL8150 is not set +CONFIG_USB_KAWETH=m +CONFIG_USB_CATC=m +# CONFIG_USB_AX8817X is not set +CONFIG_USB_CDCETHER=m +CONFIG_USB_USBNET=m +CONFIG_USB_USS720=m + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +CONFIG_USB_SERIAL_KEYSPAN_USA28X=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +CONFIG_USB_SERIAL_KEYSPAN_USA19W=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y +CONFIG_USB_SERIAL_KEYSPAN_MPR=y +CONFIG_USB_SERIAL_KEYSPAN_USA49W=y +CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SERIAL_OMNINET=m +CONFIG_USB_RIO500=m +CONFIG_USB_AUERSWALD=m +CONFIG_USB_TIGL=m +CONFIG_USB_BRLVGER=m +CONFIG_USB_LCD=m + +# +# Bluetooth support +# +CONFIG_BLUEZ=m +CONFIG_BLUEZ_L2CAP=m +CONFIG_BLUEZ_SCO=m +CONFIG_BLUEZ_RFCOMM=m +CONFIG_BLUEZ_RFCOMM_TTY=y +CONFIG_BLUEZ_BNEP=m +CONFIG_BLUEZ_BNEP_MC_FILTER=y +CONFIG_BLUEZ_BNEP_PROTO_FILTER=y + +# +# Bluetooth device drivers +# +CONFIG_BLUEZ_HCIUSB=m +CONFIG_BLUEZ_USB_SCO=y +CONFIG_BLUEZ_USB_ZERO_PACKET=y +CONFIG_BLUEZ_HCIUART=m +CONFIG_BLUEZ_HCIUART_H4=y +CONFIG_BLUEZ_HCIUART_BCSP=y +CONFIG_BLUEZ_HCIUART_BCSP_TXCRC=y +# CONFIG_BLUEZ_HCIDTL1 is not set +# CONFIG_BLUEZ_HCIBT3C is not set +# CONFIG_BLUEZ_HCIBLUECARD is not set +# CONFIG_BLUEZ_HCIBTUART is not set +CONFIG_BLUEZ_HCIVHCI=m + +# +# Profiling support +# +CONFIG_PROFILING=y +CONFIG_OPROFILE=m + +# +# Additional device driver support +# +CONFIG_NET_BROADCOM=m +CONFIG_CIPE=m +# CONFIG_CRYPTO_AEP is not set +CONFIG_CRYPTO_BROADCOM=m +# CONFIG_MEGARAC is not set +CONFIG_FC_QLA2100=m +CONFIG_FC_QLA2200=m +CONFIG_FC_QLA2300=m +CONFIG_SCSI_ISCSI=m +# CONFIG_SCSI_IPR is not set + +# +# Kernel hacking +# +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SLAB is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_DEBUG_SPINLOCK is not set +CONFIG_CHECKING=y +CONFIG_INIT_DEBUG=y +# CONFIG_IOMMU_DEBUG is not set +# CONFIG_IOMMU_LEAK is not set +CONFIG_DEBUG_STACKOVERFLOW=y +CONFIG_KALLSYMS=y + +# +# Library routines +# +CONFIG_CRC32=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_QSORT=y diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.4.21-rhel-2.4-x86_64.config b/lustre/kernel_patches/kernel_configs/kernel-2.4.21-rhel-2.4-x86_64.config new file mode 100644 index 0000000..1a08c37 --- /dev/null +++ b/lustre/kernel_patches/kernel_configs/kernel-2.4.21-rhel-2.4-x86_64.config @@ -0,0 +1,1612 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_X86_64=y +CONFIG_X86=y +# CONFIG_ISA is not set +# CONFIG_SBUS is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +CONFIG_X86_CMPXCHG=y +CONFIG_EARLY_PRINTK=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODVERSIONS=y +CONFIG_KMOD=y + +# +# Processor type and features +# +CONFIG_MK8=y +# CONFIG_IA32E is not set +# CONFIG_GENERIC_CPU is not set +CONFIG_X86_L1_CACHE_BYTES=64 +CONFIG_X86_L1_CACHE_SHIFT=6 +CONFIG_X86_TSC=y +CONFIG_X86_GOOD_APIC=y +# CONFIG_MICROCODE is not set +CONFIG_X86_MSR=m +CONFIG_X86_CPUID=m +# CONFIG_MATH_EMULATION is not set +# CONFIG_MCA is not set +# CONFIG_EISA is not set +CONFIG_X86_IO_APIC=y +CONFIG_X86_LOCAL_APIC=y +CONFIG_MTRR=y +CONFIG_SMP=y +CONFIG_HPET_TIMER=y +CONFIG_GART_IOMMU=y +# CONFIG_SWIOTLB is not set +CONFIG_NR_SIBLINGS_0=y +# CONFIG_NR_SIBLINGS_2 is not set +CONFIG_HAVE_DEC_LOCK=y +CONFIG_MCE=y +CONFIG_K8_NUMA=y +CONFIG_DISCONTIGMEM=y +CONFIG_NUMA=y + +# +# General setup +# +CONFIG_NET=y +CONFIG_PCI=y +CONFIG_PCI_DIRECT=y +CONFIG_PCI_NAMES=y +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +# CONFIG_PCMCIA is not set + +# +# PCI Hotplug Support +# +# CONFIG_HOTPLUG_PCI is not set +# CONFIG_HOTPLUG_PCI_COMPAQ is not set +# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set +# CONFIG_HOTPLUG_PCI_IBM is not set +# CONFIG_HOTPLUG_PCI_ACPI is not set +CONFIG_SYSVIPC=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_SYSCTL=y +CONFIG_KCORE_ELF=y +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=m +CONFIG_AUDIT=m +CONFIG_PM=y +CONFIG_IA32_EMULATION=y +CONFIG_COMPAT=y +CONFIG_ACPI=y + +# +# ACPI Support +# +CONFIG_ACPI=y +# CONFIG_ACPI_HT_ONLY is not set +CONFIG_ACPI_BOOT=y +CONFIG_ACPI_BUS=y +CONFIG_ACPI_INTERPRETER=y +CONFIG_ACPI_EC=y +CONFIG_ACPI_POWER=y +CONFIG_ACPI_PCI=y +# CONFIG_ACPI_SLEEP is not set +CONFIG_ACPI_SYSTEM=y +CONFIG_ACPI_AC=m +CONFIG_ACPI_BATTERY=m +CONFIG_ACPI_BUTTON=m +CONFIG_ACPI_FAN=m +CONFIG_ACPI_PROCESSOR=m +CONFIG_ACPI_THERMAL=m +# CONFIG_ACPI_NUMA is not set +# CONFIG_ACPI_ASUS is not set +# CONFIG_ACPI_TOSHIBA is not set +# CONFIG_ACPI_DEBUG is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Parallel port support +# +CONFIG_PARPORT=m +CONFIG_PARPORT_PC=m +CONFIG_PARPORT_PC_CML1=m +CONFIG_PARPORT_SERIAL=m +# CONFIG_PARPORT_PC_FIFO is not set +# CONFIG_PARPORT_PC_SUPERIO is not set +# CONFIG_PARPORT_AMIGA is not set +# CONFIG_PARPORT_MFC3 is not set +# CONFIG_PARPORT_ATARI is not set +# CONFIG_PARPORT_GSC is not set +# CONFIG_PARPORT_SUNBPP is not set +# CONFIG_PARPORT_OTHER is not set +CONFIG_PARPORT_1284=y + +# +# Block devices +# +CONFIG_BLK_DEV_FD=m +# CONFIG_BLK_DEV_XD is not set +CONFIG_PARIDE=m +CONFIG_PARIDE_PARPORT=m +CONFIG_PARIDE_PD=m +CONFIG_PARIDE_PCD=m +CONFIG_PARIDE_PF=m +CONFIG_PARIDE_PT=m +CONFIG_PARIDE_PG=m +CONFIG_PARIDE_ATEN=m +CONFIG_PARIDE_BPCK=m +CONFIG_PARIDE_BPCK6=m +CONFIG_PARIDE_COMM=m +CONFIG_PARIDE_DSTR=m +CONFIG_PARIDE_FIT2=m +CONFIG_PARIDE_FIT3=m +CONFIG_PARIDE_EPAT=m +CONFIG_PARIDE_EPATC8=y +CONFIG_PARIDE_EPIA=m +CONFIG_PARIDE_FRIQ=m +CONFIG_PARIDE_FRPW=m +CONFIG_PARIDE_KBIC=m +CONFIG_PARIDE_KTTI=m +CONFIG_PARIDE_ON20=m +CONFIG_PARIDE_ON26=m +CONFIG_BLK_CPQ_DA=m +CONFIG_BLK_CPQ_CISS_DA=m +CONFIG_CISS_SCSI_TAPE=y +# CONFIG_CISS_MONITOR_THREAD is not set +CONFIG_BLK_DEV_DAC960=m +CONFIG_BLK_DEV_UMEM=m +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y +CONFIG_BLK_STATS=y + +# +# Multi-device support (RAID and LVM) +# +CONFIG_MD=y +CONFIG_BLK_DEV_MD=y +CONFIG_MD_LINEAR=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID5=m +CONFIG_MD_MULTIPATH=m +CONFIG_BLK_DEV_LVM=m + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK_DEV=y +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_FILTER=y +CONFIG_UNIX=y +CONFIG_NET_KEY=m +CONFIG_INET=y +CONFIG_TUX=m +CONFIG_TUX_EXTCGI=y +# CONFIG_TUX_EXTENDED_LOG is not set +# CONFIG_TUX_DEBUG is not set +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_FWMARK=y +CONFIG_IP_ROUTE_NAT=y +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_TOS=y +CONFIG_IP_ROUTE_VERBOSE=y +# CONFIG_IP_PNP is not set +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE=m +CONFIG_NET_IPGRE_BROADCAST=y +CONFIG_IP_MROUTE=y +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +CONFIG_SYN_COOKIES=y +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_CONNTRACK=m +CONFIG_IP_NF_FTP=m +CONFIG_IP_NF_AMANDA=m +CONFIG_IP_NF_TFTP=m +CONFIG_IP_NF_IRC=m +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_LIMIT=m +CONFIG_IP_NF_MATCH_MAC=m +CONFIG_IP_NF_MATCH_PKTTYPE=m +CONFIG_IP_NF_MATCH_MARK=m +CONFIG_IP_NF_MATCH_MULTIPORT=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_DSCP=m +CONFIG_IP_NF_MATCH_AH_ESP=m +CONFIG_IP_NF_MATCH_LENGTH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_TCPMSS=m +CONFIG_IP_NF_MATCH_HELPER=m +CONFIG_IP_NF_MATCH_STATE=m +CONFIG_IP_NF_MATCH_CONNTRACK=m +CONFIG_IP_NF_MATCH_UNCLEAN=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_MIRROR=m +CONFIG_IP_NF_NAT=m +CONFIG_IP_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_NAT_AMANDA=m +CONFIG_IP_NF_NAT_LOCAL=y +CONFIG_IP_NF_NAT_SNMP_BASIC=m +CONFIG_IP_NF_NAT_IRC=m +CONFIG_IP_NF_NAT_FTP=m +CONFIG_IP_NF_NAT_TFTP=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_DSCP=m +CONFIG_IP_NF_TARGET_MARK=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_NF_TARGET_TCPMSS=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m +CONFIG_IP_NF_COMPAT_IPCHAINS=m +CONFIG_IP_NF_NAT_NEEDED=y +CONFIG_IP_NF_COMPAT_IPFWADM=m +CONFIG_IP_NF_NAT_NEEDED=y + +# +# IP: Virtual Server Configuration +# +CONFIG_IP_VS=m +# CONFIG_IP_VS_DEBUG is not set +CONFIG_IP_VS_TAB_BITS=16 +CONFIG_IP_VS_RR=m +CONFIG_IP_VS_WRR=m +CONFIG_IP_VS_LC=m +CONFIG_IP_VS_WLC=m +CONFIG_IP_VS_LBLC=m +CONFIG_IP_VS_LBLCR=m +CONFIG_IP_VS_DH=m +CONFIG_IP_VS_SH=m +CONFIG_IP_VS_FTP=m +CONFIG_IPV6=m +CONFIG_IPV6_PRIVACY=y + +# +# IPv6: Netfilter Configuration +# +# CONFIG_IP6_NF_QUEUE is not set +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_LIMIT=m +CONFIG_IP6_NF_MATCH_MAC=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_MULTIPORT=m +CONFIG_IP6_NF_MATCH_OWNER=m +CONFIG_IP6_NF_MATCH_MARK=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_AHESP=m +CONFIG_IP6_NF_MATCH_LENGTH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_TARGET_MARK=m +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_TUNNEL=m +CONFIG_XFRM=y +CONFIG_XFRM_USER=y +# CONFIG_KHTTPD is not set +CONFIG_ATM=y +CONFIG_ATM_CLIP=y +# CONFIG_ATM_CLIP_NO_ICMP is not set +CONFIG_ATM_LANE=m +CONFIG_ATM_MPOA=m +CONFIG_ATM_BR2684=m +CONFIG_ATM_BR2684_IPFILTER=y +CONFIG_VLAN_8021Q=m +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set +CONFIG_ATALK=m + +# +# Appletalk devices +# +CONFIG_DEV_APPLETALK=y +CONFIG_COPS_DAYNA=y +CONFIG_COPS_TANGENT=y +CONFIG_IPDDP=m +CONFIG_IPDDP_ENCAP=y +CONFIG_IPDDP_DECAP=y +CONFIG_DECNET=m +CONFIG_DECNET_SIOCGIFCONF=y +CONFIG_DECNET_ROUTER=y +CONFIG_DECNET_ROUTE_FWMARK=y +CONFIG_BRIDGE=m +# CONFIG_X25 is not set +CONFIG_EDP2=m +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +CONFIG_NET_DIVERT=y +# CONFIG_ECONET is not set +CONFIG_WAN_ROUTER=m +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_CSZ=m +# CONFIG_NET_SCH_ATM is not set +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_DSMARK=m +CONFIG_NET_SCH_INGRESS=m +CONFIG_NET_QOS=y +CONFIG_NET_ESTIMATOR=y +CONFIG_NET_CLS=y +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_ROUTE=y +CONFIG_NET_CLS_FW=m +CONFIG_NET_CLS_U32=m +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +CONFIG_NET_CLS_POLICE=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set + +# +# Telephony Support +# +# CONFIG_PHONE is not set +# CONFIG_PHONE_IXJ is not set +# CONFIG_PHONE_IXJ_PCMCIA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +CONFIG_IDEDISK_MULTI_MODE=y +# CONFIG_IDEDISK_STROKE is not set +# CONFIG_BLK_DEV_IDECS is not set +CONFIG_BLK_DEV_IDECD=m +CONFIG_BLK_DEV_IDETAPE=m +CONFIG_BLK_DEV_IDEFLOPPY=y +CONFIG_BLK_DEV_IDESCSI=m +# CONFIG_IDE_TASK_IOCTL is not set +CONFIG_BLK_DEV_CMD640=y +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +CONFIG_BLK_DEV_IDEPCI=y +CONFIG_BLK_DEV_GENERIC=y +CONFIG_IDEPCI_SHARE_IRQ=y +CONFIG_BLK_DEV_IDEDMA_PCI=y +# CONFIG_BLK_DEV_OFFBOARD is not set +# CONFIG_BLK_DEV_IDEDMA_FORCED is not set +CONFIG_IDEDMA_PCI_AUTO=y +# CONFIG_IDEDMA_ONLYDISK is not set +CONFIG_BLK_DEV_IDEDMA=y +# CONFIG_IDEDMA_PCI_WIP is not set +CONFIG_BLK_DEV_ADMA100=y +CONFIG_BLK_DEV_AEC62XX=y +CONFIG_BLK_DEV_ALI15X3=y +# CONFIG_WDC_ALI15X3 is not set +CONFIG_BLK_DEV_AMD74XX=y +# CONFIG_AMD74XX_OVERRIDE is not set +CONFIG_BLK_DEV_CMD64X=y +CONFIG_BLK_DEV_TRIFLEX=y +CONFIG_BLK_DEV_CY82C693=y +CONFIG_BLK_DEV_CS5530=y +CONFIG_BLK_DEV_HPT34X=y +# CONFIG_HPT34X_AUTODMA is not set +CONFIG_BLK_DEV_HPT366=y +CONFIG_BLK_DEV_PIIX=y +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_OPTI621 is not set +CONFIG_BLK_DEV_PDC202XX_OLD=y +# CONFIG_PDC202XX_BURST is not set +CONFIG_BLK_DEV_PDC202XX_NEW=y +CONFIG_PDC202XX_FORCE=y +# CONFIG_BLK_DEV_RZ1000 is not set +# CONFIG_BLK_DEV_SC1200 is not set +CONFIG_BLK_DEV_SVWKS=y +CONFIG_BLK_DEV_SIIMAGE=y +CONFIG_BLK_DEV_SIS5513=y +CONFIG_BLK_DEV_SLC90E66=y +# CONFIG_BLK_DEV_TRM290 is not set +CONFIG_BLK_DEV_VIA82CXXX=y +# CONFIG_IDE_CHIPSETS is not set +CONFIG_IDEDMA_AUTO=y +# CONFIG_IDEDMA_IVB is not set +# CONFIG_DMA_NONPCI is not set +CONFIG_BLK_DEV_PDC202XX=y +CONFIG_BLK_DEV_IDE_MODES=y +CONFIG_BLK_DEV_ATARAID=m +CONFIG_BLK_DEV_ATARAID_PDC=m +CONFIG_BLK_DEV_ATARAID_HPT=m +CONFIG_BLK_DEV_ATARAID_SII=m + +# +# SCSI support +# +CONFIG_SCSI=m +CONFIG_BLK_DEV_SD=m +CONFIG_SD_EXTRA_DEVS=256 +CONFIG_CHR_DEV_ST=m +CONFIG_CHR_DEV_OSST=m +CONFIG_BLK_DEV_SR=m +CONFIG_BLK_DEV_SR_VENDOR=y +CONFIG_SR_EXTRA_DEVS=4 +CONFIG_CHR_DEV_SG=m +# CONFIG_SCSI_DEBUG_QUEUES is not set +# CONFIG_SCSI_MULTI_LUN is not set +CONFIG_SCSI_CONSTANTS=y +CONFIG_SCSI_LOGGING=y + +# +# SCSI low-level drivers +# +CONFIG_BLK_DEV_3W_XXXX_RAID=m +# CONFIG_SCSI_7000FASST is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AHA152X is not set +# CONFIG_SCSI_AHA1542 is not set +# CONFIG_SCSI_AHA1740 is not set +CONFIG_SCSI_AACRAID=m +CONFIG_SCSI_AIC7XXX=m +CONFIG_AIC7XXX_CMDS_PER_DEVICE=32 +CONFIG_AIC7XXX_RESET_DELAY_MS=15000 +# CONFIG_AIC7XXX_PROBE_EISA_VL is not set +# CONFIG_AIC7XXX_BUILD_FIRMWARE is not set +# CONFIG_AIC7XXX_DEBUG_ENABLE is not set +CONFIG_AIC7XXX_DEBUG_MASK=0 +# CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set +CONFIG_SCSI_AIC79XX=m +CONFIG_AIC79XX_CMDS_PER_DEVICE=32 +CONFIG_AIC79XX_RESET_DELAY_MS=15000 +# CONFIG_AIC79XX_BUILD_FIRMWARE is not set +# CONFIG_AIC79XX_ENABLE_RD_STRM is not set +# CONFIG_AIC79XX_DEBUG_ENABLE is not set +CONFIG_AIC79XX_DEBUG_MASK=0 +# CONFIG_AIC79XX_REG_PRETTY_PRINT is not set +CONFIG_SCSI_AIC7XXX_OLD=m +CONFIG_AIC7XXX_OLD_TCQ_ON_BY_DEFAULT=y +CONFIG_AIC7XXX_OLD_CMDS_PER_DEVICE=32 +CONFIG_AIC7XXX_OLD_PROC_STATS=y +# CONFIG_SCSI_ADVANSYS is not set +# CONFIG_SCSI_IN2000 is not set +# CONFIG_SCSI_AM53C974 is not set +CONFIG_SCSI_MEGARAID=m +CONFIG_SCSI_MEGARAID2=m +CONFIG_SCSI_SATA=y +# CONFIG_SCSI_SATA_SVW is not set +CONFIG_SCSI_ATA_PIIX=m +# CONFIG_SCSI_SATA_PROMISE is not set +# CONFIG_SCSI_SATA_SIL is not set +# CONFIG_SCSI_SATA_VIA is not set +# CONFIG_SCSI_BUSLOGIC is not set +# CONFIG_SCSI_CPQFCTS is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_DTC3280 is not set +# CONFIG_SCSI_EATA is not set +# CONFIG_SCSI_EATA_DMA is not set +# CONFIG_SCSI_EATA_PIO is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +CONFIG_SCSI_GDTH=m +# CONFIG_SCSI_GENERIC_NCR5380 is not set +CONFIG_SCSI_IPS=m +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +CONFIG_SCSI_PPA=m +CONFIG_SCSI_IMM=m +# CONFIG_SCSI_IZIP_EPP16 is not set +# CONFIG_SCSI_IZIP_SLOW_CTR is not set +# CONFIG_SCSI_NCR53C406A is not set +# CONFIG_SCSI_NCR53C7xx is not set +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set +CONFIG_SCSI_NCR53C8XX=m +CONFIG_SCSI_SYM53C8XX=m +CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8 +CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32 +CONFIG_SCSI_NCR53C8XX_SYNC=40 +# CONFIG_SCSI_NCR53C8XX_PROFILE is not set +# CONFIG_SCSI_NCR53C8XX_IOMAPPED is not set +# CONFIG_SCSI_NCR53C8XX_PQS_PDS is not set +# CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT is not set +# CONFIG_SCSI_PAS16 is not set +# CONFIG_SCSI_PCI2000 is not set +# CONFIG_SCSI_PCI2220I is not set +# CONFIG_SCSI_PSI240I is not set +CONFIG_SCSI_QLOGIC_FAS=m +CONFIG_SCSI_QLOGIC_ISP=m +CONFIG_SCSI_QLOGIC_FC=m +# CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_SEAGATE=m +# CONFIG_SCSI_SIM710 is not set +# CONFIG_SCSI_SYM53C416 is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_T128 is not set +# CONFIG_SCSI_U14_34F is not set +CONFIG_SCSI_ULTRASTOR=m +CONFIG_SCSI_NSP32=m +# CONFIG_SCSI_DEBUG is not set + +# +# Fusion MPT device support +# +CONFIG_FUSION=m +# CONFIG_FUSION_BOOT is not set +CONFIG_FUSION_MAX_SGE=40 +# CONFIG_FUSION_ISENSE is not set +CONFIG_FUSION_CTL=m +CONFIG_FUSION_LAN=m +CONFIG_NET_FC=y + +# +# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# +CONFIG_IEEE1394=m +CONFIG_IEEE1394_OHCI1394=m +CONFIG_IEEE1394_VIDEO1394=m +CONFIG_IEEE1394_SBP2=m +CONFIG_IEEE1394_SBP2_PHYS_DMA=y +CONFIG_IEEE1394_ETH1394=m +CONFIG_IEEE1394_DV1394=m +CONFIG_IEEE1394_RAWIO=m +CONFIG_IEEE1394_CMP=m +CONFIG_IEEE1394_AMDTP=m +# CONFIG_IEEE1394_VERBOSEDEBUG is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +CONFIG_DUMMY=m +CONFIG_BONDING=m +CONFIG_EQUALIZER=m +CONFIG_TUN=m +CONFIG_ETHERTAP=m + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +CONFIG_HAPPYMEAL=m +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +CONFIG_SUNGEM=m +CONFIG_NET_VENDOR_3COM=y +# CONFIG_EL1 is not set +# CONFIG_EL2 is not set +# CONFIG_ELPLUS is not set +# CONFIG_EL16 is not set +# CONFIG_ELMC is not set +# CONFIG_ELMC_II is not set +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRAMCA is not set +# CONFIG_ULTRA is not set +# CONFIG_ULTRA32 is not set +# CONFIG_SMC9194 is not set +CONFIG_NET_VENDOR_RACAL=y +# CONFIG_NI5010 is not set +# CONFIG_NI52 is not set +# CONFIG_NI65 is not set +CONFIG_HP100=m +# CONFIG_NET_ISA is not set +CONFIG_NET_PCI=y +CONFIG_PCNET32=m +CONFIG_AMD8111_ETH=m +CONFIG_ADAPTEC_STARFIRE=m +# CONFIG_APRICOT is not set +CONFIG_B44=m +# CONFIG_CS89x0 is not set +CONFIG_TULIP=m +# CONFIG_TULIP_MWI is not set +CONFIG_TULIP_MMIO=y +CONFIG_DE4X5=m +CONFIG_DGRS=m +CONFIG_DM9102=m +CONFIG_EEPRO100=m +# CONFIG_EEPRO100_PIO is not set +CONFIG_E100=m +# CONFIG_LNE390 is not set +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=m +# CONFIG_NE3210 is not set +# CONFIG_ES3210 is not set +CONFIG_8139CP=m +CONFIG_8139TOO=m +# CONFIG_8139TOO_PIO is not set +# CONFIG_8139TOO_TUNE_TWISTER is not set +CONFIG_8139TOO_8129=y +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SUNDANCE=m +# CONFIG_SUNDANCE_MMIO is not set +CONFIG_TLAN=m +CONFIG_TC35815=m +CONFIG_VIA_RHINE=m +# CONFIG_VIA_RHINE_MMIO is not set +CONFIG_WINBOND_840=m +CONFIG_NET_POCKET=y +# CONFIG_DE600 is not set +# CONFIG_DE620 is not set + +# +# Ethernet (1000 Mbit) +# +CONFIG_ACENIC=m +# CONFIG_ACENIC_OMIT_TIGON_I is not set +CONFIG_DL2K=m +CONFIG_E1000=m +CONFIG_E1000_NAPI=y +# CONFIG_MYRI_SBUS is not set +CONFIG_NS83820=m +CONFIG_HAMACHI=m +CONFIG_YELLOWFIN=m +CONFIG_R8169=m +CONFIG_SK98LIN=m +CONFIG_TIGON3=m +CONFIG_FDDI=y +CONFIG_DEFXX=m +CONFIG_SKFP=m +# CONFIG_NETCONSOLE is not set +# CONFIG_HIPPI is not set +CONFIG_PLIP=m +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +# CONFIG_PPP_DEFLATE is not set +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPPOE is not set +CONFIG_PPPOATM=m +CONFIG_SLIP=m +CONFIG_SLIP_COMPRESSED=y +CONFIG_SLIP_SMART=y +CONFIG_SLIP_MODE_SLIP6=y + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +CONFIG_STRIP=m +CONFIG_WAVELAN=m +CONFIG_AIRONET4500=m +CONFIG_AIRONET4500_NONCS=m +CONFIG_AIRONET4500_PNP=y +CONFIG_AIRONET4500_PCI=y +CONFIG_AIRONET4500_ISA=y +CONFIG_AIRONET4500_I365=y +CONFIG_AIRONET4500_PROC=m +CONFIG_AIRO=m +CONFIG_HERMES=m +CONFIG_PLX_HERMES=m +CONFIG_PCI_HERMES=m +CONFIG_NET_WIRELESS=y + +# +# Token Ring devices +# +CONFIG_TR=y +CONFIG_IBMOL=m +CONFIG_IBMLS=m +CONFIG_3C359=m +# CONFIG_TMS380TR is not set +CONFIG_NET_FC=y +CONFIG_IPHASE5526=m +# CONFIG_RCPCI is not set +CONFIG_SHAPER=m + +# +# Wan interfaces +# +CONFIG_WAN=y +# CONFIG_COMX is not set +# CONFIG_DSCC4 is not set +# CONFIG_LANMEDIA is not set +CONFIG_ATI_XX20=m +CONFIG_SEALEVEL_4021=m +# CONFIG_SYNCLINK_SYNCPPP is not set +# CONFIG_HDLC is not set +CONFIG_DLCI=m +CONFIG_DLCI_COUNT=24 +CONFIG_DLCI_MAX=8 +CONFIG_SDLA=m +CONFIG_WAN_ROUTER_DRIVERS=y +CONFIG_VENDOR_SANGOMA=m +CONFIG_WANPIPE_CHDLC=y +CONFIG_WANPIPE_FR=y +CONFIG_WANPIPE_X25=y +CONFIG_WANPIPE_PPP=y +CONFIG_WANPIPE_MULTPPP=y +# CONFIG_CYCLADES_SYNC is not set +# CONFIG_LAPBETHER is not set +# CONFIG_X25_ASY is not set +CONFIG_SBNI=m +CONFIG_SBNI_MULTILINE=y + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +CONFIG_IRDA_ULTRA=y +CONFIG_IRDA_CACHE_LAST_LSAP=y +CONFIG_IRDA_FAST_RR=y +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# +CONFIG_IRTTY_SIR=m +CONFIG_IRPORT_SIR=m +CONFIG_DONGLE=y +CONFIG_ESI_DONGLE=m +CONFIG_ACTISYS_DONGLE=m +CONFIG_TEKRAM_DONGLE=m +CONFIG_GIRBIL_DONGLE=m +CONFIG_LITELINK_DONGLE=m +CONFIG_MCP2120_DONGLE=m +CONFIG_OLD_BELKIN_DONGLE=m +CONFIG_ACT200L_DONGLE=m +CONFIG_MA600_DONGLE=m +CONFIG_USB_IRDA=m +CONFIG_NSC_FIR=m +CONFIG_WINBOND_FIR=m +CONFIG_TOSHIBA_OLD=m +CONFIG_TOSHIBA_FIR=m +CONFIG_SMC_IRCC_FIR=m +CONFIG_ALI_FIR=m +CONFIG_VLSI_FIR=m + +# +# ISDN subsystem +# +CONFIG_ISDN=m +CONFIG_ISDN_BOOL=y +CONFIG_ISDN_PPP=y +CONFIG_ISDN_PPP_VJ=y +CONFIG_ISDN_MPP=y +CONFIG_ISDN_PPP_BSDCOMP=m +CONFIG_ISDN_AUDIO=y +CONFIG_ISDN_TTY_FAX=y + +# +# ISDN feature submodules +# +CONFIG_ISDN_DRV_LOOP=m +# CONFIG_ISDN_DIVERSION is not set + +# +# Passive ISDN cards +# +CONFIG_ISDN_DRV_HISAX=m +CONFIG_ISDN_HISAX=y +CONFIG_HISAX_EURO=y +CONFIG_DE_AOC=y +# CONFIG_HISAX_NO_SENDCOMPLETE is not set +# CONFIG_HISAX_NO_LLC is not set +# CONFIG_HISAX_NO_KEYPAD is not set +CONFIG_HISAX_1TR6=y +CONFIG_HISAX_NI1=y +CONFIG_HISAX_MAX_CARDS=8 +CONFIG_HISAX_TELESPCI=y +CONFIG_HISAX_S0BOX=y +CONFIG_HISAX_FRITZPCI=y +# CONFIG_HISAX_AVM_A1_PCMCIA is not set +CONFIG_HISAX_ELSA=y +CONFIG_HISAX_DIEHLDIVA=y +CONFIG_HISAX_SEDLBAUER=y +CONFIG_HISAX_NETJET=y +CONFIG_HISAX_NETJET_U=y +CONFIG_HISAX_NICCY=y +CONFIG_HISAX_BKM_A4T=y +CONFIG_HISAX_SCT_QUADRO=y +CONFIG_HISAX_GAZEL=y +CONFIG_HISAX_HFC_PCI=y +CONFIG_HISAX_W6692=y +CONFIG_HISAX_HFC_SX=y +CONFIG_HISAX_ENTERNOW_PCI=y +CONFIG_HISAX_DEBUG=y +# CONFIG_HISAX_SEDLBAUER_CS is not set +# CONFIG_HISAX_ELSA_CS is not set +# CONFIG_HISAX_AVM_A1_CS is not set +CONFIG_HISAX_ST5481=m +CONFIG_HISAX_FRITZ_PCIPNP=m +CONFIG_USB_AUERISDN=m + +# +# Active ISDN cards +# +CONFIG_ISDN_DRV_ICN=m +CONFIG_ISDN_DRV_PCBIT=m +# CONFIG_ISDN_DRV_SC is not set +# CONFIG_ISDN_DRV_ACT2000 is not set +CONFIG_ISDN_DRV_EICON=y +CONFIG_ISDN_DRV_EICON_DIVAS=m +# CONFIG_ISDN_DRV_EICON_OLD is not set +CONFIG_ISDN_DRV_TPAM=m +CONFIG_ISDN_CAPI=m +# CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON is not set +CONFIG_ISDN_CAPI_MIDDLEWARE=y +CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_CAPIFS_BOOL=y +CONFIG_ISDN_CAPI_CAPIFS=m +CONFIG_ISDN_CAPI_CAPIDRV=m +# CONFIG_ISDN_DRV_AVMB1_B1ISA is not set +# CONFIG_ISDN_DRV_AVMB1_B1PCI is not set +# CONFIG_ISDN_DRV_AVMB1_B1PCIV4 is not set +# CONFIG_ISDN_DRV_AVMB1_T1ISA is not set +# CONFIG_ISDN_DRV_AVMB1_B1PCMCIA is not set +# CONFIG_ISDN_DRV_AVMB1_AVM_CS is not set +# CONFIG_ISDN_DRV_AVMB1_T1PCI is not set +# CONFIG_ISDN_DRV_AVMB1_C4 is not set +# CONFIG_HYSDN is not set +# CONFIG_HYSDN_CAPI is not set + +# +# Input core support +# +CONFIG_INPUT=m +CONFIG_INPUT_KEYBDEV=m +CONFIG_INPUT_MOUSEDEV=m +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +CONFIG_INPUT_JOYDEV=m +CONFIG_INPUT_EVDEV=m + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_ECC is not set +CONFIG_VT_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_SERIAL_CONSOLE=y +CONFIG_SERIAL_ACPI=y +CONFIG_SERIAL_EXTENDED=y +CONFIG_SERIAL_MANY_PORTS=y +CONFIG_SERIAL_SHARE_IRQ=y +# CONFIG_SERIAL_DETECT_IRQ is not set +CONFIG_SERIAL_MULTIPORT=y +# CONFIG_HUB6 is not set +CONFIG_SERIAL_NONSTANDARD=y +CONFIG_ATI_CD1865=m +# CONFIG_COMPUTONE is not set +CONFIG_ROCKETPORT=m +CONFIG_CYCLADES=m +# CONFIG_CYZ_INTR is not set +# CONFIG_ESPSERIAL is not set +CONFIG_MOXA_INTELLIO=m +CONFIG_MOXA_SMARTIO=m +CONFIG_ISI=m +# CONFIG_ICOM is not set +CONFIG_SYNCLINK=m +# CONFIG_SYNCLINKMP is not set +CONFIG_N_HDLC=m +CONFIG_RISCOM8=m +CONFIG_STALDRV=y +CONFIG_STALLION=m +CONFIG_ISTALLION=m +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=2048 +CONFIG_PRINTER=m +CONFIG_LP_CONSOLE=y +CONFIG_PPDEV=m +CONFIG_TIPAR=m + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=y +CONFIG_PSMOUSE=y +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set +CONFIG_MK712_MOUSE=m + +# +# Joysticks +# +CONFIG_INPUT_GAMEPORT=m +CONFIG_INPUT_NS558=m +CONFIG_INPUT_LIGHTNING=m +CONFIG_INPUT_PCIGAME=m +CONFIG_INPUT_CS461X=m +CONFIG_INPUT_EMU10K1=m +CONFIG_INPUT_SERIO=m +CONFIG_INPUT_SERPORT=m +CONFIG_INPUT_ANALOG=m +CONFIG_INPUT_A3D=m +CONFIG_INPUT_ADI=m +CONFIG_INPUT_COBRA=m +CONFIG_INPUT_GF2K=m +CONFIG_INPUT_GRIP=m +CONFIG_INPUT_INTERACT=m +CONFIG_INPUT_TMDC=m +CONFIG_INPUT_SIDEWINDER=m +CONFIG_INPUT_IFORCE_USB=m +CONFIG_INPUT_IFORCE_232=m +CONFIG_INPUT_WARRIOR=m +CONFIG_INPUT_MAGELLAN=m +CONFIG_INPUT_SPACEORB=m +CONFIG_INPUT_SPACEBALL=m +CONFIG_INPUT_STINGER=m +CONFIG_INPUT_DB9=m +CONFIG_INPUT_GAMECON=m +CONFIG_INPUT_TURBOGRAFX=m +# CONFIG_QIC02_TAPE is not set +CONFIG_IPMI_HANDLER=m +# CONFIG_IPMI_PANIC_EVENT is not set +CONFIG_IPMI_DEVICE_INTERFACE=m +CONFIG_IPMI_KCS=m +CONFIG_IPMI_WATCHDOG=m + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_ACQUIRE_WDT=m +CONFIG_ADVANTECH_WDT=m +CONFIG_ALIM1535_WDT=m +CONFIG_ALIM7101_WDT=m +CONFIG_SC520_WDT=m +CONFIG_PCWATCHDOG=m +CONFIG_EUROTECH_WDT=m +CONFIG_IB700_WDT=m +CONFIG_WAFER_WDT=m +CONFIG_I810_TCO=m +# CONFIG_MIXCOMWD is not set +# CONFIG_60XX_WDT is not set +CONFIG_SC1200_WDT=m +# CONFIG_SCx200_WDT is not set +CONFIG_SOFT_WATCHDOG=m +CONFIG_W83877F_WDT=m +CONFIG_WDT=m +CONFIG_WDTPCI=m +# CONFIG_WDT_501 is not set +CONFIG_MACHZ_WDT=m +# CONFIG_AMD7XX_TCO is not set +CONFIG_HANGCHECK_TIMER=m +CONFIG_HANGCHECK_DELAY=m +# CONFIG_SCx200_GPIO is not set +CONFIG_AMD_RNG=m +CONFIG_INTEL_RNG=m +# CONFIG_AMD_PM768 is not set +CONFIG_NVRAM=m +CONFIG_RTC=y +CONFIG_DTLK=m +CONFIG_R3964=m +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +CONFIG_AGP=y +CONFIG_AGP_AMD_8151=y +CONFIG_AGP_INTEL=y +CONFIG_AGP_I810=y +CONFIG_AGP_VIA=y +CONFIG_AGP_AMD=y +CONFIG_AGP_SIS=y +CONFIG_AGP_ALI=y +CONFIG_AGP_SWORKS=y +CONFIG_AGP_NVIDIA=y +CONFIG_DRM=y +# CONFIG_DRM_OLD is not set +CONFIG_DRM_NEW=y +CONFIG_DRM_TDFX=m +CONFIG_DRM_GAMMA=m +CONFIG_DRM_R128=m +CONFIG_DRM_RADEON=m +CONFIG_DRM_I810=m +# CONFIG_DRM_I810_XFREE_41 is not set +CONFIG_DRM_I830=m +CONFIG_DRM_MGA=m +# CONFIG_DRM_SIS is not set +CONFIG_MWAVE=m + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m + +# +# Video For Linux +# +CONFIG_VIDEO_PROC_FS=y +# CONFIG_I2C_PARPORT is not set +# CONFIG_VIDEO_BT848 is not set +CONFIG_VIDEO_PMS=m +CONFIG_VIDEO_BWQCAM=m +CONFIG_VIDEO_CQCAM=m +CONFIG_VIDEO_W9966=m +CONFIG_VIDEO_CPIA=m +CONFIG_VIDEO_CPIA_PP=m +CONFIG_VIDEO_CPIA_USB=m +# CONFIG_VIDEO_SAA5249 is not set +# CONFIG_TUNER_3036 is not set +CONFIG_VIDEO_STRADIS=m +# CONFIG_VIDEO_ZORAN is not set +# CONFIG_VIDEO_ZORAN_BUZ is not set +# CONFIG_VIDEO_ZORAN_DC10 is not set +# CONFIG_VIDEO_ZORAN_LML33 is not set +# CONFIG_VIDEO_ZR36120 is not set +# CONFIG_VIDEO_MEYE is not set + +# +# Radio Adapters +# +CONFIG_RADIO_GEMTEK_PCI=m +CONFIG_RADIO_MAXIRADIO=m +CONFIG_RADIO_MAESTRO=m +# CONFIG_RADIO_MIROPCM20 is not set + +# +# File systems +# +CONFIG_QUOTA=y +# CONFIG_QFMT_V1 is not set +CONFIG_QFMT_V2=y +# CONFIG_QIFACE_COMPAT is not set +CONFIG_AUTOFS_FS=m +CONFIG_AUTOFS4_FS=m +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +CONFIG_REISERFS_PROC_INFO=y +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +CONFIG_HFS_FS=m +CONFIG_BEFS_FS=m +# CONFIG_BEFS_DEBUG is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BFS_FS is not set +CONFIG_EXT3_FS=m +CONFIG_EXT3_FS_XATTR=y +CONFIG_EXT3_FS_XATTR_SHARING=y +CONFIG_EXT3_FS_XATTR_USER=y +CONFIG_EXT3_FS_XATTR_TRUSTED=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_JBD=m +# CONFIG_JBD_DEBUG is not set +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_UMSDOS_FS=m +CONFIG_VFAT_FS=m +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_HUGETLBFS=y +CONFIG_HUGETLB_PAGE=y +CONFIG_CRAMFS=m +CONFIG_TMPFS=y +CONFIG_RAMFS=y +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_JFS_FS=m +CONFIG_JFS_POSIX_ACL=y +CONFIG_JFS_DEBUG=y +# CONFIG_JFS_STATISTICS is not set +CONFIG_MINIX_FS=m +CONFIG_VXFS_FS=m +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +CONFIG_ROMFS_FS=m +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT2_FS_XATTR_SHARING=y +CONFIG_EXT2_FS_XATTR_USER=y +CONFIG_SYSV_FS=m +CONFIG_UDF_FS=m +CONFIG_UDF_RW=y +CONFIG_UFS_FS=m +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +CONFIG_CODA_FS=m +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +CONFIG_NFS_DIRECTIO=y +CONFIG_NFS_ACL=y +# CONFIG_ROOT_NFS is not set +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +CONFIG_NFSD_ACL=y +CONFIG_NFSD_TCP=y +CONFIG_SUNRPC=m +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_NCP_FS=m +CONFIG_NCPFS_PACKET_SIGNING=y +CONFIG_NCPFS_IOCTL_LOCKING=y +CONFIG_NCPFS_STRONG=y +CONFIG_NCPFS_NFS_NS=y +CONFIG_NCPFS_OS2_NS=y +CONFIG_NCPFS_SMALLDOS=y +CONFIG_NCPFS_NLS=y +CONFIG_NCPFS_EXTRAS=y +CONFIG_ZISOFS_FS=y +CONFIG_FS_MBCACHE=y +CONFIG_FS_POSIX_ACL=y +CONFIG_FS_MBCACHE=y + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +CONFIG_OSF_PARTITION=y +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +CONFIG_MAC_PARTITION=y +CONFIG_MSDOS_PARTITION=y +CONFIG_BSD_DISKLABEL=y +CONFIG_MINIX_SUBPARTITION=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +# CONFIG_LDM_PARTITION is not set +CONFIG_SGI_PARTITION=y +# CONFIG_ULTRIX_PARTITION is not set +CONFIG_SUN_PARTITION=y +# CONFIG_EFI_PARTITION is not set +CONFIG_SMB_NLS=y +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m + +# +# Console drivers +# +CONFIG_VGA_CONSOLE=y +CONFIG_VIDEO_SELECT=y +CONFIG_MDA_CONSOLE=m + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +CONFIG_FB_RIVA=m +CONFIG_FB_CLGEN=m +CONFIG_FB_PM2=m +# CONFIG_FB_PM2_FIFO_DISCONNECT is not set +CONFIG_FB_PM2_PCI=y +CONFIG_FB_PM3=m +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_VESA=y +CONFIG_FB_VGA16=m +CONFIG_FB_HGA=m +CONFIG_VIDEO_SELECT=y +CONFIG_FB_MATROX=m +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +CONFIG_FB_MATROX_G450=y +CONFIG_FB_MATROX_G100=y +# CONFIG_FB_MATROX_PROC is not set +CONFIG_FB_MATROX_MULTIHEAD=y +CONFIG_FB_ATY=m +CONFIG_FB_ATY_GX=y +CONFIG_FB_ATY_CT=y +CONFIG_FB_ATY_CT_VAIO_LCD=y +CONFIG_FB_RADEON=m +CONFIG_FB_ATY128=m +# CONFIG_FB_INTEL is not set +# CONFIG_FB_SIS is not set +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_3DFX=m +CONFIG_FB_VOODOO1=m +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_MFB=m +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_CFB24=y +CONFIG_FBCON_CFB32=y +CONFIG_FBCON_VGA_PLANES=m +CONFIG_FBCON_HGA=m +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +# CONFIG_FBCON_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Cryptographic options +# +CONFIG_CRYPTO=y +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_SHA1=y +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_DEFLATE=y +CONFIG_CRYPTO_TEST=m + +# +# Sound +# +CONFIG_SOUND=m +CONFIG_SOUND_ALI5455=m +# CONFIG_SOUND_BT878 is not set +CONFIG_SOUND_CMPCI=m +CONFIG_SOUND_CMPCI_FM=y +CONFIG_SOUND_CMPCI_FMIO=388 +CONFIG_SOUND_CMPCI_FMIO=388 +CONFIG_SOUND_CMPCI_MIDI=y +CONFIG_SOUND_CMPCI_MPUIO=330 +CONFIG_SOUND_CMPCI_JOYSTICK=y +CONFIG_SOUND_CMPCI_CM8738=y +# CONFIG_SOUND_CMPCI_SPDIFINVERSE is not set +CONFIG_SOUND_CMPCI_SPDIFLOOP=y +CONFIG_SOUND_CMPCI_SPEAKERS=2 +CONFIG_SOUND_EMU10K1=m +CONFIG_MIDI_EMU10K1=y +CONFIG_SOUND_AUDIGY=m +CONFIG_SOUND_FUSION=m +CONFIG_SOUND_CS4281=m +CONFIG_SOUND_ES1370=m +CONFIG_SOUND_ES1371=m +CONFIG_SOUND_ESSSOLO1=m +CONFIG_SOUND_MAESTRO=m +CONFIG_SOUND_MAESTRO3=m +CONFIG_SOUND_FORTE=m +CONFIG_SOUND_ICH=m +CONFIG_SOUND_RME96XX=m +CONFIG_SOUND_SONICVIBES=m +CONFIG_SOUND_TRIDENT=m +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +CONFIG_SOUND_VIA82CXXX=m +CONFIG_MIDI_VIA82CXXX=y +CONFIG_SOUND_OSS=m +# CONFIG_SOUND_TRACEINIT is not set +CONFIG_SOUND_DMAP=y +# CONFIG_SOUND_AD1816 is not set +CONFIG_SOUND_AD1889=m +# CONFIG_SOUND_SGALAXY is not set +# CONFIG_SOUND_ADLIB is not set +# CONFIG_SOUND_ACI_MIXER is not set +# CONFIG_SOUND_CS4232 is not set +# CONFIG_SOUND_SSCAPE is not set +# CONFIG_SOUND_GUS is not set +CONFIG_SOUND_VMIDI=m +# CONFIG_SOUND_TRIX is not set +# CONFIG_SOUND_MSS is not set +# CONFIG_SOUND_MPU401 is not set +# CONFIG_SOUND_NM256 is not set +# CONFIG_SOUND_MAD16 is not set +# CONFIG_SOUND_PAS is not set +# CONFIG_PAS_JOYSTICK is not set +# CONFIG_SOUND_PSS is not set +# CONFIG_SOUND_SB is not set +# CONFIG_SOUND_AWE32_SYNTH is not set +# CONFIG_SOUND_KAHLUA is not set +# CONFIG_SOUND_WAVEFRONT is not set +# CONFIG_SOUND_MAUI is not set +# CONFIG_SOUND_YM3812 is not set +# CONFIG_SOUND_OPL3SA1 is not set +# CONFIG_SOUND_OPL3SA2 is not set +CONFIG_SOUND_YMFPCI=m +CONFIG_SOUND_YMFPCI_LEGACY=y +# CONFIG_SOUND_UART6850 is not set +# CONFIG_SOUND_AEDSP16 is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# USB support +# +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_UHCI=m +CONFIG_USB_UHCI_ALT=m +CONFIG_USB_OHCI=m +CONFIG_USB_AUDIO=m +# CONFIG_USB_EMI26 is not set +CONFIG_USB_MIDI=m +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +CONFIG_USB_STORAGE_DATAFAB=y +CONFIG_USB_STORAGE_FREECOM=y +CONFIG_USB_STORAGE_ISD200=y +CONFIG_USB_STORAGE_DPCM=y +CONFIG_USB_STORAGE_HP8200e=y +CONFIG_USB_STORAGE_SDDR09=y +CONFIG_USB_STORAGE_SDDR55=y +CONFIG_USB_STORAGE_JUMPSHOT=y +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m +CONFIG_USB_HID=m +CONFIG_USB_HIDINPUT=y +CONFIG_USB_HIDDEV=y +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +CONFIG_USB_AIPTEK=m +CONFIG_USB_WACOM=m +CONFIG_USB_KBTAB=m +CONFIG_USB_POWERMATE=m +# CONFIG_USB_DC2XX is not set +CONFIG_USB_MDC800=m +CONFIG_USB_SCANNER=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_HPUSBSCSI=m +CONFIG_USB_IBMCAM=m +CONFIG_USB_KONICAWC=m +CONFIG_USB_OV511=m +CONFIG_USB_PWC=m +CONFIG_USB_SE401=m +CONFIG_USB_STV680=m +CONFIG_USB_VICAM=m +CONFIG_USB_DSBR=m +CONFIG_USB_DABUSB=m +CONFIG_USB_PEGASUS=m +# CONFIG_USB_RTL8150 is not set +CONFIG_USB_KAWETH=m +CONFIG_USB_CATC=m +# CONFIG_USB_AX8817X is not set +CONFIG_USB_CDCETHER=m +CONFIG_USB_USBNET=m +CONFIG_USB_USS720=m + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +CONFIG_USB_SERIAL_KEYSPAN_USA28X=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +CONFIG_USB_SERIAL_KEYSPAN_USA19W=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y +CONFIG_USB_SERIAL_KEYSPAN_MPR=y +CONFIG_USB_SERIAL_KEYSPAN_USA49W=y +CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SERIAL_OMNINET=m +CONFIG_USB_RIO500=m +CONFIG_USB_AUERSWALD=m +CONFIG_USB_TIGL=m +CONFIG_USB_BRLVGER=m +CONFIG_USB_LCD=m + +# +# Bluetooth support +# +CONFIG_BLUEZ=m +CONFIG_BLUEZ_L2CAP=m +CONFIG_BLUEZ_SCO=m +CONFIG_BLUEZ_RFCOMM=m +CONFIG_BLUEZ_RFCOMM_TTY=y +CONFIG_BLUEZ_BNEP=m +CONFIG_BLUEZ_BNEP_MC_FILTER=y +CONFIG_BLUEZ_BNEP_PROTO_FILTER=y + +# +# Bluetooth device drivers +# +CONFIG_BLUEZ_HCIUSB=m +CONFIG_BLUEZ_USB_SCO=y +CONFIG_BLUEZ_USB_ZERO_PACKET=y +CONFIG_BLUEZ_HCIUART=m +CONFIG_BLUEZ_HCIUART_H4=y +CONFIG_BLUEZ_HCIUART_BCSP=y +CONFIG_BLUEZ_HCIUART_BCSP_TXCRC=y +# CONFIG_BLUEZ_HCIDTL1 is not set +# CONFIG_BLUEZ_HCIBT3C is not set +# CONFIG_BLUEZ_HCIBLUECARD is not set +# CONFIG_BLUEZ_HCIBTUART is not set +CONFIG_BLUEZ_HCIVHCI=m + +# +# Profiling support +# +CONFIG_PROFILING=y +CONFIG_OPROFILE=m + +# +# Additional device driver support +# +CONFIG_NET_BROADCOM=m +CONFIG_CIPE=m +# CONFIG_CRYPTO_AEP is not set +CONFIG_CRYPTO_BROADCOM=m +# CONFIG_MEGARAC is not set +CONFIG_FC_QLA2100=m +CONFIG_FC_QLA2200=m +CONFIG_FC_QLA2300=m +CONFIG_SCSI_ISCSI=m +# CONFIG_SCSI_IPR is not set + +# +# Kernel hacking +# +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SLAB is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_DEBUG_SPINLOCK is not set +CONFIG_CHECKING=y +CONFIG_INIT_DEBUG=y +# CONFIG_IOMMU_DEBUG is not set +# CONFIG_IOMMU_LEAK is not set +CONFIG_DEBUG_STACKOVERFLOW=y +CONFIG_KALLSYMS=y + +# +# Library routines +# +CONFIG_CRC32=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_QSORT=y diff --git a/lustre/kernel_patches/targets/.cvsignore b/lustre/kernel_patches/targets/.cvsignore new file mode 100644 index 0000000..ba141e8 --- /dev/null +++ b/lustre/kernel_patches/targets/.cvsignore @@ -0,0 +1 @@ +*.target diff --git a/lustre/kernel_patches/targets/2.6-suse.target.in b/lustre/kernel_patches/targets/2.6-suse.target.in new file mode 100644 index 0000000..94a0f9c --- /dev/null +++ b/lustre/kernel_patches/targets/2.6-suse.target.in @@ -0,0 +1,17 @@ +lnxmaj="2.6.4" +lnxrel="51.0" + +KERNEL=linux-$lnxmaj-$lnxrel.tar.gz +SERIES=2.6-suse.series +VERSION=$lnxmaj +EXTRA_VERSION=$lnxrel_lustre.@VERSION@ +RHBUILD=0 +LINUX26=1 + +BASE_ARCHS="i686" +BIGMEM_ARCHS="" +BOOT_ARCHS="" +JENSEN_ARCHS="" +SMP_ARCHS="i686" +UP_ARCHS="" +SRC_ARCHS="" diff --git a/lustre/kernel_patches/targets/2.6-vanilla.target.in b/lustre/kernel_patches/targets/2.6-vanilla.target.in new file mode 100644 index 0000000..00c05df --- /dev/null +++ b/lustre/kernel_patches/targets/2.6-vanilla.target.in @@ -0,0 +1,15 @@ +lnxmaj=2.6.6 + +KERNEL=linux-$lnxmaj.tar.gz +SERIES=2.6-vanilla +VERSION=$lnxmaj +EXTRA_VERSION=lustre.@VERSION@ +RHBUILD=0 + +BASE_ARCHS="" +BIGMEM_ARCHS="" +BOOT_ARCHS="" +JENSEN_ARCHS="" +SMP_ARCHS="" +UP_ARCHS="" +SRC_ARCHS="" diff --git a/lustre/kernel_patches/targets/hp_pnnl-2.4.target.in b/lustre/kernel_patches/targets/hp_pnnl-2.4.target.in new file mode 100644 index 0000000..620e698 --- /dev/null +++ b/lustre/kernel_patches/targets/hp_pnnl-2.4.target.in @@ -0,0 +1,16 @@ +lnxmaj=2.4.20 +lnxrel=hp_pnnl + +KERNEL=linux-$lnxmaj-$lnxrel.tar.gz +SERIES=hp-pnnl-2.4.20 +VERSION=$lnxmaj +EXTRA_VERSION=$lnxrel_lustre.@VERSION@ +RHBUILD=0 + +BASE_ARCHS="ia64" +BIGMEM_ARCHS="" +BOOT_ARCHS="" +JENSEN_ARCHS="" +SMP_ARCHS="ia64" +UP_ARCHS="" +SRC_ARCHS="ia64" diff --git a/lustre/kernel_patches/targets/rh-2.4.target.in b/lustre/kernel_patches/targets/rh-2.4.target.in new file mode 100644 index 0000000..fa9140d --- /dev/null +++ b/lustre/kernel_patches/targets/rh-2.4.target.in @@ -0,0 +1,23 @@ +lnxmaj="2.4.20" +lnxrel="31.9" + +KERNEL=linux-${lnxmaj}-${lnxrel}.tar.gz +SERIES=rh-2.4.20 +VERSION=$lnxmaj +EXTRA_VERSION=${lnxrel}_lustre.@VERSION@ +RHBUILD=1 + +BASE_ARCHS="i686" +BIGMEM_ARCHS="" +BOOT_ARCHS="" +JENSEN_ARCHS="" +SMP_ARCHS="i686" +UP_ARCHS="" + +# the modules in this kernel do not build with gcc 3 +for cc in i386-redhat-linux-gcc-2.96 gcc296 gcc ; do + if which $cc >/dev/null 2>/dev/null ; then + CC=$cc + break + fi +done diff --git a/lustre/kernel_patches/targets/rhel-2.4.target.in b/lustre/kernel_patches/targets/rhel-2.4.target.in new file mode 100644 index 0000000..ce72d81 --- /dev/null +++ b/lustre/kernel_patches/targets/rhel-2.4.target.in @@ -0,0 +1,24 @@ +lnxmaj="2.4.21" +lnxrel="15.0.4.EL" + +KERNEL=linux-${lnxmaj}-${lnxrel}.tar.bz2 +SERIES=chaos-2.4.21 +VERSION=${lnxmaj} +EXTRA_VERSION=${lnxrel}_lustre.@VERSION@ +RHBUILD=1 + +BASE_ARCHS="i686" +BIGMEM_ARCHS="" +BOOT_ARCHS="" +JENSEN_ARCHS="" +SMP_ARCHS="i686 x86_64" +UP_ARCHS="" + +# the modules in this kernel do not build with gcc 3.3 or 2.96 +for cc in i386-redhat-linux-gcc-3.2.3 gcc32 gcc ; do + if which $cc >/dev/null 2>/dev/null ; then + export CC=$cc + break + fi +done +export CC=gcc diff --git a/lustre/kernel_patches/targets/suse-2.4.21-2.target.in b/lustre/kernel_patches/targets/suse-2.4.21-2.target.in new file mode 100644 index 0000000..245c085 --- /dev/null +++ b/lustre/kernel_patches/targets/suse-2.4.21-2.target.in @@ -0,0 +1,14 @@ +KERNEL=linux-2.4.21-x86_64.tar.gz +SERIES=suse-2.4.21-2 +VERSION=2.4.21 +EXTRA_VERSION=lustre.@VERSION@ +RHBUILD=0 + +BASE_ARCHS="x86_64" +BIGMEM_ARCHS="" +BOOT_ARCH="" +JENSEN_ARCHS="" +SMP_ARCHS="" +UP_ARCHS="x86_64" + +ARCH="x86_64" diff --git a/lustre/ldlm/ldlm_flock.c b/lustre/ldlm/ldlm_flock.c index 064977b..b521ff1 100644 --- a/lustre/ldlm/ldlm_flock.c +++ b/lustre/ldlm/ldlm_flock.c @@ -465,7 +465,7 @@ ldlm_flock_completion_ast(struct ldlm_lock *lock, int flags, void *data) spin_unlock_irqrestore(&imp->imp_lock, irqflags); } - lwi = LWI_TIMEOUT_INTR(0,NULL,ldlm_flock_interrupted_wait,&fwd); + lwi = LWI_TIMEOUT_INTR(0, NULL, ldlm_flock_interrupted_wait, &fwd); /* Go to sleep until the lock is granted. */ rc = l_wait_event(lock->l_waitq, diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c index 43d45a6..06898f5 100644 --- a/lustre/ldlm/ldlm_lockd.c +++ b/lustre/ldlm/ldlm_lockd.c @@ -597,9 +597,8 @@ int ldlm_handle_enqueue(struct ptlrpc_request *req, lock->l_handle.h_cookie); GOTO(existing_lock, rc = 0); } - } - + /* The lock's callback data might be set in the policy function */ lock = ldlm_lock_create(obddev->obd_namespace, &dlm_req->lock_handle2, dlm_req->lock_desc.l_resource.lr_name, diff --git a/lustre/ldlm/ldlm_request.c b/lustre/ldlm/ldlm_request.c index 26da691..428338d 100644 --- a/lustre/ldlm/ldlm_request.c +++ b/lustre/ldlm/ldlm_request.c @@ -845,7 +845,7 @@ void ldlm_change_cbdata(struct ldlm_namespace *ns, struct ldlm_res_id *res_id, ENTRY; if (ns == NULL) { - CERROR("must pass in namespace"); + CERROR("must pass in namespace\n"); LBUG(); } diff --git a/lustre/llite/dcache.c b/lustre/llite/dcache.c index aa6ab902..8a82062 100644 --- a/lustre/llite/dcache.c +++ b/lustre/llite/dcache.c @@ -83,8 +83,8 @@ static int ll_ddelete(struct dentry *de) { ENTRY; LASSERT(de); - CDEBUG(D_DENTRY, "%s dentry %*s (%p, parent %p, inode %p) %s%s\n", - (de->d_flags & DCACHE_LUSTRE_INVALID ? "keeping" : "deleting"), + CDEBUG(D_DENTRY, "%s dentry %.*s (%p, parent %p, inode %p) %s%s\n", + (de->d_flags & DCACHE_LUSTRE_INVALID ? "deleting" : "keeping"), de->d_name.len, de->d_name.name, de, de->d_parent, de->d_inode, d_unhashed(de) ? "" : "hashed,", list_empty(&de->d_subdirs) ? "" : "subdirs"); @@ -96,7 +96,7 @@ void ll_set_dd(struct dentry *de) ENTRY; LASSERT(de != NULL); - CDEBUG(D_DENTRY, "ldd on dentry %*s (%p) parent %p inode %p refc %d\n", + CDEBUG(D_DENTRY, "ldd on dentry %.*s (%p) parent %p inode %p refc %d\n", de->d_name.len, de->d_name.name, de, de->d_parent, de->d_inode, atomic_read(&de->d_count)); lock_kernel(); @@ -158,7 +158,7 @@ restart: while ((tmp = tmp->next) != head) { struct dentry *dentry = list_entry(tmp, struct dentry, d_alias); if (atomic_read(&dentry->d_count) == 0) { - CDEBUG(D_DENTRY, "deleting dentry %*s (%p) parent %p " + CDEBUG(D_DENTRY, "deleting dentry %.*s (%p) parent %p " "inode %p\n", dentry->d_name.len, dentry->d_name.name, dentry, dentry->d_parent, dentry->d_inode); @@ -168,7 +168,7 @@ restart: dput(dentry); goto restart; } else if (!(dentry->d_flags & DCACHE_LUSTRE_INVALID)) { - CDEBUG(D_DENTRY, "unhashing dentry %*s (%p) parent %p " + CDEBUG(D_DENTRY, "unhashing dentry %.*s (%p) parent %p " "inode %p refc %d\n", dentry->d_name.len, dentry->d_name.name, dentry, dentry->d_parent, dentry->d_inode, atomic_read(&dentry->d_count)); @@ -316,7 +316,7 @@ int ll_revalidate_it(struct dentry *de, int flags, struct lookup_intent *it) /* done in ll_unhash_aliases() dentry->d_flags |= DCACHE_LUSTRE_INVALID; */ } else { - CDEBUG(D_DENTRY, "revalidated dentry %*s (%p) parent %p " + CDEBUG(D_DENTRY, "revalidated dentry %.*s (%p) parent %p " "inode %p refc %d\n", de->d_name.len, de->d_name.name, de, de->d_parent, de->d_inode, atomic_read(&de->d_count)); diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c index 132f7ab..d8c4688 100644 --- a/lustre/llite/dir.c +++ b/lustre/llite/dir.c @@ -493,11 +493,12 @@ static int ll_dir_ioctl(struct inode *inode, struct file *file, ptlrpc_req_finished(request); RETURN(rc); } + case IOC_MDC_GETFILEINFO: case IOC_MDC_GETSTRIPE: { struct ptlrpc_request *request = NULL; struct ll_fid fid; struct mds_body *body; - struct lov_user_md *lump = (struct lov_user_md *)arg; + struct lov_user_md *lump; struct lov_mds_md *lmm; char *filename; int rc, lmmsize; @@ -533,6 +534,33 @@ static int ll_dir_ioctl(struct inode *inode, struct file *file, LASSERT(lmm != NULL); LASSERT_REPSWABBED(request, 1); + if (cmd == IOC_MDC_GETFILEINFO) { + struct lov_user_mds_data *lmdp; + lstat_t st = { 0 }; + + st.st_dev = 0; + st.st_mode = body->mode; + st.st_nlink = body->nlink; + st.st_uid = body->uid; + st.st_gid = body->gid; + st.st_rdev = body->rdev; + st.st_size = body->size; + st.st_blksize = PAGE_SIZE; + st.st_blocks = body->blocks; + st.st_atime = body->atime; + st.st_mtime = body->mtime; + st.st_ctime = body->ctime; + st.st_ino = body->ino; + + lmdp = (struct lov_user_mds_data *)arg; + rc = copy_to_user(&lmdp->lmd_st, &st, sizeof(st)); + if (rc) + GOTO(out_req, rc = -EFAULT); + lump = &lmdp->lmd_lmm; + } else { + lump = (struct lov_user_md *)arg; + } + rc = copy_to_user(lump, lmm, lmmsize); if (rc) GOTO(out_req, rc = -EFAULT); diff --git a/lustre/llite/file.c b/lustre/llite/file.c index 8a497ca..bf28ac8 100644 --- a/lustre/llite/file.c +++ b/lustre/llite/file.c @@ -1109,9 +1109,10 @@ loff_t ll_file_seek(struct file *file, loff_t offset, int origin) struct lustre_handle lockh = {0}; loff_t retval; ENTRY; - CDEBUG(D_VFSTRACE, "VFS Op:inode=%lu/%u(%p),to=%llu(%s)\n", + CDEBUG(D_VFSTRACE, "VFS Op:inode=%lu/%u(%p), to=%llu(%s)\n", inode->i_ino, inode->i_generation, inode, - offset + ((origin==2) ? inode->i_size : file->f_pos), + offset + ((origin == 2) ? inode->i_size : + (origin == 1) ? file->f_pos : 0), origin == 2 ? "SEEK_END": origin == 1 ? "SEEK_CUR": "SEEK_SET"); lprocfs_counter_incr(ll_i2sbi(inode)->ll_stats, LPROC_LL_LLSEEK); diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h index d3163cf..a3ad73b 100644 --- a/lustre/llite/llite_internal.h +++ b/lustre/llite/llite_internal.h @@ -10,6 +10,8 @@ #ifndef LLITE_INTERNAL_H #define LLITE_INTERNAL_H +#include + /* default to about 40meg of readahead on a given system. That much tied * up in 512k readahead requests serviced at 40ms each is about 1GB/s. */ #define SBI_DEFAULT_RA_MAX ((40 << 20) >> PAGE_CACHE_SHIFT) @@ -146,12 +148,6 @@ enum { LLAP__ORIGIN_MAX, }; - - -#define LL_CDEBUG_PAGE(mask, page, fmt, arg...) \ - CDEBUG(mask, "page %p map %p ind %lu priv %0lx: " fmt, \ - page, page->mapping, page->index, page->private, ## arg) - /* llite/lproc_llite.c */ int lprocfs_register_mountpoint(struct proc_dir_entry *parent, struct super_block *sb, char *osc, char *mdc); diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c index fd0c775..aa6e0fd 100644 --- a/lustre/llite/llite_lib.c +++ b/lustre/llite/llite_lib.c @@ -238,7 +238,7 @@ void lustre_common_put_super(struct super_block *sb) // We do this to get rid of orphaned dentries. That is not really trw. hlist_for_each_safe(tmp, next, &sbi->ll_orphan_dentry_list) { struct dentry *dentry = hlist_entry(tmp, struct dentry, d_hash); - CWARN("orphan dentry %*s (%p->%p) at unmount\n", + CWARN("orphan dentry %.*s (%p->%p) at unmount\n", dentry->d_name.len, dentry->d_name.name, dentry, next); shrink_dcache_parent(dentry); } diff --git a/lustre/llite/namei.c b/lustre/llite/namei.c index 4fcebad..09e499c 100644 --- a/lustre/llite/namei.c +++ b/lustre/llite/namei.c @@ -228,7 +228,7 @@ static void ll_d_add(struct dentry *de, struct inode *inode) /* d_instantiate */ if (!list_empty(&de->d_alias)) { spin_unlock(&dcache_lock); - CERROR("dentry %*s %p alias next %p, prev %p\n", + CERROR("dentry %.*s %p alias next %p, prev %p\n", de->d_name.len, de->d_name.name, de, de->d_alias.next, de->d_alias.prev); LBUG(); @@ -238,9 +238,9 @@ static void ll_d_add(struct dentry *de, struct inode *inode) de->d_inode = inode; /* d_rehash */ - if (!list_empty(&de->d_hash)) { + if (!d_unhashed(de)) { spin_unlock(&dcache_lock); - CERROR("dentry %*s %p hash next %p, prev %p\n", + CERROR("dentry %.*s %p hash next %p, prev %p\n", de->d_name.len, de->d_name.name, de, de->d_hash.next, de->d_hash.prev); LBUG(); @@ -283,7 +283,7 @@ struct dentry *ll_find_alias(struct inode *inode, struct dentry *de) atomic_inc(&dentry->d_count); spin_unlock(&dcache_lock); iput(inode); - CDEBUG(D_DENTRY, "alias dentry %*s (%p) parent %p inode %p " + CDEBUG(D_DENTRY, "alias dentry %.*s (%p) parent %p inode %p " "refc %d\n", de->d_name.len, de->d_name.name, de, de->d_parent, de->d_inode, atomic_read(&de->d_count)); return dentry; @@ -368,7 +368,7 @@ static struct dentry *ll_lookup_it(struct inode *parent, struct dentry *dentry, if (dentry->d_name.len > EXT3_NAME_LEN) RETURN(ERR_PTR(-ENAMETOOLONG)); - CDEBUG(D_VFSTRACE, "VFS Op:name=%*s,dir=%lu/%u(%p),intent=%s\n", + CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s,dir=%lu/%u(%p),intent=%s\n", dentry->d_name.len, dentry->d_name.name, parent->i_ino, parent->i_generation, parent, LL_IT2STR(it)); @@ -477,7 +477,7 @@ static int ll_create_it(struct inode *dir, struct dentry *dentry, int mode, int rc = 0; ENTRY; - CDEBUG(D_VFSTRACE, "VFS Op:name=%*s,dir=%lu/%u(%p),intent=%s\n", + CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s,dir=%lu/%u(%p),intent=%s\n", dentry->d_name.len, dentry->d_name.name, dir->i_ino, dir->i_generation, dir, LL_IT2STR(it)); @@ -530,7 +530,7 @@ static int ll_mknod_raw(struct nameidata *nd, int mode, dev_t rdev) int err = -EMLINK; ENTRY; - CDEBUG(D_VFSTRACE, "VFS Op:name=%*s,dir=%lu/%u(%p)\n", + CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s,dir=%lu/%u(%p)\n", nd->last.len, nd->last.name, dir->i_ino, dir->i_generation, dir); if (dir->i_nlink >= EXT3_LINK_MAX) @@ -574,7 +574,7 @@ static int ll_mknod(struct inode *dir, struct dentry *dchild, int mode, int err = -EMLINK; ENTRY; - CDEBUG(D_VFSTRACE, "VFS Op:name=%*s,dir=%lu/%u(%p)\n", + CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s,dir=%lu/%u(%p)\n", dchild->d_name.len, dchild->d_name.name, dir->i_ino, dir->i_generation, dir); @@ -628,7 +628,7 @@ static int ll_symlink_raw(struct nameidata *nd, const char *tgt) int err = -EMLINK; ENTRY; - CDEBUG(D_VFSTRACE, "VFS Op:name=%*s,dir=%lu/%u(%p),target=%s\n", + CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s,dir=%lu/%u(%p),target=%s\n", nd->last.len, nd->last.name, dir->i_ino, dir->i_generation, dir, tgt); @@ -658,10 +658,9 @@ static int ll_link_raw(struct nameidata *srcnd, struct nameidata *tgtnd) ENTRY; CDEBUG(D_VFSTRACE, - "VFS Op:name=%*s inode=%lu/%u(%p), dir=%lu/%u(%p), target=%*s\n", - srcnd->last.len, srcnd->last.name, src->i_ino, src->i_generation, - src, dir->i_ino, dir->i_generation, dir, - tgtnd->last.len, tgtnd->last.name); + "VFS Op: inode=%lu/%u(%p), dir=%lu/%u(%p), target=%.*s\n", + src->i_ino, src->i_generation, src, dir->i_ino, + dir->i_generation, dir, tgtnd->last.len, tgtnd->last.name); ll_prepare_mdc_op_data(&op_data, src, dir, tgtnd->last.name, tgtnd->last.len, 0); @@ -683,7 +682,7 @@ static int ll_mkdir_raw(struct nameidata *nd, int mode) struct mdc_op_data op_data; int err = -EMLINK; ENTRY; - CDEBUG(D_VFSTRACE, "VFS Op:name=%*s,dir=%lu/%u(%p)\n", + CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s,dir=%lu/%u(%p)\n", nd->last.len, nd->last.name, dir->i_ino, dir->i_generation, dir); if (dir->i_nlink >= EXT3_LINK_MAX) @@ -708,7 +707,7 @@ static int ll_rmdir_raw(struct nameidata *nd) struct mdc_op_data op_data; int rc; ENTRY; - CDEBUG(D_VFSTRACE, "VFS Op:name=%*s,dir=%lu/%u(%p)\n", + CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s,dir=%lu/%u(%p)\n", nd->last.len, nd->last.name, dir->i_ino, dir->i_generation, dir); ll_prepare_mdc_op_data(&op_data, dir, NULL, nd->last.name, @@ -797,7 +796,7 @@ static int ll_unlink_raw(struct nameidata *nd) struct mdc_op_data op_data; int rc; ENTRY; - CDEBUG(D_VFSTRACE, "VFS Op:name=%*s,dir=%lu/%u(%p)\n", + CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s,dir=%lu/%u(%p)\n", nd->last.len, nd->last.name, dir->i_ino, dir->i_generation, dir); ll_prepare_mdc_op_data(&op_data, dir, NULL, nd->last.name, @@ -823,7 +822,7 @@ static int ll_rename_raw(struct nameidata *srcnd, struct nameidata *tgtnd) struct mdc_op_data op_data; int err; ENTRY; - CDEBUG(D_VFSTRACE, "VFS Op:oldname=%*s,src_dir=%lu/%u(%p),newname=%*s," + CDEBUG(D_VFSTRACE,"VFS Op:oldname=%.*s,src_dir=%lu/%u(%p),newname=%.*s," "tgt_dir=%lu/%u(%p)\n", srcnd->last.len, srcnd->last.name, src->i_ino, src->i_generation, src, tgtnd->last.len, tgtnd->last.name, tgt->i_ino, tgt->i_generation, tgt); diff --git a/lustre/llite/rw.c b/lustre/llite/rw.c index c0b7d36..dbac936 100644 --- a/lustre/llite/rw.c +++ b/lustre/llite/rw.c @@ -1,4 +1,4 @@ -/* p_fr-*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- +/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- * vim:expandtab:shiftwidth=8:tabstop=8: * * Lustre Lite I/O page cache routines shared by different kernel revs @@ -98,6 +98,8 @@ static int ll_brw(int cmd, struct inode *inode, struct obdo *oa, RETURN(rc); } +__u64 lov_merge_size(struct lov_stripe_md *lsm, int kms); + /* this isn't where truncate starts. roughly: * sys_truncate->ll_setattr_raw->vmtruncate->ll_truncate * we grab the lock back in setattr_raw to avoid races. */ @@ -107,8 +109,8 @@ void ll_truncate(struct inode *inode) struct obdo oa; int rc; ENTRY; - CDEBUG(D_VFSTRACE, "VFS Op:inode=%lu/%u(%p)\n", inode->i_ino, - inode->i_generation, inode); + CDEBUG(D_VFSTRACE, "VFS Op:inode=%lu/%u(%p) to %llu\n", inode->i_ino, + inode->i_generation, inode, inode->i_size); if (!lsm) { CDEBUG(D_INODE, "truncate on inode %lu with no objects\n", @@ -117,24 +119,30 @@ void ll_truncate(struct inode *inode) return; } - oa.o_id = lsm->lsm_object_id; - oa.o_valid = OBD_MD_FLID; - obdo_from_inode(&oa, inode, OBD_MD_FLTYPE|OBD_MD_FLMODE|OBD_MD_FLATIME| - OBD_MD_FLMTIME | OBD_MD_FLCTIME); - - CDEBUG(D_INFO, "calling punch for "LPX64" (all bytes after %Lu)\n", - oa.o_id, inode->i_size); - - /* truncate == punch from new size to absolute end of file */ - /* NB: obd_punch must be called with i_sem held! It updates the kms! */ - rc = obd_punch(ll_i2obdexp(inode), &oa, lsm, inode->i_size, - OBD_OBJECT_EOF, NULL); - if (rc) - CERROR("obd_truncate fails (%d) ino %lu\n", rc, inode->i_ino); - else - obdo_to_inode(inode, &oa, OBD_MD_FLSIZE | OBD_MD_FLBLOCKS | - OBD_MD_FLATIME | OBD_MD_FLMTIME | - OBD_MD_FLCTIME); + if (lov_merge_size(lsm, 0) == inode->i_size) { + CDEBUG(D_VFSTRACE, "skipping punch for "LPX64" (size = %llu)\n", + lsm->lsm_object_id, inode->i_size); + } else { + CDEBUG(D_INFO, "calling punch for "LPX64" (new size %llu)\n", + lsm->lsm_object_id, inode->i_size); + + oa.o_id = lsm->lsm_object_id; + oa.o_valid = OBD_MD_FLID; + obdo_from_inode(&oa, inode, OBD_MD_FLTYPE | OBD_MD_FLMODE | + OBD_MD_FLATIME |OBD_MD_FLMTIME |OBD_MD_FLCTIME); + + /* truncate == punch from new size to absolute end of file */ + /* NB: must call obd_punch with i_sem held! It updates kms! */ + rc = obd_punch(ll_i2obdexp(inode), &oa, lsm, inode->i_size, + OBD_OBJECT_EOF, NULL); + if (rc) + CERROR("obd_truncate fails (%d) ino %lu\n", rc, + inode->i_ino); + else + obdo_to_inode(inode, &oa, OBD_MD_FLSIZE|OBD_MD_FLBLOCKS| + OBD_MD_FLATIME | OBD_MD_FLMTIME | + OBD_MD_FLCTIME); + } EXIT; return; @@ -396,11 +404,10 @@ out: RETURN(llap); } -static int queue_or_sync_write(struct obd_export *exp, - struct lov_stripe_md *lsm, +static int queue_or_sync_write(struct obd_export *exp, + struct lov_stripe_md *lsm, struct ll_async_page *llap, - unsigned to, - obd_flag async_flags) + unsigned to, obd_flag async_flags) { struct obd_io_group *oig; int rc; @@ -434,12 +441,11 @@ static int queue_or_sync_write(struct obd_export *exp, GOTO(free_oig, rc); rc = oig_wait(oig); - + if (!rc && async_flags & ASYNC_READY) unlock_page(llap->llap_page); - LL_CDEBUG_PAGE(D_PAGE, llap->llap_page, "sync write returned %d\n", - rc); + LL_CDEBUG_PAGE(D_PAGE, llap->llap_page, "sync write returned %d\n", rc); free_oig: oig_release(oig); @@ -447,8 +453,6 @@ out: RETURN(rc); } -void lov_increase_kms(struct obd_export *exp, struct lov_stripe_md *lsm, - obd_off size); /* update our write count to account for i_size increases that may have * happened since we've queued the page for io. */ @@ -477,6 +481,10 @@ int ll_commit_write(struct file *file, struct page *page, unsigned from, if (IS_ERR(llap)) RETURN(PTR_ERR(llap)); + exp = ll_i2obdexp(inode); + if (exp == NULL) + RETURN(-EINVAL); + /* queue a write for some time in the future the first time we * dirty the page */ if (!PageDirty(page)) { @@ -486,7 +494,7 @@ int ll_commit_write(struct file *file, struct page *page, unsigned from, exp = ll_i2obdexp(inode); if (exp == NULL) RETURN(-EINVAL); - + rc = queue_or_sync_write(exp, ll_i2info(inode)->lli_smd, llap, to, 0); if (rc) @@ -505,7 +513,8 @@ int ll_commit_write(struct file *file, struct page *page, unsigned from, out: size = (((obd_off)page->index) << PAGE_SHIFT) + to; if (rc == 0) { - lov_increase_kms(exp, lsm, size); + size = (((obd_off)page->index) << PAGE_SHIFT) + to; + obd_increase_kms(exp, lsm, size); if (size > inode->i_size) inode->i_size = size; SetPageUptodate(page); diff --git a/lustre/llite/rw24.c b/lustre/llite/rw24.c index fc3cab1..d8c98f0 100644 --- a/lustre/llite/rw24.c +++ b/lustre/llite/rw24.c @@ -126,7 +126,8 @@ static int ll_direct_IO_24(int rw, ptlrpc_set_destroy(set); if (rc == 0) { rc = iobuf->length; - obdo_to_inode(inode, &oa, OBD_MD_FLBLOCKS); + if (rw == WRITE) + obd_increase_kms(ll_i2obdexp(inode), lsm, offset); } OBD_FREE(pga, sizeof(*pga) * iobuf->nr_pages); diff --git a/lustre/lov/lov_obd.c b/lustre/lov/lov_obd.c index ff19e0f..77f3a0a 100644 --- a/lustre/lov/lov_obd.c +++ b/lustre/lov/lov_obd.c @@ -1569,7 +1569,7 @@ static int lov_brw(int cmd, struct obd_export *exp, struct obdo *src_oa, tmp_oa, &si->lsm, si->bufct, &ioarr[shift], oti); if (rc) - GOTO(out_ioarr, rc); + GOTO(out_oa, rc); lov_merge_attrs(ret_oa, tmp_oa, tmp_oa->o_valid, lsm, i, &set); @@ -1594,40 +1594,21 @@ static int lov_brw(int cmd, struct obd_export *exp, struct obdo *src_oa, return rc; } -static int lov_brw_interpret(struct ptlrpc_request_set *reqset, void *data, - int rc) +static int lov_brw_interpret(struct ptlrpc_request_set *set, void *data, int rc) { struct lov_brw_async_args *aa = data; struct lov_stripe_md *lsm = aa->aa_lsm; - obd_count oa_bufs = aa->aa_oa_bufs; - struct obdo *oa = aa->aa_oa; struct obdo *obdos = aa->aa_obdos; - struct brw_page *ioarr = aa->aa_ioarr; struct lov_oinfo *loi; - int i, set = 0; + int i = 0; ENTRY; - if (rc == 0) { - /* NB all stripe requests succeeded to get here */ - - for (i = 0, loi = lsm->lsm_oinfo; i < lsm->lsm_stripe_count; - i++, loi++) { - if (obdos[i].o_valid == 0) /* inactive stripe */ - continue; - - lov_merge_attrs(oa, &obdos[i], obdos[i].o_valid, lsm, - i, &set); - } - - if (!set) { - CERROR("No stripes had valid attrs\n"); - rc = -EIO; - } - } - oa->o_id = lsm->lsm_object_id; + for (loi = lsm->lsm_oinfo; i < lsm->lsm_stripe_count; i++, loi++) + if (obdos[i].o_valid & OBD_MD_FLBLOCKS) + loi->loi_blocks = obdos[i].o_blocks; OBD_FREE(obdos, lsm->lsm_stripe_count * sizeof(*obdos)); - OBD_FREE(ioarr, sizeof(*ioarr) * oa_bufs); + OBD_FREE(aa->aa_ioarr, sizeof(*aa->aa_ioarr) * aa->aa_oa_bufs); RETURN(rc); } @@ -2804,7 +2785,7 @@ int lov_complete_many(struct obd_export *exp, struct lov_stripe_md *lsm, } #endif -void lov_increase_kms(struct obd_export *exp, struct lov_stripe_md *lsm, +int lov_increase_kms(struct obd_export *exp, struct lov_stripe_md *lsm, obd_off size) { struct lov_oinfo *loi; @@ -2821,7 +2802,7 @@ void lov_increase_kms(struct obd_export *exp, struct lov_stripe_md *lsm, stripe, kms > loi->loi_kms ? "" : "not ", loi->loi_kms, kms); if (kms > loi->loi_kms) loi->loi_kms = kms; - EXIT; + RETURN(0); } EXPORT_SYMBOL(lov_increase_kms); @@ -2847,6 +2828,7 @@ struct obd_ops lov_obd_ops = { .o_queue_group_io = lov_queue_group_io, .o_trigger_group_io = lov_trigger_group_io, .o_teardown_async_page = lov_teardown_async_page, + .o_increase_kms = lov_increase_kms, .o_punch = lov_punch, .o_sync = lov_sync, .o_enqueue = lov_enqueue, diff --git a/lustre/lvfs/fsfilt_ext3.c b/lustre/lvfs/fsfilt_ext3.c index f1f1307..9ef8d7e 100644 --- a/lustre/lvfs/fsfilt_ext3.c +++ b/lustre/lvfs/fsfilt_ext3.c @@ -142,6 +142,7 @@ static void *fsfilt_ext3_start(struct inode *inode, int op, void *desc_private, journal_start: lock_kernel(); + LASSERTF(nblocks > 0, "can't start %d credit transaction\n", nblocks); handle = journal_start(EXT3_JOURNAL(inode), nblocks); unlock_kernel(); @@ -233,6 +234,7 @@ static int fsfilt_ext3_credits_needed(int objcount, struct fsfilt_objinfo *fso, EXT3_SINGLEDATA_TRANS_BLOCKS; #endif + LASSERTF(needed > 0, "can't start %d credit transaction\n", needed); return needed; } diff --git a/lustre/lvfs/lvfs_linux.c b/lustre/lvfs/lvfs_linux.c index 868f010..ef28875 100644 --- a/lustre/lvfs/lvfs_linux.c +++ b/lustre/lvfs/lvfs_linux.c @@ -83,7 +83,7 @@ void push_ctxt(struct obd_run_ctxt *save, struct obd_run_ctxt *new_ctx, /* CDEBUG(D_INFO, - "= push %p->%p = cur fs %p pwd %p:d%d:i%d (%*s), pwdmnt %p:%d\n", + "= push %p->%p = cur fs %p pwd %p:d%d:i%d (%.*s), pwdmnt %p:%d\n", save, current, current->fs, current->fs->pwd, atomic_read(¤t->fs->pwd->d_count), atomic_read(¤t->fs->pwd->d_inode->i_count), @@ -128,7 +128,7 @@ void push_ctxt(struct obd_run_ctxt *save, struct obd_run_ctxt *new_ctx, /* CDEBUG(D_INFO, - "= push %p->%p = cur fs %p pwd %p:d%d:i%d (%*s), pwdmnt %p:%d\n", + "= push %p->%p = cur fs %p pwd %p:d%d:i%d (%.*s), pwdmnt %p:%d\n", new_ctx, current, current->fs, current->fs->pwd, atomic_read(¤t->fs->pwd->d_count), atomic_read(¤t->fs->pwd->d_inode->i_count), @@ -149,7 +149,7 @@ void pop_ctxt(struct obd_run_ctxt *saved, struct obd_run_ctxt *new_ctx, /* CDEBUG(D_INFO, - " = pop %p==%p = cur %p pwd %p:d%d:i%d (%*s), pwdmnt %p:%d\n", + " = pop %p==%p = cur %p pwd %p:d%d:i%d (%.*s), pwdmnt %p:%d\n", new_ctx, current, current->fs, current->fs->pwd, atomic_read(¤t->fs->pwd->d_count), atomic_read(¤t->fs->pwd->d_inode->i_count), @@ -178,7 +178,7 @@ void pop_ctxt(struct obd_run_ctxt *saved, struct obd_run_ctxt *new_ctx, /* CDEBUG(D_INFO, - "= pop %p->%p = cur fs %p pwd %p:d%d:i%d (%*s), pwdmnt %p:%d\n", + "= pop %p->%p = cur fs %p pwd %p:d%d:i%d (%.*s), pwdmnt %p:%d\n", saved, current, current->fs, current->fs->pwd, atomic_read(¤t->fs->pwd->d_count), atomic_read(¤t->fs->pwd->d_inode->i_count), @@ -197,7 +197,7 @@ struct dentry *simple_mknod(struct dentry *dir, char *name, int mode, int fix) ENTRY; ASSERT_KERNEL_CTXT("kernel doing mknod outside kernel context\n"); - CDEBUG(D_INODE, "creating file %*s\n", (int)strlen(name), name); + CDEBUG(D_INODE, "creating file %.*s\n", (int)strlen(name), name); dchild = ll_lookup_one_len(name, dir, strlen(name)); if (IS_ERR(dchild)) @@ -242,7 +242,7 @@ struct dentry *simple_mkdir(struct dentry *dir, char *name, int mode, int fix) ENTRY; ASSERT_KERNEL_CTXT("kernel doing mkdir outside kernel context\n"); - CDEBUG(D_INODE, "creating directory %*s\n", (int)strlen(name), name); + CDEBUG(D_INODE, "creating directory %.*s\n", (int)strlen(name), name); dchild = ll_lookup_one_len(name, dir, strlen(name)); if (IS_ERR(dchild)) GOTO(out_up, dchild); diff --git a/lustre/mdc/mdc_locks.c b/lustre/mdc/mdc_locks.c index 49d51ac..fbbb038 100644 --- a/lustre/mdc/mdc_locks.c +++ b/lustre/mdc/mdc_locks.c @@ -424,7 +424,7 @@ int mdc_intent_lock(struct obd_export *exp, struct ll_uctxt *uctxt, ENTRY; LASSERT(it); - CDEBUG(D_DLMTRACE, "name: %*s in inode "LPU64", intent: %s flags %#o\n", + CDEBUG(D_DLMTRACE, "name: %.*s in inode "LPU64", intent: %s flags %#o\n", len, name, pfid->id, ldlm_it2str(it->it_op), it->it_flags); if (cfid && (it->it_op == IT_LOOKUP || it->it_op == IT_GETATTR)) { @@ -557,7 +557,7 @@ int mdc_intent_lock(struct obd_export *exp, struct ll_uctxt *uctxt, sizeof(lockh)); } } - CDEBUG(D_DENTRY, "D_IT dentry %*s intent: %s status %d disp %x rc %d\n", + CDEBUG(D_DENTRY, "D_IT dentry %.*s intent: %s status %d disp %x rc %d\n", len, name, ldlm_it2str(it->it_op), it->d.lustre.it_status, it->d.lustre.it_disposition, rc); diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c index f0bb758..d8bfc41 100644 --- a/lustre/mdc/mdc_request.c +++ b/lustre/mdc/mdc_request.c @@ -222,6 +222,12 @@ void mdc_store_inode_generation(struct ptlrpc_request *req, int reqoff, LASSERT (body != NULL); memcpy(&rec->cr_replayfid, &body->fid1, sizeof rec->cr_replayfid); + if (body->fid1.id == 0) { + DEBUG_REQ(D_ERROR, req, "saving replay request with id = 0 " + "gen = %u", body->fid1.generation); + LBUG(); + } + DEBUG_REQ(D_HA, req, "storing generation %u for ino "LPU64, rec->cr_replayfid.generation, rec->cr_replayfid.id); } @@ -355,6 +361,12 @@ void mdc_set_open_replay_data(struct obd_client_handle *och, open_req->rq_replay_cb = mdc_replay_open; open_req->rq_commit_cb = mdc_commit_open; open_req->rq_cb_data = mod; + if (body->fid1.id == 0) { + DEBUG_REQ(D_ERROR, open_req, "saving replay request with " + "id = 0 gen = %u", body->fid1.generation); + LBUG(); + } + DEBUG_REQ(D_HA, open_req, "set up replay data"); } @@ -468,8 +480,7 @@ int mdc_close(struct obd_export *exp, struct obdo *oa, if (likely(mod != NULL)) { mod->mod_close_req = req; LASSERT(mod->mod_open_req->rq_type != LI_POISON); - DEBUG_REQ(D_HA, mod->mod_open_req, "matched open req %p", - mod->mod_open_req); + DEBUG_REQ(D_HA, mod->mod_open_req, "matched open"); } else { CDEBUG(D_HA, "couldn't find open req; expecting close error\n"); } diff --git a/lustre/mds/handler.c b/lustre/mds/handler.c index e6320ef..ecc5871 100644 --- a/lustre/mds/handler.c +++ b/lustre/mds/handler.c @@ -342,7 +342,7 @@ static int mds_destroy_export(struct obd_export *export) /* If you change this message, be sure to update * replay_single:test_46 */ - CDEBUG(D_INODE, "force closing file handle for %*s (%s:%lu)\n", + CDEBUG(D_INODE, "force closing file handle for %.*s (%s:%lu)\n", dentry->d_name.len, dentry->d_name.name, ll_bdevname(dentry->d_inode->i_sb, btmp), dentry->d_inode->i_ino); @@ -1128,9 +1128,11 @@ int mds_handle(struct ptlrpc_request *req) DEBUG_REQ(D_INODE, req, "connect"); OBD_FAIL_RETURN(OBD_FAIL_MDS_CONNECT_NET, 0); rc = target_handle_connect(req, mds_handle); - if (!rc) + if (!rc) { /* Now that we have an export, set mds. */ + obd = req->rq_export->exp_obd; mds = mds_req2mds(req); + } break; case MDS_DISCONNECT: @@ -1322,8 +1324,6 @@ int mds_handle(struct ptlrpc_request *req) /* If we're DISCONNECTing, the mds_export_data is already freed */ if (!rc && req->rq_reqmsg->opc != MDS_DISCONNECT) { struct mds_export_data *med = &req->rq_export->exp_mds_data; - struct obd_device *obd = list_entry(mds, struct obd_device, - u.mds); req->rq_repmsg->last_xid = le64_to_cpu(med->med_mcd->mcd_last_xid); diff --git a/lustre/mds/mds_fs.c b/lustre/mds/mds_fs.c index 95f8650..2447fc8 100644 --- a/lustre/mds/mds_fs.c +++ b/lustre/mds/mds_fs.c @@ -168,6 +168,7 @@ int mds_client_free(struct obd_export *exp, int clear_client) free_and_out: OBD_FREE(med->med_mcd, sizeof(*med->med_mcd)); + med->med_mcd = NULL; return 0; } diff --git a/lustre/mds/mds_open.c b/lustre/mds/mds_open.c index 58f5c99..2e12a31 100644 --- a/lustre/mds/mds_open.c +++ b/lustre/mds/mds_open.c @@ -818,6 +818,14 @@ int mds_open(struct mds_update_record *rec, int offset, * opened this file and is only replaying the RPC, so we open the * inode by fid (at some large expense in security). */ if (lustre_msg_get_flags(req->rq_reqmsg) & MSG_REPLAY) { + if (rec->ur_fid2->id == 0) { + struct ldlm_lock *lock = ldlm_handle2lock(child_lockh); + if (lock) { + LDLM_ERROR(lock, "fid2 not set on open replay"); + LDLM_LOCK_PUT(lock); + } + DEBUG_REQ(D_ERROR, req, "fid2 not set on open replay"); + } LASSERT(rec->ur_fid2->id); rc = mds_open_by_fid(req, rec->ur_fid2, body, rec->ur_flags, @@ -943,7 +951,7 @@ int mds_open(struct mds_update_record *rec, int offset, } LASSERTF(!mds_inode_is_orphan(dchild->d_inode), - "dchild %*s (%p) inode %p\n", dchild->d_name.len, + "dchild %.*s (%p) inode %p\n", dchild->d_name.len, dchild->d_name.name, dchild, dchild->d_inode); mds_pack_inode2fid(&body->fid1, dchild->d_inode); @@ -1008,7 +1016,7 @@ int mds_open(struct mds_update_record *rec, int offset, if (rc && created) { int err = vfs_unlink(dparent->d_inode, dchild); if (err) { - CERROR("unlink(%*s) in error path: %d\n", + CERROR("unlink(%.*s) in error path: %d\n", dchild->d_name.len, dchild->d_name.name, err); } @@ -1104,6 +1112,14 @@ int mds_mfd_close(struct ptlrpc_request *req, struct obd_device *obd, LASSERT(pending_child->d_inode != NULL); cleanup_phase = 2; /* dput(pending_child) when finished */ + if (S_ISDIR(pending_child->d_inode->i_mode)) { + rc = vfs_rmdir(pending_dir, pending_child); + if (rc) + CERROR("error unlinking orphan dir %s: rc %d\n", + fidname,rc); + goto out; + } + if (req != NULL && req->rq_repmsg != NULL) { lmm = lustre_msg_buf(req->rq_repmsg, 1, 0); stripe_count = le32_to_cpu(lmm->lmm_stripe_count); @@ -1129,10 +1145,7 @@ int mds_mfd_close(struct ptlrpc_request *req, struct obd_device *obd, pending_child->d_fsdata = (void *) &dp; dp.p_inum = 0; dp.p_ptr = req; - if (S_ISDIR(pending_child->d_inode->i_mode)) - rc = vfs_rmdir(pending_dir, pending_child); - else - rc = vfs_unlink(pending_dir, pending_child); + rc = vfs_unlink(pending_dir, pending_child); if (rc) CERROR("error unlinking orphan %s: rc %d\n",fidname,rc); diff --git a/lustre/mds/mds_reint.c b/lustre/mds/mds_reint.c index 08f021a..eb857bc 100644 --- a/lustre/mds/mds_reint.c +++ b/lustre/mds/mds_reint.c @@ -1443,7 +1443,7 @@ static int mds_reint_link(struct mds_update_record *rec, int offset, cleanup_phase = 2; /* target directory dentry */ - CDEBUG(D_INODE, "linking %*s/%s to inode %lu\n", + CDEBUG(D_INODE, "linking %.*s/%s to inode %lu\n", de_tgt_dir->d_name.len, de_tgt_dir->d_name.name, rec->ur_name, de_src->d_inode->i_ino); @@ -1596,7 +1596,7 @@ static int mds_get_parents_children_locked(struct obd_device *obd, *de_oldp = ll_lookup_one_len(old_name, *de_srcdirp, old_len - 1); if (IS_ERR(*de_oldp)) { rc = PTR_ERR(*de_oldp); - CERROR("old child lookup error (%*s): %d\n", + CERROR("old child lookup error (%.*s): %d\n", old_len - 1, old_name, rc); GOTO(cleanup, rc); } @@ -1618,7 +1618,7 @@ static int mds_get_parents_children_locked(struct obd_device *obd, *de_newp = ll_lookup_one_len(new_name, *de_tgtdirp, new_len - 1); if (IS_ERR(*de_newp)) { rc = PTR_ERR(*de_newp); - CERROR("new child lookup error (%*s): %d\n", + CERROR("new child lookup error (%.*s): %d\n", old_len - 1, old_name, rc); GOTO(cleanup, rc); } diff --git a/lustre/mds/mds_unlink_open.c b/lustre/mds/mds_unlink_open.c index 04a4513..92b4a45 100644 --- a/lustre/mds/mds_unlink_open.c +++ b/lustre/mds/mds_unlink_open.c @@ -93,32 +93,31 @@ static int mds_unlink_orphan(struct obd_device *obd, struct dentry *dchild, struct mds_obd *mds = &obd->u.mds; struct lov_mds_md *lmm = NULL; struct llog_cookie *logcookies = NULL; - int lmm_size = 0, log_unlink = 0; + int lmm_size, log_unlink = 0; void *handle = NULL; int rc, err; ENTRY; LASSERT(mds->mds_osc_obd != NULL); - OBD_ALLOC(lmm, mds->mds_max_mdsize); + /* We don't need to do any of these other things for orhpan dirs, + * especially not mds_get_md (may get a default LOV EA, bug 4554) */ + if (S_ISDIR(inode->i_mode)) { + rc = vfs_rmdir(pending_dir, dchild); + if (rc) + CERROR("error %d unlinking dir %*s from PENDING\n", + rc, dchild->d_name.len, dchild->d_name.name); + RETURN(rc); + } + + lmm_size = mds->mds_max_mdsize; + OBD_ALLOC(lmm, lmm_size); if (lmm == NULL) RETURN(-ENOMEM); - down(&inode->i_sem); - rc = fsfilt_get_md(obd, inode, lmm, mds->mds_max_mdsize); - up(&inode->i_sem); - - if (rc < 0) { - CERROR("Error %d reading eadata for ino %lu\n", - rc, inode->i_ino); + rc = mds_get_md(obd, inode, lmm, &lmm_size, 1); + if (rc < 0) GOTO(out_free_lmm, rc); - } else if (rc > 0) { - lmm_size = rc; - rc = mds_convert_lov_ea(obd, inode, lmm, lmm_size); - if (rc > 0) - lmm_size = rc; - rc = 0; - } handle = fsfilt_start_log(obd, pending_dir, FSFILT_OP_UNLINK, NULL, le32_to_cpu(lmm->lmm_stripe_count)); @@ -129,16 +128,11 @@ static int mds_unlink_orphan(struct obd_device *obd, struct dentry *dchild, GOTO(out_free_lmm, rc); } - if (S_ISDIR(inode->i_mode)) - rc = vfs_rmdir(pending_dir, dchild); - else - rc = vfs_unlink(pending_dir, dchild); - + rc = vfs_unlink(pending_dir, dchild); if (rc) - CERROR("error %d unlinking orphan %*s from PENDING directory\n", + CERROR("error %d unlinking orphan %.*s from PENDING\n", rc, dchild->d_name.len, dchild->d_name.name); - - if (!rc && lmm_size) { + else if (lmm_size) { OBD_ALLOC(logcookies, mds->mds_max_cookiesize); if (logcookies == NULL) rc = -ENOMEM; @@ -146,13 +140,13 @@ static int mds_unlink_orphan(struct obd_device *obd, struct dentry *dchild, mds->mds_max_cookiesize) > 0) log_unlink = 1; } + err = fsfilt_commit(obd, pending_dir, handle, 0); if (err) { CERROR("error committing orphan unlink: %d\n", err); if (!rc) rc = err; - } - if (!rc) { + } else if (!rc) { rc = mds_osc_destroy_orphan(mds, inode, lmm, lmm_size, logcookies, log_unlink); } diff --git a/lustre/obdclass/llog_internal.h b/lustre/obdclass/llog_internal.h index 0066087..d4be19c 100644 --- a/lustre/obdclass/llog_internal.h +++ b/lustre/obdclass/llog_internal.h @@ -5,4 +5,6 @@ int llog_put_cat_list(struct obd_device *obd, struct obd_device *disk_obd, char *name, int count, struct llog_catid *idarray); int llog_cat_id2handle(struct llog_handle *cathandle, struct llog_handle **res, struct llog_logid *logid); +int class_config_dump_handler(struct llog_handle * handle, + struct llog_rec_hdr *rec, void *data); #endif diff --git a/lustre/obdclass/llog_ioctl.c b/lustre/obdclass/llog_ioctl.c index 86bee78..40ed1e4 100644 --- a/lustre/obdclass/llog_ioctl.c +++ b/lustre/obdclass/llog_ioctl.c @@ -305,9 +305,11 @@ int llog_ioctl(struct llog_ctxt *ctxt, int cmd, struct obd_ioctl_data *data) case OBD_IOC_LLOG_PRINT: { LASSERT(data->ioc_inllen1); - err = llog_process(handle, llog_print_cb, data, NULL); + err = llog_process(handle, class_config_dump_handler,data,NULL); if (err == -LLOG_EEMPTY) err = 0; + else + err = llog_process(handle, llog_print_cb, data, NULL); GOTO(out_close, err); } diff --git a/lustre/obdclass/llog_lvfs.c b/lustre/obdclass/llog_lvfs.c index f81826c..f032552 100644 --- a/lustre/obdclass/llog_lvfs.c +++ b/lustre/obdclass/llog_lvfs.c @@ -163,7 +163,7 @@ static int llog_lvfs_read_header(struct llog_handle *handle) rc = llog_lvfs_read_blob(obd, handle->lgh_file, handle->lgh_hdr, LLOG_CHUNK_SIZE, 0); if (rc) { - CERROR("error reading log header from %*s\n", + CERROR("error reading log header from %.*s\n", handle->lgh_file->f_dentry->d_name.len, handle->lgh_file->f_dentry->d_name.name); } else { @@ -172,13 +172,13 @@ static int llog_lvfs_read_header(struct llog_handle *handle) * These need to be fixed for bug 1987 */ if (llh_hdr->lrh_type != LLOG_HDR_MAGIC) { - CERROR("bad log %*s header magic: %#x (expected %#x)\n", + CERROR("bad log %.*s header magic: %#x (expected %#x)\n", handle->lgh_file->f_dentry->d_name.len, handle->lgh_file->f_dentry->d_name.name, llh_hdr->lrh_type, LLOG_HDR_MAGIC); rc = -EIO; } else if (llh_hdr->lrh_len != LLOG_CHUNK_SIZE) { - CERROR("incorrectly sized log %*s header: %#x " + CERROR("incorrectly sized log %.*s header: %#x " "(expected %#x)\n", handle->lgh_file->f_dentry->d_name.len, handle->lgh_file->f_dentry->d_name.name, diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c index 926420f..a1176c6 100644 --- a/lustre/obdclass/lprocfs_status.c +++ b/lustre/obdclass/lprocfs_status.c @@ -632,6 +632,7 @@ int lprocfs_alloc_obd_stats(struct obd_device *obd, unsigned num_private_stats) LPROCFS_OBD_OP_INIT(num_private_stats, stats, queue_group_io); LPROCFS_OBD_OP_INIT(num_private_stats, stats, trigger_group_io); LPROCFS_OBD_OP_INIT(num_private_stats, stats, teardown_async_page); + LPROCFS_OBD_OP_INIT(num_private_stats, stats, increase_kms); LPROCFS_OBD_OP_INIT(num_private_stats, stats, punch); LPROCFS_OBD_OP_INIT(num_private_stats, stats, sync); LPROCFS_OBD_OP_INIT(num_private_stats, stats, migrate); diff --git a/lustre/obdclass/lustre_peer.c b/lustre/obdclass/lustre_peer.c index bbe3340..3f172fe 100644 --- a/lustre/obdclass/lustre_peer.c +++ b/lustre/obdclass/lustre_peer.c @@ -155,8 +155,11 @@ int class_del_uuid (char *uuid) spin_unlock (&g_uuid_lock); - if (list_empty (&deathrow)) + if (list_empty (&deathrow)) { + if (uuid) + CERROR("delete non-existent uuid %s\n", uuid); return -EINVAL; + } do { data = list_entry(deathrow.next, struct uuid_nid_data, head); diff --git a/lustre/obdclass/obd_config.c b/lustre/obdclass/obd_config.c index ac15529..3c29341 100644 --- a/lustre/obdclass/obd_config.c +++ b/lustre/obdclass/obd_config.c @@ -519,7 +519,7 @@ int class_process_config(struct lustre_cfg *lcfg) } } out: - RETURN(err); + return err; } static int class_config_llog_handler(struct llog_handle * handle, @@ -619,8 +619,8 @@ parse_out: } -static int class_config_dump_handler(struct llog_handle * handle, - struct llog_rec_hdr *rec, void *data) +int class_config_dump_handler(struct llog_handle * handle, + struct llog_rec_hdr *rec, void *data) { int cfg_len = rec->lrh_len; char *cfg_buf = (char*) (rec + 1); @@ -651,11 +651,11 @@ static int class_config_dump_handler(struct llog_handle * handle, if (lcfg->lcfg_inlbuf1) CDEBUG(D_INFO, " inlbuf1: %s\n",lcfg->lcfg_inlbuf1); if (lcfg->lcfg_inlbuf2) - CDEBUG(D_INFO, " inlbuf1: %s\n",lcfg->lcfg_inlbuf2); + CDEBUG(D_INFO, " inlbuf2: %s\n",lcfg->lcfg_inlbuf2); if (lcfg->lcfg_inlbuf3) - CDEBUG(D_INFO, " inlbuf1: %s\n",lcfg->lcfg_inlbuf3); + CDEBUG(D_INFO, " inlbuf3: %s\n",lcfg->lcfg_inlbuf3); if (lcfg->lcfg_inlbuf4) - CDEBUG(D_INFO, " inlbuf1: %s\n",lcfg->lcfg_inlbuf4); + CDEBUG(D_INFO, " inlbuf4: %s\n",lcfg->lcfg_inlbuf4); lustre_cfg_freedata(buf, cfg_len); } else if (rec->lrh_type == PTL_CFG_REC) { diff --git a/lustre/obdclass/simple.c b/lustre/obdclass/simple.c index 722de4a..581532b 100644 --- a/lustre/obdclass/simple.c +++ b/lustre/obdclass/simple.c @@ -56,7 +56,7 @@ void push_ctxt(struct obd_run_ctxt *save, struct obd_run_ctxt *new_ctx, /* CDEBUG(D_INFO, - "= push %p->%p = cur fs %p pwd %p:d%d:i%d (%*s), pwdmnt %p:%d\n", + "= push %p->%p = cur fs %p pwd %p:d%d:i%d (%.*s), pwdmnt %p:%d\n", save, current, current->fs, current->fs->pwd, atomic_read(¤t->fs->pwd->d_count), atomic_read(¤t->fs->pwd->d_inode->i_count), @@ -99,7 +99,7 @@ void push_ctxt(struct obd_run_ctxt *save, struct obd_run_ctxt *new_ctx, /* CDEBUG(D_INFO, - "= push %p->%p = cur fs %p pwd %p:d%d:i%d (%*s), pwdmnt %p:%d\n", + "= push %p->%p = cur fs %p pwd %p:d%d:i%d (%.*s), pwdmnt %p:%d\n", new_ctx, current, current->fs, current->fs->pwd, atomic_read(¤t->fs->pwd->d_count), atomic_read(¤t->fs->pwd->d_inode->i_count), @@ -120,7 +120,7 @@ void pop_ctxt(struct obd_run_ctxt *saved, struct obd_run_ctxt *new_ctx, /* CDEBUG(D_INFO, - " = pop %p==%p = cur %p pwd %p:d%d:i%d (%*s), pwdmnt %p:%d\n", + " = pop %p==%p = cur %p pwd %p:d%d:i%d (%.*s), pwdmnt %p:%d\n", new_ctx, current, current->fs, current->fs->pwd, atomic_read(¤t->fs->pwd->d_count), atomic_read(¤t->fs->pwd->d_inode->i_count), @@ -148,7 +148,7 @@ void pop_ctxt(struct obd_run_ctxt *saved, struct obd_run_ctxt *new_ctx, /* CDEBUG(D_INFO, - "= pop %p->%p = cur fs %p pwd %p:d%d:i%d (%*s), pwdmnt %p:%d\n", + "= pop %p->%p = cur fs %p pwd %p:d%d:i%d (%.*s), pwdmnt %p:%d\n", saved, current, current->fs, current->fs->pwd, atomic_read(¤t->fs->pwd->d_count), atomic_read(¤t->fs->pwd->d_inode->i_count), @@ -167,7 +167,7 @@ struct dentry *simple_mknod(struct dentry *dir, char *name, int mode) ENTRY; ASSERT_KERNEL_CTXT("kernel doing mknod outside kernel context\n"); - CDEBUG(D_INODE, "creating file %*s\n", (int)strlen(name), name); + CDEBUG(D_INODE, "creating file %.*s\n", (int)strlen(name), name); dchild = ll_lookup_one_len(name, dir, strlen(name)); if (IS_ERR(dchild)) @@ -202,7 +202,7 @@ struct dentry *simple_mkdir(struct dentry *dir, char *name, int mode) ENTRY; ASSERT_KERNEL_CTXT("kernel doing mkdir outside kernel context\n"); - CDEBUG(D_INODE, "creating directory %*s\n", (int)strlen(name), name); + CDEBUG(D_INODE, "creating directory %.*s\n", (int)strlen(name), name); dchild = ll_lookup_one_len(name, dir, strlen(name)); if (IS_ERR(dchild)) GOTO(out_up, dchild); diff --git a/lustre/obdfilter/filter.c b/lustre/obdfilter/filter.c index 16cd144..7abe6a4 100644 --- a/lustre/obdfilter/filter.c +++ b/lustre/obdfilter/filter.c @@ -968,10 +968,14 @@ struct dentry *filter_fid2dentry(struct obd_device *obd, len = sprintf(name, LPU64, id); if (dir_dentry == NULL) { dparent = filter_parent_lock(obd, group, id); - if (IS_ERR(dparent)) + if (IS_ERR(dparent)) { + CERROR("%s: error getting object "LPU64":"LPU64 + " parent: rc %ld\n", obd->obd_name, + id, group, PTR_ERR(dparent)); RETURN(dparent); + } } - CDEBUG(D_INODE, "looking up object O/%*s/%s\n", + CDEBUG(D_INODE, "looking up object O/%.*s/%s\n", dparent->d_name.len, dparent->d_name.name, name); dchild = /*ll_*/lookup_one_len(name, dparent, len); if (dir_dentry == NULL) @@ -1029,7 +1033,7 @@ static int filter_destroy_internal(struct obd_device *obd, obd_id objid, ENTRY; if (inode->i_nlink != 1 || atomic_read(&inode->i_count) != 1) { - CERROR("destroying objid %*s nlink = %lu, count = %d\n", + CERROR("destroying objid %.*s nlink = %lu, count = %d\n", dchild->d_name.len, dchild->d_name.name, (unsigned long)inode->i_nlink, atomic_read(&inode->i_count)); @@ -1038,7 +1042,7 @@ static int filter_destroy_internal(struct obd_device *obd, obd_id objid, rc = vfs_unlink(dparent->d_inode, dchild); if (rc) - CERROR("error unlinking objid %*s: rc %d\n", + CERROR("error unlinking objid %.*s: rc %d\n", dchild->d_name.len, dchild->d_name.name, rc); RETURN(rc); @@ -1504,9 +1508,9 @@ static void filter_grant_discard(struct obd_export *exp) int level = D_CACHE; spin_lock(&obd->obd_osfs_lock); - spin_lock(&exp->exp_obd->obd_dev_lock); + spin_lock(&obd->obd_dev_lock); list_del_init(&exp->exp_obd_chain); - spin_unlock(&exp->exp_obd->obd_dev_lock); + spin_unlock(&obd->obd_dev_lock); if (fed->fed_dirty < 0 || fed->fed_grant < 0 || fed->fed_pending < 0) level = D_ERROR; @@ -1519,7 +1523,7 @@ static void filter_grant_discard(struct obd_export *exp) obd->obd_name, filter->fo_tot_granted, exp->exp_client_uuid.uuid, exp, fed->fed_grant); filter->fo_tot_granted -= fed->fed_grant; - LASSERTF(exp->exp_obd->u.filter.fo_tot_pending >= fed->fed_pending, + LASSERTF(filter->fo_tot_pending >= fed->fed_pending, "%s: tot_pending "LPU64" cli %s/%p fed_pending %ld\n", obd->obd_name, filter->fo_tot_pending, exp->exp_client_uuid.uuid, exp, fed->fed_pending); @@ -1863,6 +1867,37 @@ static int filter_should_precreate(struct obd_export *exp, struct obdo *oa, } } +static int filter_statfs(struct obd_device *obd, struct obd_statfs *osfs, + unsigned long max_age) +{ + struct filter_obd *filter = &obd->u.filter; + int blockbits = filter->fo_sb->s_blocksize_bits; + int rc; + ENTRY; + + /* at least try to account for cached pages. its still racey and + * might be under-reporting if clients haven't announced their + * caches with brw recently */ + spin_lock(&obd->obd_osfs_lock); + rc = fsfilt_statfs(obd, filter->fo_sb, max_age); + memcpy(osfs, &obd->obd_osfs, sizeof(*osfs)); + spin_unlock(&obd->obd_osfs_lock); + + CDEBUG(D_SUPER | D_CACHE, "blocks cached "LPU64" granted "LPU64 + " pending "LPU64" free "LPU64" avail "LPU64"\n", + filter->fo_tot_dirty, filter->fo_tot_granted, + filter->fo_tot_pending, + osfs->os_bfree << blockbits, osfs->os_bavail << blockbits); + + filter_grant_sanity_check(obd, __FUNCTION__); + + osfs->os_bavail -= min(osfs->os_bavail, + (filter->fo_tot_dirty + filter->fo_tot_pending + + osfs->os_bsize -1) >> blockbits); + + RETURN(rc); +} + /* We rely on the fact that only one thread will be creating files in a given * group at a time, which is why we don't need an atomic filter_get_new_id. * Even if we had that atomic function, the following race would exist: @@ -1877,6 +1912,7 @@ static int filter_precreate(struct obd_device *obd, struct obdo *oa, { struct dentry *dchild = NULL, *dparent = NULL; struct filter_obd *filter; + struct obd_statfs *osfs; int err = 0, rc = 0, recreate_obj = 0, i; __u64 next_id; void *handle = NULL; @@ -1887,6 +1923,21 @@ static int filter_precreate(struct obd_device *obd, struct obdo *oa, if ((oa->o_valid & OBD_MD_FLFLAGS) && (oa->o_flags & OBD_FL_RECREATE_OBJS)) { recreate_obj = 1; + } else { + OBD_ALLOC(osfs, sizeof(*osfs)); + if(osfs == NULL) + RETURN(-ENOMEM); + rc = filter_statfs(obd, osfs, jiffies-HZ); + if(rc == 0 && osfs->os_bavail < (osfs->os_blocks >> 10)) { + CDEBUG(D_HA, "This OST has not enough space! avail "LPU64"\n", + osfs->os_bavail << filter->fo_sb->s_blocksize_bits); + *num=0; + rc = -ENOSPC; + } + OBD_FREE(osfs, sizeof(*osfs)); + if (rc) { + RETURN(rc); + } } CDEBUG(D_HA, "%s: precreating %d objects\n", obd->obd_name, *num); @@ -1933,11 +1984,11 @@ static int filter_precreate(struct obd_device *obd, struct obdo *oa, * already exists */ if (recreate_obj) { - CERROR("%s: recreating existing object %*s?\n", + CERROR("%s: recreating existing object %.*s?\n", obd->obd_name, dchild->d_name.len, dchild->d_name.name); } else { - CERROR("%s: Serious error: objid %*s already " + CERROR("%s: Serious error: objid %.*s already " "exists; is this filesystem corrupt?\n", obd->obd_name, dchild->d_name.len, dchild->d_name.name); @@ -2040,7 +2091,7 @@ static int filter_create(struct obd_export *exp, struct obdo *oa, if (diff > 0) { oa->o_id = filter_last_id(&obd->u.filter, oa); rc = filter_precreate(obd, oa, group, &diff); - oa->o_id += diff; + oa->o_id = filter_last_id(&obd->u.filter, oa); oa->o_valid = OBD_MD_FLID; } } @@ -2239,37 +2290,6 @@ static int filter_sync(struct obd_export *exp, struct obdo *oa, RETURN(rc); } -static int filter_statfs(struct obd_device *obd, struct obd_statfs *osfs, - unsigned long max_age) -{ - struct filter_obd *filter = &obd->u.filter; - int blockbits = filter->fo_sb->s_blocksize_bits; - int rc; - ENTRY; - - /* at least try to account for cached pages. its still racey and - * might be under-reporting if clients haven't announced their - * caches with brw recently */ - spin_lock(&obd->obd_osfs_lock); - rc = fsfilt_statfs(obd, filter->fo_sb, max_age); - memcpy(osfs, &obd->obd_osfs, sizeof(*osfs)); - spin_unlock(&obd->obd_osfs_lock); - - CDEBUG(D_SUPER | D_CACHE, "blocks cached "LPU64" granted "LPU64 - " pending "LPU64" free "LPU64" avail "LPU64"\n", - filter->fo_tot_dirty, filter->fo_tot_granted, - filter->fo_tot_pending, - osfs->os_bfree << blockbits, osfs->os_bavail << blockbits); - - filter_grant_sanity_check(obd, __FUNCTION__); - - osfs->os_bavail -= min(osfs->os_bavail, - (filter->fo_tot_dirty + filter->fo_tot_pending + - osfs->os_bsize -1) >> blockbits); - - RETURN(rc); -} - static int filter_get_info(struct obd_export *exp, __u32 keylen, void *key, __u32 *vallen, void *val) { @@ -2331,7 +2351,8 @@ static int filter_set_info(struct obd_export *exp, __u32 keylen, memcmp(key, "mds_conn", keylen) != 0) RETURN(-EINVAL); - CWARN("Received MDS connection ("LPX64")\n", conn.cookie); + CWARN("%s: received MDS connection ("LPX64")\n", + obd->obd_name, conn.cookie); memcpy(&obd->u.filter.fo_mdc_conn, &conn, sizeof(conn)); ctxt = llog_get_context(obd, LLOG_UNLINK_REPL_CTXT); rc = llog_receptor_accept(ctxt, exp->exp_imp_reverse); diff --git a/lustre/obdfilter/filter_internal.h b/lustre/obdfilter/filter_internal.h index a0be7f3..d3d1a77 100644 --- a/lustre/obdfilter/filter_internal.h +++ b/lustre/obdfilter/filter_internal.h @@ -14,6 +14,7 @@ # include #endif #include +#include #include #define FILTER_LAYOUT_VERSION "2" diff --git a/lustre/obdfilter/filter_io.c b/lustre/obdfilter/filter_io.c index bed3213..43d0ed7 100644 --- a/lustre/obdfilter/filter_io.c +++ b/lustre/obdfilter/filter_io.c @@ -598,9 +598,14 @@ static int filter_preprw_write(int cmd, struct obd_export *exp, struct obdo *oa, rc = filter_grant_check(exp, objcount, &fso, niocount, nb, res, &left, dentry->d_inode); + + /* We're finishing using body->oa as an input variable, so reset + * o_valid here. */ if (oa && oa->o_valid & OBD_MD_FLGRANT) oa->o_grant = filter_grant(exp,oa->o_grant,oa->o_undirty,left); + oa->o_valid = 0; + spin_unlock(&exp->exp_obd->obd_osfs_lock); if (rc) { @@ -612,7 +617,7 @@ static int filter_preprw_write(int cmd, struct obd_export *exp, struct obdo *oa, i++, lnb++, rnb++) { /* We still set up for ungranted pages so that granted pages * can be written to disk as they were promised, and portals - * needs to keep the pages all aligned properly. */ + * needs to keep the pages all aligned properly. */ lnb->dentry = dentry; lnb->offset = rnb->offset; lnb->len = rnb->len; diff --git a/lustre/obdfilter/filter_lvb.c b/lustre/obdfilter/filter_lvb.c index bba72c7..41d42f2 100644 --- a/lustre/obdfilter/filter_lvb.c +++ b/lustre/obdfilter/filter_lvb.c @@ -113,7 +113,7 @@ static int filter_lvbo_update(struct ldlm_resource *res, struct lustre_msg *m, RETURN(0); down(&res->lr_lvb_sem); - if (!res->lr_lvb_data) { + if (lvb == NULL) { CERROR("No lvb when running lvbo_update!\n"); GOTO(out, rc = 0); } @@ -141,13 +141,18 @@ static int filter_lvbo_update(struct ldlm_resource *res, struct lustre_msg *m, lvb->lvb_mtime, new->lvb_mtime); lvb->lvb_mtime = new->lvb_mtime; } - if (new->lvb_blocks > lvb->lvb_blocks || !increase) { - CDEBUG(D_DLMTRACE, "res: "LPU64" updating lvb blocks: " + if (new->lvb_atime > lvb->lvb_atime || !increase) { + CDEBUG(D_DLMTRACE, "res: "LPU64" updating lvb atime: " LPU64" -> "LPU64"\n", res->lr_name.name[0], - lvb->lvb_blocks, new->lvb_blocks); - lvb->lvb_blocks = new->lvb_blocks; + lvb->lvb_atime, new->lvb_atime); + lvb->lvb_atime = new->lvb_atime; + } + if (new->lvb_ctime > lvb->lvb_ctime || !increase) { + CDEBUG(D_DLMTRACE, "res: "LPU64" updating lvb ctime: " + LPU64" -> "LPU64"\n", res->lr_name.name[0], + lvb->lvb_ctime, new->lvb_ctime); + lvb->lvb_ctime = new->lvb_ctime; } - GOTO(out, rc = 0); } /* Update the LVB from the disk inode */ @@ -174,6 +179,18 @@ static int filter_lvbo_update(struct ldlm_resource *res, struct lustre_msg *m, lvb->lvb_mtime, LTIME_S(dentry->d_inode->i_mtime)); lvb->lvb_mtime = LTIME_S(dentry->d_inode->i_mtime); } + if (LTIME_S(dentry->d_inode->i_atime) > lvb->lvb_atime || !increase) { + CDEBUG(D_DLMTRACE, "res: "LPU64" updating lvb atime from disk: " + LPU64" -> %lu\n", res->lr_name.name[0], + lvb->lvb_atime, LTIME_S(dentry->d_inode->i_atime)); + lvb->lvb_atime = LTIME_S(dentry->d_inode->i_atime); + } + if (LTIME_S(dentry->d_inode->i_ctime) > lvb->lvb_ctime || !increase) { + CDEBUG(D_DLMTRACE, "res: "LPU64" updating lvb ctime from disk: " + LPU64" -> %lu\n", res->lr_name.name[0], + lvb->lvb_ctime, LTIME_S(dentry->d_inode->i_ctime)); + lvb->lvb_ctime = LTIME_S(dentry->d_inode->i_ctime); + } CDEBUG(D_DLMTRACE, "res: "LPU64" updating lvb blocks from disk: " LPU64" -> %lu\n", res->lr_name.name[0], lvb->lvb_blocks, dentry->d_inode->i_blocks); diff --git a/lustre/osc/osc_create.c b/lustre/osc/osc_create.c index b6d6701..0c98003 100644 --- a/lustre/osc/osc_create.c +++ b/lustre/osc/osc_create.c @@ -56,8 +56,7 @@ #include #include "osc_internal.h" -static int osc_interpret_create(struct ptlrpc_request *req, void *data, - int rc) +static int osc_interpret_create(struct ptlrpc_request *req, void *data, int rc) { struct osc_creator *oscc; struct ost_body *body = NULL; @@ -73,11 +72,11 @@ static int osc_interpret_create(struct ptlrpc_request *req, void *data, oscc = req->rq_async_args.pointer_arg[0]; spin_lock(&oscc->oscc_lock); oscc->oscc_flags &= ~OSCC_FLAG_CREATING; - if (body) - oscc->oscc_last_id = body->oa.o_id; - if (rc == -ENOSPC) { + if (rc == -ENOSPC || rc == -EROFS) { DEBUG_REQ(D_INODE, req, "OST out of space, flagging"); oscc->oscc_flags |= OSCC_FLAG_NOSPC; + if (body && rc == -ENOSPC) + oscc->oscc_last_id = body->oa.o_id; spin_unlock(&oscc->oscc_lock); } else if (rc != 0 && rc != -EIO) { DEBUG_REQ(D_ERROR, req, @@ -87,8 +86,11 @@ static int osc_interpret_create(struct ptlrpc_request *req, void *data, spin_unlock(&oscc->oscc_lock); ptlrpc_fail_import(req->rq_import, req->rq_import_generation); } else { - if (rc == 0) + if (rc == 0) { oscc->oscc_flags &= ~OSCC_FLAG_LOW; + if (body) + oscc->oscc_last_id = body->oa.o_id; + } spin_unlock(&oscc->oscc_lock); } @@ -116,8 +118,8 @@ static int oscc_internal_create(struct osc_creator *oscc) oscc->oscc_grow_count *= 2; } - if (oscc->oscc_grow_count > OST_MAX_PRECREATE) - oscc->oscc_grow_count = OST_MAX_PRECREATE; + if (oscc->oscc_grow_count > OST_MAX_PRECREATE / 2) + oscc->oscc_grow_count = OST_MAX_PRECREATE / 2; if (oscc->oscc_flags & OSCC_FLAG_CREATING || oscc->oscc_flags & OSCC_FLAG_RECOVERING) { @@ -252,7 +254,7 @@ int osc_create(struct obd_export *exp, struct obdo *oa, } oscc->oscc_flags |= OSCC_FLAG_SYNC_IN_PROGRESS; CDEBUG(D_HA, "%s: oscc recovery started\n", - exp->exp_obd->obd_name); + oscc->oscc_obd->obd_name); spin_unlock(&oscc->oscc_lock); /* delete from next_id on up */ @@ -260,7 +262,7 @@ int osc_create(struct obd_export *exp, struct obdo *oa, oa->o_id = oscc->oscc_next_id - 1; CDEBUG(D_HA, "%s: deleting to next_id: "LPU64"\n", - exp->exp_obd->obd_name, oa->o_id); + oscc->oscc_obd->obd_name, oa->o_id); rc = osc_real_create(exp, oa, ea, NULL); @@ -272,11 +274,11 @@ int osc_create(struct obd_export *exp, struct obdo *oa, oscc->oscc_flags &= ~OSCC_FLAG_RECOVERING; oscc->oscc_last_id = oa->o_id; CDEBUG(D_HA, "%s: oscc recovery finished: %d\n", - exp->exp_obd->obd_name, rc); + oscc->oscc_obd->obd_name, rc); wake_up(&oscc->oscc_waitq); } else { CDEBUG(D_ERROR, "%s: oscc recovery failed: %d\n", - exp->exp_obd->obd_name, rc); + oscc->oscc_obd->obd_name, rc); } spin_unlock(&oscc->oscc_lock); @@ -314,6 +316,11 @@ int osc_create(struct obd_export *exp, struct obdo *oa, } spin_lock(&oscc->oscc_lock); + if (oscc->oscc_flags & OSCC_FLAG_EXITING) { + spin_unlock(&oscc->oscc_lock); + break; + } + if (oscc->oscc_last_id >= oscc->oscc_next_id) { memcpy(oa, &oscc->oscc_oa, sizeof(*oa)); oa->o_id = oscc->oscc_next_id; diff --git a/lustre/osc/osc_internal.h b/lustre/osc/osc_internal.h index fa9d933..f7ac79a 100644 --- a/lustre/osc/osc_internal.h +++ b/lustre/osc/osc_internal.h @@ -49,6 +49,7 @@ struct osc_cache_waiter { #define OSCC_FLAG_NOSPC 0x04 /* can't create more objects on OST */ #define OSCC_FLAG_SYNC_IN_PROGRESS 0x08 /* only allow one thread to sync */ #define OSCC_FLAG_LOW 0x10 +#define OSCC_FLAG_EXITING 0x20 int osc_create(struct obd_export *exp, struct obdo *oa, struct lov_stripe_md **ea, struct obd_trans_info *oti); diff --git a/lustre/osc/osc_request.c b/lustre/osc/osc_request.c index dab3947..5986208 100644 --- a/lustre/osc/osc_request.c +++ b/lustre/osc/osc_request.c @@ -485,6 +485,8 @@ static int osc_destroy(struct obd_export *exp, struct obdo *oa, request->rq_replen = lustre_msg_size(1, &size); rc = ptlrpc_queue_wait(request); + if (rc == -ENOENT) + rc = 0; if (rc) GOTO(out, rc); @@ -2350,6 +2352,8 @@ static void osc_set_data_with_check(struct lustre_handle *lockh, void *data) if (lock->l_ast_data && lock->l_ast_data != data) { struct inode *new_inode = data; struct inode *old_inode = lock->l_ast_data; + if (!(old_inode->i_state & I_FREEING)) + LDLM_ERROR(lock, "inconsistent l_ast_data found"); LASSERTF(old_inode->i_state & I_FREEING, "Found existing inode %p/%lu/%u state %lu in lock: " "setting data to %p/%lu/%u\n", old_inode, @@ -2989,11 +2993,17 @@ int osc_setup(struct obd_device *obd, obd_count len, void *buf) int osc_cleanup(struct obd_device *obd, int flags) { + struct osc_creator *oscc = &obd->u.cli.cl_oscc; int rc; ptlrpc_lprocfs_unregister_obd(obd); lprocfs_obd_cleanup(obd); + spin_lock(&oscc->oscc_lock); + oscc->oscc_flags &= ~OSCC_FLAG_RECOVERING; + oscc->oscc_flags |= OSCC_FLAG_EXITING; + spin_unlock(&oscc->oscc_lock); + rc = client_obd_cleanup(obd, flags); ptlrpcd_decref(); RETURN(rc); diff --git a/lustre/ost/ost_handler.c b/lustre/ost/ost_handler.c index 9ca00f3..0cd70f9 100644 --- a/lustre/ost/ost_handler.c +++ b/lustre/ost/ost_handler.c @@ -428,6 +428,9 @@ static int ost_brw_read(struct ptlrpc_request *req) if (rc != 0) GOTO(out_bulk, rc); + /* We're finishing using body->oa as an input variable */ + body->oa.o_valid = 0; + nob = 0; for (i = 0; i < npages; i++) { int page_rc = local_nb[i].rc; @@ -912,25 +915,22 @@ static int ost_handle(struct ptlrpc_request *req) struct obd_trans_info trans_info = { 0, }; struct obd_trans_info *oti = &trans_info; int should_process, fail = OBD_FAIL_OST_ALL_REPLY_NET, rc = 0; - struct obd_export *exp = NULL; + struct obd_device *obd = NULL; ENTRY; LASSERT(current->journal_info == NULL); /* XXX identical to MDS */ if (req->rq_reqmsg->opc != OST_CONNECT) { - struct obd_device *obd; int abort_recovery, recovering; - exp = req->rq_export; - - if (exp == NULL) { + if (req->rq_export == NULL) { CDEBUG(D_HA, "operation %d on unconnected OST\n", req->rq_reqmsg->opc); req->rq_status = -ENOTCONN; GOTO(out, rc = -ENOTCONN); } - obd = exp->exp_obd; + obd = req->rq_export->exp_obd; /* Check for aborted recovery. */ spin_lock_bh(&obd->obd_processing_task_lock); @@ -954,6 +954,8 @@ static int ost_handle(struct ptlrpc_request *req) CDEBUG(D_INODE, "connect\n"); OBD_FAIL_RETURN(OBD_FAIL_OST_CONNECT_NET, 0); rc = target_handle_connect(req, ost_handle); + if (!rc) + obd = req->rq_export->exp_obd; break; } case OST_DISCONNECT: @@ -968,24 +970,24 @@ static int ost_handle(struct ptlrpc_request *req) GOTO(out, rc = -ENOSPC); if (OBD_FAIL_CHECK_ONCE(OBD_FAIL_OST_EROFS)) GOTO(out, rc = -EROFS); - rc = ost_create(exp, req, oti); + rc = ost_create(req->rq_export, req, oti); break; case OST_DESTROY: CDEBUG(D_INODE, "destroy\n"); OBD_FAIL_RETURN(OBD_FAIL_OST_DESTROY_NET, 0); if (OBD_FAIL_CHECK_ONCE(OBD_FAIL_OST_EROFS)) GOTO(out, rc = -EROFS); - rc = ost_destroy(exp, req, oti); + rc = ost_destroy(req->rq_export, req, oti); break; case OST_GETATTR: CDEBUG(D_INODE, "getattr\n"); OBD_FAIL_RETURN(OBD_FAIL_OST_GETATTR_NET, 0); - rc = ost_getattr(exp, req); + rc = ost_getattr(req->rq_export, req); break; case OST_SETATTR: CDEBUG(D_INODE, "setattr\n"); OBD_FAIL_RETURN(OBD_FAIL_OST_SETATTR_NET, 0); - rc = ost_setattr(exp, req, oti); + rc = ost_setattr(req->rq_export, req, oti); break; case OST_WRITE: CDEBUG(D_INODE, "write\n"); @@ -1022,7 +1024,7 @@ static int ost_handle(struct ptlrpc_request *req) OBD_FAIL_RETURN(OBD_FAIL_OST_PUNCH_NET, 0); if (OBD_FAIL_CHECK_ONCE(OBD_FAIL_OST_EROFS)) GOTO(out, rc = -EROFS); - rc = ost_punch(exp, req, oti); + rc = ost_punch(req->rq_export, req, oti); break; case OST_STATFS: CDEBUG(D_INODE, "statfs\n"); @@ -1032,15 +1034,15 @@ static int ost_handle(struct ptlrpc_request *req) case OST_SYNC: CDEBUG(D_INODE, "sync\n"); OBD_FAIL_RETURN(OBD_FAIL_OST_SYNC_NET, 0); - rc = ost_sync(exp, req); + rc = ost_sync(req->rq_export, req); break; case OST_SET_INFO: DEBUG_REQ(D_INODE, req, "set_info"); - rc = ost_set_info(exp, req); + rc = ost_set_info(req->rq_export, req); break; case OST_GET_INFO: DEBUG_REQ(D_INODE, req, "get_info"); - rc = ost_get_info(exp, req); + rc = ost_get_info(req->rq_export, req); break; case OBD_PING: DEBUG_REQ(D_INODE, req, "ping"); @@ -1099,7 +1101,6 @@ static int ost_handle(struct ptlrpc_request *req) EXIT; /* If we're DISCONNECTing, the export_data is already freed */ if (!rc && req->rq_reqmsg->opc != OST_DISCONNECT) { - struct obd_device *obd = req->rq_export->exp_obd; if (!obd->obd_no_transno) { req->rq_repmsg->last_committed = obd->obd_last_committed; @@ -1113,8 +1114,6 @@ static int ost_handle(struct ptlrpc_request *req) out: if (lustre_msg_get_flags(req->rq_reqmsg) & MSG_LAST_REPLAY) { - struct obd_device *obd = req->rq_export->exp_obd; - if (obd && obd->obd_recovering) { DEBUG_REQ(D_HA, req, "LAST_REPLAY, queuing reply"); return target_queue_final_reply(req, rc); diff --git a/lustre/portals/include/linux/kp30.h b/lustre/portals/include/linux/kp30.h index 4a88b88..b5f1041 100644 --- a/lustre/portals/include/linux/kp30.h +++ b/lustre/portals/include/linux/kp30.h @@ -321,6 +321,11 @@ void portals_debug_dumplog(void); printf("%02x:%06x (@%lu %s:%s,l. %d %d %lu): " format, \ (subsys), (mask), (long)time(0), file, fn, line, \ getpid() , stack, ## a); + +#undef CWARN +#undef CERROR +#define CWARN(format, a...) CDEBUG(D_WARNING, format, ## a) +#define CERROR(format, a...) CDEBUG(D_ERROR, format, ## a) #endif /* support decl needed both by kernel and liblustre */ diff --git a/lustre/portals/include/linux/libcfs.h b/lustre/portals/include/linux/libcfs.h index cad7a69..301dca1 100644 --- a/lustre/portals/include/linux/libcfs.h +++ b/lustre/portals/include/linux/libcfs.h @@ -19,7 +19,6 @@ extern unsigned int portal_subsystem_debug; extern unsigned int portal_stack; extern unsigned int portal_debug; extern unsigned int portal_printk; -extern unsigned int portal_cerror; #include struct ptldebug_header { @@ -131,8 +130,6 @@ struct ptldebug_header { #if 1 #define CDEBUG(mask, format, a...) \ do { \ - if (portal_cerror == 0) \ - break; \ CHECK_STACK(CDEBUG_STACK); \ if (((mask) & (D_ERROR | D_EMERG | D_WARNING)) || \ (portal_debug & (mask) && \ @@ -142,8 +139,40 @@ do { \ CDEBUG_STACK, format, ## a); \ } while (0) -#define CWARN(format, a...) CDEBUG(D_WARNING, format, ## a) -#define CERROR(format, a...) CDEBUG(D_ERROR, format, ## a) +#define CDEBUG_MAX_LIMIT 600 +#define CDEBUG_LIMIT(cdebug_mask, cdebug_format, a...) \ +do { \ + static unsigned long cdebug_next; \ + static int cdebug_count, cdebug_delay = 1; \ + \ + CHECK_STACK(CDEBUG_STACK); \ + if (time_after(jiffies, cdebug_next)) { \ + portals_debug_msg(DEBUG_SUBSYSTEM, cdebug_mask, __FILE__, \ + __FUNCTION__, __LINE__, CDEBUG_STACK, \ + cdebug_format, ## a); \ + if (cdebug_count) { \ + portals_debug_msg(DEBUG_SUBSYSTEM, cdebug_mask, \ + __FILE__, __FUNCTION__, __LINE__, \ + 0, cdebug_format, ## a); \ + cdebug_count = 0; \ + } \ + if (time_after(jiffies, cdebug_next+(CDEBUG_MAX_LIMIT+10)*HZ))\ + cdebug_delay = cdebug_delay > 8 ? cdebug_delay/8 : 1; \ + else \ + cdebug_delay = cdebug_delay*2 >= CDEBUG_MAX_LIMIT*HZ? \ + CDEBUG_MAX_LIMIT * HZ : cdebug_delay*2; \ + cdebug_next = jiffies + cdebug_delay; \ + } else { \ + portals_debug_msg(DEBUG_SUBSYSTEM, \ + portal_debug & ~(D_EMERG|D_ERROR|D_WARNING),\ + __FILE__, __FUNCTION__, __LINE__, \ + CDEBUG_STACK, cdebug_format, ## a); \ + cdebug_count++; \ + } \ +} while (0) + +#define CWARN(format, a...) CDEBUG_LIMIT(D_WARNING, format, ## a) +#define CERROR(format, a...) CDEBUG_LIMIT(D_ERROR, format, ## a) #define CEMERG(format, a...) CDEBUG(D_EMERG, format, ## a) #define GOTO(label, rc) \ diff --git a/lustre/portals/knals/socknal/socknal.c b/lustre/portals/knals/socknal/socknal.c index f17ac4b..bbe19cf 100644 --- a/lustre/portals/knals/socknal/socknal.c +++ b/lustre/portals/knals/socknal/socknal.c @@ -791,6 +791,9 @@ ksocknal_create_conn (ksock_route_t *route, struct socket *sock, } } + /* Give conn a ref on sock->file since we're going to return success */ + get_file(sock->file); + LASSERT (!peer->ksnp_closing); conn->ksnc_peer = peer; diff --git a/lustre/portals/knals/socknal/socknal_cb.c b/lustre/portals/knals/socknal/socknal_cb.c index d556aa6..f6ac855 100644 --- a/lustre/portals/knals/socknal/socknal_cb.c +++ b/lustre/portals/knals/socknal/socknal_cb.c @@ -2212,18 +2212,32 @@ ksocknal_setup_sock (struct socket *sock) return (0); } -int -ksocknal_connect_peer (ksock_route_t *route, int type) +static int +ksocknal_connect_sock(struct socket **sockp, int *may_retry, + ksock_route_t *route, int local_port) { - struct sockaddr_in peer_addr; - mm_segment_t oldmm = get_fs(); - struct timeval tv; - int fd; + struct sockaddr_in locaddr; + struct sockaddr_in srvaddr; struct socket *sock; int rc; - char ipbuf[PTL_NALFMT_SIZE]; + int option; + mm_segment_t oldmm = get_fs(); + struct timeval tv; + + memset(&locaddr, 0, sizeof(locaddr)); + locaddr.sin_family = AF_INET; + locaddr.sin_port = htons(local_port); + locaddr.sin_addr.s_addr = INADDR_ANY; + + memset (&srvaddr, 0, sizeof (srvaddr)); + srvaddr.sin_family = AF_INET; + srvaddr.sin_port = htons (route->ksnr_port); + srvaddr.sin_addr.s_addr = htonl (route->ksnr_ipaddr); + + *may_retry = 0; rc = sock_create (PF_INET, SOCK_STREAM, 0, &sock); + *sockp = sock; if (rc != 0) { CERROR ("Can't create autoconnect socket: %d\n", rc); return (rc); @@ -2233,17 +2247,23 @@ ksocknal_connect_peer (ksock_route_t *route, int type) * from userspace. And we actually need the sock->file refcounting * that this gives you :) */ - fd = sock_map_fd (sock); - if (fd < 0) { + rc = sock_map_fd (sock); + if (rc < 0) { sock_release (sock); - CERROR ("sock_map_fd error %d\n", fd); - return (fd); + CERROR ("sock_map_fd error %d\n", rc); + return (rc); } - /* NB the fd now owns the ref on sock->file */ + /* NB the file descriptor (rc) now owns the ref on sock->file */ LASSERT (sock->file != NULL); LASSERT (file_count(sock->file) == 1); + get_file(sock->file); /* extra ref makes sock->file */ + sys_close(rc); /* survive this close */ + + /* Still got a single ref on sock->file */ + LASSERT (file_count(sock->file) == 1); + /* Set the socket timeouts, so our connection attempt completes in * finite time */ tv.tv_sec = ksocknal_data.ksnd_io_timeout; @@ -2254,9 +2274,9 @@ ksocknal_connect_peer (ksock_route_t *route, int type) (char *)&tv, sizeof (tv)); set_fs (oldmm); if (rc != 0) { - CERROR ("Can't set send timeout %d: %d\n", + CERROR ("Can't set send timeout %d: %d\n", ksocknal_data.ksnd_io_timeout, rc); - goto out; + goto failed; } set_fs (KERNEL_DS); @@ -2266,25 +2286,21 @@ ksocknal_connect_peer (ksock_route_t *route, int type) if (rc != 0) { CERROR ("Can't set receive timeout %d: %d\n", ksocknal_data.ksnd_io_timeout, rc); - goto out; + goto failed; } - { - int option = 1; - - set_fs (KERNEL_DS); - rc = sock->ops->setsockopt (sock, SOL_TCP, TCP_NODELAY, - (char *)&option, sizeof (option)); - set_fs (oldmm); - if (rc != 0) { - CERROR ("Can't disable nagle: %d\n", rc); - goto out; - } + option = 1; + set_fs (KERNEL_DS); + rc = sock_setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, + (char *)&option, sizeof (option)); + set_fs (oldmm); + if (rc != 0) { + CERROR("Can't set SO_REUSEADDR for socket: %d\n", rc); + goto failed; } if (route->ksnr_buffer_size != 0) { - int option = route->ksnr_buffer_size; - + option = route->ksnr_buffer_size; set_fs (KERNEL_DS); rc = sock_setsockopt (sock, SOL_SOCKET, SO_SNDBUF, (char *)&option, sizeof (option)); @@ -2292,7 +2308,7 @@ ksocknal_connect_peer (ksock_route_t *route, int type) if (rc != 0) { CERROR ("Can't set send buffer %d: %d\n", route->ksnr_buffer_size, rc); - goto out; + goto failed; } set_fs (KERNEL_DS); @@ -2302,36 +2318,74 @@ ksocknal_connect_peer (ksock_route_t *route, int type) if (rc != 0) { CERROR ("Can't set receive buffer %d: %d\n", route->ksnr_buffer_size, rc); - goto out; + goto failed; } } - - memset (&peer_addr, 0, sizeof (peer_addr)); - peer_addr.sin_family = AF_INET; - peer_addr.sin_port = htons (route->ksnr_port); - peer_addr.sin_addr.s_addr = htonl (route->ksnr_ipaddr); - - rc = sock->ops->connect (sock, (struct sockaddr *)&peer_addr, - sizeof (peer_addr), sock->file->f_flags); + + rc = sock->ops->bind(sock, + (struct sockaddr *)&locaddr, sizeof(locaddr)); + if (rc == -EADDRINUSE) { + CDEBUG(D_NET, "Port %d already in use\n", local_port); + *may_retry = 1; + goto failed; + } if (rc != 0) { - CERROR ("Error %d connecting to "LPX64" %s\n", rc, - route->ksnr_peer->ksnp_nid, - portals_nid2str(SOCKNAL, - route->ksnr_peer->ksnp_nid, - ipbuf)); - goto out; + CERROR("Error trying to bind to reserved port %d: %d\n", + local_port, rc); + goto failed; } + + rc = sock->ops->connect(sock, + (struct sockaddr *)&srvaddr, sizeof(srvaddr), + sock->file->f_flags); + if (rc == 0) + return 0; + + /* EADDRNOTAVAIL probably means we're already connected to the same + * peer/port on the same local port on a differently typed + * connection. Let our caller retry with a different local + * port... */ + *may_retry = (rc == -EADDRNOTAVAIL); + + CDEBUG(*may_retry ? D_NET : D_ERROR, + "Error %d connecting to %u.%u.%u.%u/%d\n", rc, + HIPQUAD(route->ksnr_ipaddr), route->ksnr_port); + + failed: + fput(sock->file); + return rc; +} + +int +ksocknal_connect_peer (ksock_route_t *route, int type) +{ + struct socket *sock; + int rc; + int port; + int may_retry; - rc = ksocknal_create_conn (route, sock, route->ksnr_irq_affinity, type); - if (rc == 0) { - /* Take an extra ref on sock->file to compensate for the - * upcoming close which will lose fd's ref on it. */ - get_file (sock->file); + /* Iterate through reserved ports. When typed connections are + * used, we will need to bind to multiple ports, but we only know + * this at connect time. But, by that time we've already called + * bind() so we need a new socket. */ + + for (port = 1023; port > 512; --port) { + + rc = ksocknal_connect_sock(&sock, &may_retry, route, port); + + if (rc == 0) { + rc = ksocknal_create_conn(route, sock, + route->ksnr_irq_affinity, type); + fput(sock->file); + return rc; + } + + if (!may_retry) + return rc; } - out: - sys_close (fd); - return (rc); + CERROR("Out of ports trying to bind to a reserved port\n"); + return (-EADDRINUSE); } void diff --git a/lustre/portals/libcfs/debug.c b/lustre/portals/libcfs/debug.c index 0b55543..3e5531a 100644 --- a/lustre/portals/libcfs/debug.c +++ b/lustre/portals/libcfs/debug.c @@ -67,9 +67,6 @@ unsigned int portal_debug = (D_WARNING | D_DLMTRACE | D_ERROR | D_EMERG | D_HA | D_RPCTRACE | D_VFSTRACE); EXPORT_SYMBOL(portal_debug); -unsigned int portal_cerror = 1; -EXPORT_SYMBOL(portal_cerror); - unsigned int portal_printk; EXPORT_SYMBOL(portal_printk); @@ -100,6 +97,7 @@ int portals_do_debug_dumplog(void *arg) snprintf(debug_file_name, sizeof(debug_file_path) - 1, "%s.%ld.%ld", debug_file_path, CURRENT_SECONDS, (long)arg); + printk(KERN_ALERT "LustreError: dumping log to %s\n", debug_file_name); tracefile_dump_all_pages(debug_file_name); current->journal_info = journal_info; @@ -183,7 +181,7 @@ int portals_debug_clear_buffer(void) int portals_debug_mark_buffer(char *text) { CDEBUG(D_TRACE,"***************************************************\n"); - CWARN("DEBUG MARKER: %s\n", text); + CDEBUG(D_WARNING, "DEBUG MARKER: %s\n", text); CDEBUG(D_TRACE,"***************************************************\n"); return 0; diff --git a/lustre/portals/libcfs/module.c b/lustre/portals/libcfs/module.c index c510aa4..f1d086b 100644 --- a/lustre/portals/libcfs/module.c +++ b/lustre/portals/libcfs/module.c @@ -400,6 +400,8 @@ kportal_nal_cmd(struct portals_cfg *pcfg) CDEBUG(D_IOCTL, "calling handler nal: %d, cmd: %d\n", nal, pcfg->pcfg_command); rc = nal_cmd[nal].nch_handler(pcfg, nal_cmd[nal].nch_private); + } else { + CERROR("invalid nal: %d, cmd: %d\n", nal, pcfg->pcfg_command); } up(&nal_cmd_sem); RETURN(rc); diff --git a/lustre/portals/libcfs/proc.c b/lustre/portals/libcfs/proc.c index 8565939..f71d672 100644 --- a/lustre/portals/libcfs/proc.c +++ b/lustre/portals/libcfs/proc.c @@ -78,8 +78,6 @@ static struct ctl_table portals_table[PORTALS_PRIMARY_CTLCNT + 1] = { sizeof(int), 0644, NULL, &proc_dointvec}, {PSDEV_PRINTK, "printk", &portal_printk, sizeof(int), 0644, NULL, &proc_dointvec}, - {PSDEV_CONSOLE, "console", &portal_cerror, sizeof(int), 0644, NULL, - &proc_dointvec}, {PSDEV_DEBUG_PATH, "debug_path", debug_file_path, sizeof(debug_file_path), 0644, NULL, &proc_dostring, &sysctl_string}, {PSDEV_PORTALS_UPCALL, "upcall", portals_upcall, diff --git a/lustre/portals/libcfs/tracefile.c b/lustre/portals/libcfs/tracefile.c index 7d79635..cf196fb 100644 --- a/lustre/portals/libcfs/tracefile.c +++ b/lustre/portals/libcfs/tracefile.c @@ -126,7 +126,7 @@ static struct page *trace_get_page(struct trace_cpu_data *tcd, return NULL; } page->index = 0; - page->mapping = (void *)smp_processor_id(); + page->mapping = (void *)(long)smp_processor_id(); list_add_tail(&PAGE_LIST(page), &tcd->tcd_pages); tcd->tcd_cur_pages++; @@ -190,7 +190,7 @@ static void print_to_console(struct ptldebug_header *hdr, int mask, char *buf, ptype = KERN_INFO; } - printk("%s%s: %d:%d:(%s:%d:%s()) %*s", ptype, prefix, hdr->ph_pid, + printk("%s%s: %d:%d:(%s:%d:%s()) %.*s", ptype, prefix, hdr->ph_pid, hdr->ph_extern_pid, file, hdr->ph_line_num, fn, len, buf); } @@ -453,7 +453,8 @@ int tracefile_dump_all_pages(char *filename) filp = filp_open(filename, O_CREAT|O_EXCL|O_WRONLY, 0600); if (IS_ERR(filp)) { rc = PTR_ERR(filp); - printk(KERN_ERR "couldn't open %s: %d\n", filename, rc); + printk(KERN_ERR "LustreError: can't open %s for dump: rc %d\n", + filename, rc); goto out; } @@ -625,7 +626,7 @@ static int tracefiled(void *arg) LASSERT(page_count(page) > 0); rc = filp->f_op->write(filp, page_address(page), - page->index, &filp->f_pos); + page->index, &filp->f_pos); if (rc != page->index) { printk(KERN_WARNING "wanted to write %lu but " "wrote %d\n", page->index, rc); diff --git a/lustre/portals/unals/connection.c b/lustre/portals/unals/connection.c index ca6999a..7b4cecd 100644 --- a/lustre/portals/unals/connection.c +++ b/lustre/portals/unals/connection.c @@ -314,9 +314,16 @@ connection force_tcp_connection(manager m, { connection conn; struct sockaddr_in addr; + struct sockaddr_in locaddr; unsigned int id[2]; + struct timeval tv; + __u64 incarnation; - port = tcpnal_acceptor_port; + int fd; + int option; + int rc; + int rport; + ptl_nid_t peernid = PTL_NID_ANY; id[0] = ip; id[1] = port; @@ -324,51 +331,86 @@ connection force_tcp_connection(manager m, pthread_mutex_lock(&m->conn_lock); conn = hash_table_find(m->connections, id); - if (!conn) { - int fd; - int option; - ptl_nid_t peernid = PTL_NID_ANY; - - bzero((char *) &addr, sizeof(addr)); - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = htonl(ip); - addr.sin_port = htons(port); - - if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { - perror("tcpnal socket failed"); - exit(-1); - } - if (connect(fd, (struct sockaddr *)&addr, - sizeof(struct sockaddr_in))) { - perror("tcpnal connect"); - return(0); - } + if (conn) + goto out; + memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = htonl(ip); + addr.sin_port = htons(port); + + memset(&locaddr, 0, sizeof(locaddr)); + locaddr.sin_family = AF_INET; + locaddr.sin_addr.s_addr = INADDR_ANY; + + for (rport = IPPORT_RESERVED - 1; rport > IPPORT_RESERVED / 2; --rport) { + fd = socket(AF_INET, SOCK_STREAM, 0); + if (fd < 0) { + perror("tcpnal socket failed"); + goto out; + } + + option = 1; + rc = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, + &option, sizeof(option)); + if (rc != 0) { + perror ("Can't set SO_REUSEADDR for socket"); + close(fd); + goto out; + } + + locaddr.sin_port = htons(rport); + rc = bind(fd, (struct sockaddr *)&locaddr, sizeof(locaddr)); + if (rc == 0 || errno == EACCES) { + rc = connect(fd, (struct sockaddr *)&addr, + sizeof(struct sockaddr_in)); + if (rc == 0) { + break; + } else if (errno != EADDRINUSE) { + perror("Error connecting to remote host"); + close(fd); + goto out; + } + } else if (errno != EADDRINUSE) { + perror("Error binding to privileged port"); + close(fd); + goto out; + } + close(fd); + } + + if (rport == IPPORT_RESERVED / 2) { + fprintf(stderr, "Out of ports trying to bind to a reserved port\n"); + goto out; + } + #if 1 - option = 1; - setsockopt(fd, SOL_TCP, TCP_NODELAY, &option, sizeof(option)); - option = 1<<20; - setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &option, sizeof(option)); - option = 1<<20; - setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &option, sizeof(option)); + option = 1; + setsockopt(fd, SOL_TCP, TCP_NODELAY, &option, sizeof(option)); + option = 1<<20; + setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &option, sizeof(option)); + option = 1<<20; + setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &option, sizeof(option)); #endif - /* say hello */ - if (tcpnal_hello(fd, &peernid, SOCKNAL_CONN_ANY, 0)) - exit(-1); + gettimeofday(&tv, NULL); + incarnation = (((__u64)tv.tv_sec) * 1000000) + tv.tv_usec; - conn = allocate_connection(m, ip, port, fd); - - /* let nal thread know this event right away */ - if (conn) - procbridge_wakeup_nal(pb); - } + /* say hello */ + if (tcpnal_hello(fd, &peernid, SOCKNAL_CONN_ANY, incarnation)) + exit(-1); + + conn = allocate_connection(m, ip, port, fd); + + /* let nal thread know this event right away */ + if (conn) + procbridge_wakeup_nal(pb); +out: pthread_mutex_unlock(&m->conn_lock); return (conn); } - /* Function: bind_socket * Arguments: t: the nal state for this interface * port: the port to attempt to bind to diff --git a/lustre/portals/utils/acceptor.c b/lustre/portals/utils/acceptor.c index daed215..cff2235 100644 --- a/lustre/portals/utils/acceptor.c +++ b/lustre/portals/utils/acceptor.c @@ -145,7 +145,7 @@ show_connection (int fd, __u32 net_ip) void usage (char *myname) { - fprintf (stderr, "Usage: %s [-r recv_mem] [-s send_mem] [-n] [-N nal_id] port\n", myname); + fprintf (stderr, "Usage: %s [-r recv_mem] [-s send_mem] [-n] [-p] [-N nal_id] port\n", myname); exit (1); } @@ -159,9 +159,11 @@ int main(int argc, char **argv) int noclose = 0; int nonagle = 1; int nal = SOCKNAL; - int bind_irq = 0; + int bind_irq = 0; + int rport; + int require_privports = 1; - while ((c = getopt (argc, argv, "N:r:s:nli")) != -1) + while ((c = getopt (argc, argv, "N:pr:s:nli")) != -1) switch (c) { case 'r': @@ -185,7 +187,9 @@ int main(int argc, char **argv) case 'i': bind_irq = 1; break; - + case 'p': + require_privports = 0; + break; case 'N': if (parse_size(&nal, optarg) != 0 || nal < 0 || nal > NAL_MAX_NR) @@ -271,7 +275,7 @@ int main(int argc, char **argv) exit(1); } - rc = daemon(1, noclose); + rc = daemon(0, noclose); if (rc < 0) { perror("daemon(): "); exit(1); @@ -287,11 +291,12 @@ int main(int argc, char **argv) int cfd; struct portal_ioctl_data data; struct portals_cfg pcfg; + int privileged = 0; + char addrstr[INET_ADDRSTRLEN]; #ifdef HAVE_LIBWRAP struct request_info request; - char addrstr[INET_ADDRSTRLEN]; #endif - + cfd = accept(fd, (struct sockaddr *)&clntaddr, &len); if ( cfd < 0 ) { perror("accept"); @@ -299,6 +304,7 @@ int main(int argc, char **argv) continue; } + rport = ntohs(clntaddr.sin_port); #ifdef HAVE_LIBWRAP /* libwrap access control */ request_init(&request, RQ_DAEMON, "lustre", RQ_FILE, cfd, 0); @@ -307,11 +313,21 @@ int main(int argc, char **argv) inet_ntop(AF_INET, &clntaddr.sin_addr, addrstr, INET_ADDRSTRLEN); syslog(LOG_WARNING, "Unauthorized access from %s:%hd\n", - addrstr, ntohs(clntaddr.sin_port)); + addrstr, rport); close (cfd); continue; } #endif + + if (require_privports && rport >= IPPORT_RESERVED) { + inet_ntop(AF_INET, &clntaddr.sin_addr, + addrstr, INET_ADDRSTRLEN); + syslog(LOG_ERR, "Closing non-privileged connection from %s:%d\n", + addrstr, rport); + close(cfd); + continue; + } + show_connection (cfd, clntaddr.sin_addr.s_addr); PCFG_INIT(pcfg, NAL_CMD_REGISTER_PEER_FD); @@ -319,11 +335,11 @@ int main(int argc, char **argv) pcfg.pcfg_fd = cfd; pcfg.pcfg_flags = bind_irq; pcfg.pcfg_misc = SOCKNAL_CONN_NONE; /* == incoming connection */ - + PORTAL_IOC_INIT(data); data.ioc_pbuf1 = (char*)&pcfg; data.ioc_plen1 = sizeof(pcfg); - + if (ioctl(pfd, IOC_PORTAL_NAL_CMD, &data) < 0) { perror("ioctl failed"); } else { diff --git a/lustre/portals/utils/debug.c b/lustre/portals/utils/debug.c index dce196f..78d4eb6 100644 --- a/lustre/portals/utils/debug.c +++ b/lustre/portals/utils/debug.c @@ -452,6 +452,7 @@ int jt_dbg_debug_file(int argc, char **argv) return parse_buffer(in, out); } +const char debug_daemon_usage[]="usage: debug_daemon {start file [MB]|stop}\n"; int jt_dbg_debug_daemon(int argc, char **argv) { int i, rc, fd; @@ -459,8 +460,7 @@ int jt_dbg_debug_daemon(int argc, char **argv) struct portal_ioctl_data data; if (argc <= 1) { - fprintf(stderr, "usage: %s [start file <#MB>|stop|pause|" - "continue]\n", argv[0]); + fprintf(stderr, debug_daemon_usage); return 0; } @@ -473,8 +473,7 @@ int jt_dbg_debug_daemon(int argc, char **argv) if (strcasecmp(argv[1], "start") == 0) { if (argc != 3) { - fprintf(stderr, "usage: %s [start file|stop]\n", - argv[0]); + fprintf(stderr, debug_daemon_usage); return 1; } @@ -494,7 +493,7 @@ int jt_dbg_debug_daemon(int argc, char **argv) return 1; } } else { - fprintf(stderr, "usage: %s [start file|stop]\n", argv[0]); + fprintf(stderr, debug_daemon_usage); return 1; } diff --git a/lustre/portals/utils/portals.c b/lustre/portals/utils/portals.c index 9760984..6025ee6 100644 --- a/lustre/portals/utils/portals.c +++ b/lustre/portals/utils/portals.c @@ -61,7 +61,6 @@ unsigned int portal_debug; unsigned int portal_printk; unsigned int portal_stack; -unsigned int portal_cerror = 1; static unsigned int g_nal = 0; @@ -657,6 +656,7 @@ int jt_ptl_connect(int argc, char **argv) { struct portals_cfg pcfg; struct sockaddr_in srvaddr; + struct sockaddr_in locaddr; __u32 ipaddr; char *flag; int fd, rc; @@ -665,7 +665,7 @@ int jt_ptl_connect(int argc, char **argv) int txmem = 0; int bind_irq = 0; int type = SOCKNAL_CONN_ANY; - int port; + int port, rport; int o; int olen; @@ -726,45 +726,76 @@ int jt_ptl_connect(int argc, char **argv) return (-1); } + memset(&locaddr, 0, sizeof(locaddr)); + locaddr.sin_family = AF_INET; + locaddr.sin_addr.s_addr = INADDR_ANY; + memset(&srvaddr, 0, sizeof(srvaddr)); srvaddr.sin_family = AF_INET; srvaddr.sin_port = htons(port); srvaddr.sin_addr.s_addr = htonl(ipaddr); - fd = socket(PF_INET, SOCK_STREAM, 0); - if ( fd < 0 ) { - fprintf(stderr, "socket() failed: %s\n", strerror(errno)); - return -1; - } + for (rport = IPPORT_RESERVED - 1; rport > IPPORT_RESERVED / 2; --rport) { + fd = socket(PF_INET, SOCK_STREAM, 0); + if ( fd < 0 ) { + fprintf(stderr, "socket() failed: %s\n", strerror(errno)); + return -1; + } - if (g_socket_nonagle) - { o = 1; - if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &o, sizeof (o)) != 0) { - fprintf(stderr, "cannot disable nagle: %s\n", strerror(errno)); - return (-1); + rc = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, + &o, sizeof(o)); + + if (g_socket_nonagle) { + o = 1; + rc = setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &o, sizeof (o)); + if (rc != 0) { + fprintf(stderr, "cannot disable nagle: %s\n", + strerror(errno)); + return (-1); + } } - } - - if (g_socket_rxmem != 0) { - o = g_socket_rxmem; - if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &o, sizeof (o)) != 0) { - fprintf(stderr, "cannot set receive buffer size: %s\n", strerror(errno)); - return (-1); + + if (g_socket_rxmem != 0) { + o = g_socket_rxmem; + rc = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &o, sizeof (o)); + if (rc != 0) { + fprintf(stderr, "cannot set receive buffer size: %s\n", + strerror(errno)); + return (-1); + } } - } - - if (g_socket_txmem != 0) { - o = g_socket_txmem; - if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &o, sizeof (o)) != 0) { - fprintf(stderr, "cannot set send buffer size: %s\n", strerror(errno)); - return (-1); + + if (g_socket_txmem != 0) { + o = g_socket_txmem; + rc = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &o, sizeof (o)); + if (rc != 0) { + fprintf(stderr, "cannot set send buffer size: %s\n", strerror(errno)); + return (-1); + } + } + + locaddr.sin_port = htons(rport); + rc = bind(fd, (struct sockaddr *)&locaddr, sizeof(locaddr)); + if (rc == 0 || errno == EACCES) { + rc = connect(fd, (struct sockaddr *)&srvaddr, sizeof(srvaddr)); + if (rc == 0) { + break; + } else if (errno != EADDRINUSE) { + fprintf(stderr, "Error connecting to host: %s\n", strerror(errno)); + close(fd); + return -1; + } + } else if (errno != EADDRINUSE) { + fprintf(stderr, "Error binding to port %d: %d: %s\n", port, errno, strerror(errno)); + close(fd); + return -1; } } - rc = connect(fd, (struct sockaddr *)&srvaddr, sizeof(srvaddr)); - if ( rc == -1 ) { - fprintf(stderr, "connect() failed: %s\n", strerror(errno)); + if (rport == IPPORT_RESERVED / 2) { + fprintf(stderr, + "Warning: all privileged ports are in use.\n"); return -1; } diff --git a/lustre/ptlrpc/client.c b/lustre/ptlrpc/client.c index 1988d11..ac0f9ad 100644 --- a/lustre/ptlrpc/client.c +++ b/lustre/ptlrpc/client.c @@ -820,7 +820,8 @@ int ptlrpc_expire_one_request(struct ptlrpc_request *req) struct obd_import *imp = req->rq_import; ENTRY; - DEBUG_REQ(D_ERROR, req, "timeout (sent %lu)", (long)req->rq_sent); + DEBUG_REQ(D_ERROR, req, "timeout (sent at %lu, %lus ago)", + (long)req->rq_sent, LTIME_S(CURRENT_TIME) - req->rq_sent); spin_lock_irqsave (&req->rq_lock, flags); req->rq_timedout = 1; @@ -828,6 +829,9 @@ int ptlrpc_expire_one_request(struct ptlrpc_request *req) ptlrpc_unregister_reply (req); + if (obd_dump_on_timeout) + portals_debug_dumplog(); + if (req->rq_bulk != NULL) ptlrpc_unregister_bulk (req); @@ -842,7 +846,7 @@ int ptlrpc_expire_one_request(struct ptlrpc_request *req) /* If this request is for recovery or other primordial tasks, * then error it out here. */ - if (req->rq_send_state != LUSTRE_IMP_FULL || + if (req->rq_send_state != LUSTRE_IMP_FULL || imp->imp_obd->obd_no_recov) { spin_lock_irqsave (&req->rq_lock, flags); req->rq_status = -ETIMEDOUT; diff --git a/lustre/ptlrpc/import.c b/lustre/ptlrpc/import.c index 77ffc9f..4c30278 100644 --- a/lustre/ptlrpc/import.c +++ b/lustre/ptlrpc/import.c @@ -255,7 +255,7 @@ int ptlrpc_connect_import(struct obd_import *imp, char * new_uuid) if (imp->imp_remote_handle.cookie == 0) { initial_connect = 1; } else { - committed_before_reconnect = imp->imp_peer_committed_transno;; + committed_before_reconnect = imp->imp_peer_committed_transno; } spin_unlock_irqrestore(&imp->imp_lock, flags); diff --git a/lustre/ptlrpc/llog_server.c b/lustre/ptlrpc/llog_server.c index ed3b813..321d8e2 100644 --- a/lustre/ptlrpc/llog_server.c +++ b/lustre/ptlrpc/llog_server.c @@ -74,6 +74,7 @@ int llog_origin_handle_create(struct ptlrpc_request *req) CERROR("Can't unpack name\n"); GOTO(out, rc = -EFAULT); } + CDEBUG(D_INFO, "opening log %s\n", name); } ctxt = llog_get_context(obd, body->lgd_ctxt_idx); diff --git a/lustre/scripts/lmake b/lustre/scripts/lmake index c48fb1e..43986ba 100755 --- a/lustre/scripts/lmake +++ b/lustre/scripts/lmake @@ -315,7 +315,7 @@ depend_kernel() SYMLINKS="include/asm" ;; 2.4*) - SYMLINKS="symlinks" + SYMLINKS="symlinnks" ;; esac $MAKE $SYMLINKS diff --git a/lustre/scripts/lustre b/lustre/scripts/lustre index 017f3d5..a912f07 100755 --- a/lustre/scripts/lustre +++ b/lustre/scripts/lustre @@ -19,6 +19,7 @@ LOCK=/var/lock/subsys/$SERVICE : ${LCONF:=/usr/sbin/lconf} : ${LCONF_START_ARGS:="${LUSTRE_CONFIG_XML}"} : ${LCONF_STOP_ARGS:="--force --cleanup ${LUSTRE_CONFIG_XML}"} +: ${LCTL:=/usr/sbin/lctl} # Source function library. if [ -f /etc/init.d/functions ] ; then @@ -33,7 +34,9 @@ fi # Check that networking is up. [ "${NETWORKING}" = "no" ] && exit 0 -[ -x ${LCONF} -a -f ${LUSTRE_CONFIG_XML} ] || exit 0 +[ -x ${LCONF} -a -x ${LCTL} ] || exit 0 + +[ -f ${LUSTRE_CONFIG_XML} ] || ( echo "unconfigured" && exit 0 ) # Create /var/lustre directory # This is used by snmp agent for checking lustre services \ @@ -83,6 +86,19 @@ restart() { start } +status() { + ${LCTL} dl 2>/dev/null | while read INDEX STAT MODULE NAME; do + case $MODULE in + ost|mds|osc|mdc) + [ "`grep -v FULL /proc/fs/lustre/*c/*/*_server_uuid`" ] \ + && echo "recovery" || echo "running" + return + ;; + esac + done + echo "stopped" +} + # See how we were called. case "$1" in start) diff --git a/lustre/tests/Makefile.am b/lustre/tests/Makefile.am index 166755f..d359089 100644 --- a/lustre/tests/Makefile.am +++ b/lustre/tests/Makefile.am @@ -29,7 +29,6 @@ noinst_PROGRAMS += mmap_sanity bin_PROGRAMS = mcreate munlink endif # TESTS -mmap_sanity_SOURCES= mmap_sanity.c stat_SOURCES = stat.c stat_fs.h mkdirdeep_LDADD=-L$(top_builddir)/portals/utils -lptlctl $(LIBREADLINE) #write_append_truncate_CC=mpicc diff --git a/lustre/tests/conf-sanity.sh b/lustre/tests/conf-sanity.sh index 63c66bb..44a416f 100644 --- a/lustre/tests/conf-sanity.sh +++ b/lustre/tests/conf-sanity.sh @@ -209,7 +209,7 @@ test_5b() { [ -d $MOUNT ] || mkdir -p $MOUNT $LCONF --nosetup --node client_facet $XMLCONFIG > /dev/null - llmount $mds_HOST://mds_svc/client_facet $MOUNT && exit 1 + llmount -o nettype=$NETTYPE $mds_HOST://mds_svc/client_facet $MOUNT && exit 1 # cleanup client modules $LCONF --cleanup --nosetup --node client_facet $XMLCONFIG > /dev/null @@ -230,7 +230,7 @@ test_5c() { [ -d $MOUNT ] || mkdir -p $MOUNT $LCONF --nosetup --node client_facet $XMLCONFIG > /dev/null - llmount $mds_HOST://wrong_mds_svc/client_facet $MOUNT && return 1 + llmount -o nettype=$NETTYPE $mds_HOST://wrong_mds_svc/client_facet $MOUNT && return 1 # cleanup client modules $LCONF --cleanup --nosetup --node client_facet $XMLCONFIG > /dev/null @@ -251,7 +251,7 @@ test_5d() { [ -d $MOUNT ] || mkdir -p $MOUNT $LCONF --nosetup --node client_facet $XMLCONFIG > /dev/null - llmount $mds_HOST://mds_svc/client_facet $MOUNT || return 1 + llmount -o nettype=$NETTYPE $mds_HOST://mds_svc/client_facet $MOUNT || return 1 umount $MOUNT || return 2 # cleanup client modules diff --git a/lustre/tests/createmany.c b/lustre/tests/createmany.c index 1d62b20..1018ca5 100644 --- a/lustre/tests/createmany.c +++ b/lustre/tests/createmany.c @@ -14,14 +14,14 @@ void usage(char *prog) { - printf("usage: %s {-o|-m|-l} filenamefmt count\n", prog); - printf(" %s {-o|-m|-l} filenamefmt -seconds\n", prog); - printf(" %s {-o|-m|-l} filenamefmt start count\n", prog); + printf("usage: %s {-o|-m|-d|-l} filenamefmt count\n", prog); + printf(" %s {-o|-m|-d|-l} filenamefmt -seconds\n", prog); + printf(" %s {-o|-m|-d|-l} filenamefmt start count\n", prog); } int main(int argc, char ** argv) { - int i, rc = 0, do_open = 0, do_link = 0; + int i, rc = 0, do_open = 0, do_link = 0, do_mkdir = 0; char format[4096], *fmt, *tgt = NULL; char filename[4096]; long start, last, end; @@ -32,7 +32,9 @@ int main(int argc, char ** argv) return 1; } - if (strcmp(argv[1], "-o") == 0) { + if (strcmp(argv[1], "-d") == 0) { + do_mkdir = 1; + } else if (strcmp(argv[1], "-o") == 0) { do_open = 1; } else if (strncmp(argv[1], "-l", 2) == 0 && argv[1][2]) { tgt = argv[1] + 2; @@ -85,7 +87,15 @@ int main(int argc, char ** argv) rc = link(tgt, filename); if (rc) { printf("link(%s, %s) error: %s\n", - tgt, filename, strerror(errno)); + tgt, filename, strerror(errno)); + rc = errno; + break; + } + } else if (do_mkdir) { + rc = mkdir(filename, 0755); + if (rc) { + printf("mkdir(%s) error: %s\n", + filename, strerror(errno)); rc = errno; break; } diff --git a/lustre/tests/fsx.c b/lustre/tests/fsx.c index ead1c85..0e0d198 100644 --- a/lustre/tests/fsx.c +++ b/lustre/tests/fsx.c @@ -608,7 +608,7 @@ output_line(struct test_file *tf, int op, unsigned offset, (monitorend == -1 || offset <= monitorend))))))) return; - prt("%06lu %lu.%06lu %*s%-10s %#08x %s %#08x\t(0x%x bytes)\n", + prt("%06lu %lu.%06lu %.*s%-10s %#08x %s %#08x\t(0x%x bytes)\n", testcalls, tv->tv_sec, tv->tv_usec, max_tf_len, tf_num, ops[op], offset, op == OP_TRUNCATE ? " to " : "thru", diff --git a/lustre/tests/recovery-small.sh b/lustre/tests/recovery-small.sh index 4f6333b..db2b19f 100755 --- a/lustre/tests/recovery-small.sh +++ b/lustre/tests/recovery-small.sh @@ -70,15 +70,11 @@ if [ "$ONLY" == "cleanup" ]; then exit fi -if [ "$ONLY" == "cleanup" ]; then - sysctl -w portals.debug=0 || true - cleanup - exit -fi - REFORMAT=--reformat $SETUP unset REFORMAT +[ "$ONLY" == "setup" ] && exit + test_1() { drop_request "mcreate $MOUNT/1" || return 1 drop_reint_reply "mcreate $MOUNT/2" || return 2 diff --git a/lustre/tests/replay-dual.sh b/lustre/tests/replay-dual.sh index 8597d95..c313a98 100755 --- a/lustre/tests/replay-dual.sh +++ b/lustre/tests/replay-dual.sh @@ -292,9 +292,9 @@ test_14() { facet_failover mds # expect failover to fail df $MOUNT && return 1 + sleep 1 - # first 25 files shouuld have been - # replayed + # first 25 files should have been replayed unlinkmany $MOUNT1/$tfile- 25 || return 2 zconf_mount `hostname` $MOUNT2 @@ -366,7 +366,7 @@ test_18() { # bug 3822 - evicting client with enqueued lock mkdir -p $MOUNT1/$tdir touch $MOUNT1/$tdir/f0 #define OBD_FAIL_LDLM_ENQUEUE_BLOCKED 0x30b - statmany -s $MOUNT1/$tdir/f 500 & + statmany -s $MOUNT1/$tdir/f 1 500 & OPENPID=$! NOW=`date +%s` do_facet mds sysctl -w lustre.fail_loc=0x8000030b # hold enqueue @@ -379,6 +379,7 @@ test_18() { # bug 3822 - evicting client with enqueued lock wait $OPENPID dmesg | grep "entering recovery in server" && \ error "client not evicted" || true + set +vx } run_test 18 "ldlm_handle_enqueue succeeds on evicted export (3822)" diff --git a/lustre/tests/replay-single.sh b/lustre/tests/replay-single.sh index 252d825..9d40aea 100755 --- a/lustre/tests/replay-single.sh +++ b/lustre/tests/replay-single.sh @@ -894,6 +894,7 @@ test_45() { wait $pid || return 1 $LCTL --device $mdcdev activate + sleep 1 $CHECKSTAT -t file $DIR/$tfile || return 2 return 0 diff --git a/lustre/tests/runtests b/lustre/tests/runtests index 77635c3..f31295a 100755 --- a/lustre/tests/runtests +++ b/lustre/tests/runtests @@ -22,11 +22,11 @@ ERROR= SRC=/etc [ "$COUNT" ] || COUNT=1000 -[ "$LCONF" ] || LCONF=$SRCDIR/../utils/lconf +[ "$LCONF" ] || LCONF=lconf -[ "$MCREATE" ] || MCREATE=$SRCDIR/../tests/mcreate +[ "$MCREATE" ] || MCREATE=mcreate -[ "$MKDIRMANY" ] || MKDIRMANY=$SRCDIR/../tests/mkdirmany +[ "$MKDIRMANY" ] || MKDIRMANY="createmany -d" while [ "$1" ]; do case $1 in @@ -117,7 +117,7 @@ if [ $COUNT -gt 10 -o $COUNT -eq 0 ]; then fi # mkdirmany test (bug 589) -log "running mkdirmany $MOUNT/base$$ 100" +log "running $MKDIRMANY $MOUNT/base$$ 100" $MKDIRMANY $MOUNT/base$$ 100 || fail "mkdirmany failed" log "removing mkdirmany directories" rmdir $MOUNT/base$$* || fail "mkdirmany cleanup failed" diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index fc5ced6..b703291 100644 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -93,11 +93,12 @@ run_one() { if ! mount | grep -q $DIR; then $START fi - log "== test $1: $2= `date +%H:%M:%S`" + BEFORE=`date +%s` + log "== test $1: $2= `date +%H:%M:%S` ($BEFORE)" export TESTNAME=test_$1 test_$1 || error "test_$1: exit with rc=$?" unset TESTNAME - pass + pass "($((`date +%s` - $BEFORE))s)" cd $SAVE_PWD $CLEAN } @@ -161,7 +162,7 @@ error() { } pass() { - echo PASS + echo PASS $@ } MOUNT="`mount | awk '/^'$NAME' .* lustre_lite / { print $3 }'`" @@ -181,6 +182,8 @@ LOVNAME=`cat /proc/fs/lustre/llite/fs0/lov/common_name` OSTCOUNT=`cat /proc/fs/lustre/lov/$LOVNAME/numobd` STRIPECOUNT=`cat /proc/fs/lustre/lov/$LOVNAME/stripecount` STRIPESIZE=`cat /proc/fs/lustre/lov/$LOVNAME/stripesize` +ORIGFREE=`cat /proc/fs/lustre/lov/$LOVNAME/kbytesavail` +MAXFREE=${MAXFREE:-$((200000 * $OSTCOUNT))} [ -f $DIR/d52a/foo ] && chattr -a $DIR/d52a/foo [ -f $DIR/d52b/foo ] && chattr -i $DIR/d52b/foo @@ -874,6 +877,37 @@ test_27l() { } run_test 27l "check setstripe permissions (should return error)" +test_27m() { + [ "$OSTCOUNT" -lt "2" ] && echo "skipping out-of-space test on OST0" && return + if [ $ORIGFREE -gt $MAXFREE ]; then + echo "skipping out-of-space test on OST0" + return + fi + if [ ! -d $DIR/d27 ]; then + mkdir -p $DIR/d27 + fi + $LSTRIPE $DIR/d27/f27m_1 0 0 1 + dd if=/dev/zero of=$DIR/d27/f27m_1 bs=1024 count=$MAXFREE && \ + error "dd should fill OST0" + i=2 + while $LSTRIPE $DIR/d27/f27m_$i 0 0 1 ; do + i=`expr $i + 1` + if [ $i -gt 2000 ] ; then + break + fi + done + i=`expr $i + 1` + touch $DIR/d27/f27m_$i + [ `$LFIND $DIR/d27/f27m_$i | grep -A 10 obdidx | awk '{print $1}'| grep -w "0"` ] && \ + error "OST0 was full but new created file still use it" + i=`expr $i + 1` + touch $DIR/d27/f27m_$i + [ `$LFIND $DIR/d27/f27m_$i | grep -A 10 obdidx | awk '{print $1}'| grep -w "0"` ] && \ + error "OST0 was full but new created file still use it" + rm $DIR/d27/f27m_1 +} +run_test 27m "create file while OST0 was full ==================" + test_28() { mkdir $DIR/d28 $CREATETEST $DIR/d28/ct || error @@ -957,6 +991,40 @@ test_31e() { # bug 2904 } run_test 31e "remove of open non-empty directory ===============" +test_31f() { # bug 4554 + set -vx + mkdir $DIR/d31f + lfs setstripe $DIR/d31f 1048576 -1 1 + cp /etc/hosts $DIR/d31f + ls -l $DIR/d31f + lfs getstripe $DIR/d31f/hosts + multiop $DIR/d31f D_c & + MULTIPID=$! + + sleep 1 + + rm -rv $DIR/d31f || error "first of $DIR/d31f" + mkdir $DIR/d31f + lfs setstripe $DIR/d31f 1048576 -1 1 + cp /etc/hosts $DIR/d31f + ls -l $DIR/d31f + lfs getstripe $DIR/d31f/hosts + multiop $DIR/d31f D_c & + MULTIPID2=$! + + sleep 6 + + kill -USR1 $MULTIPID || error "first opendir $MULTIPID not running" + wait $MULTIPID || error "first opendir $MULTIPID failed" + + sleep 6 + + kill -USR1 $MULTIPID2 || error "second opendir $MULTIPID not running" + wait $MULTIPID2 || error "second opendir $MULTIPID2 failed" + set +vx +} +run_test 31f "remove of open directory with open-unlink file ===" + test_32a() { echo "== more mountpoints and symlinks =================" [ -e $DIR/d32a ] && rm -fr $DIR/d32a @@ -1725,17 +1793,17 @@ test_51b() { [ $NUMFREE -lt $NUMTEST ] && NUMTEST=$(($NUMFREE - 50)) mkdir -p $DIR/d51b - (cd $DIR/d51b; mkdirmany t $NUMTEST) + createmany -d $DIR/d51b/t- $NUMTEST } -run_test 51b "mkdir .../t-0 --- .../t-70000 ====================" +run_test 51b "mkdir .../t-0 --- .../t-$NUMTEST ====================" test_51c() { [ ! -d $DIR/d51b ] && echo "skipping test 51c: $DIR/51b missing" && \ return - (cd $DIR/d51b; rmdirmany t $NUMTEST) + unlinkmany -d $DIR/d51b/t- $NUMTEST } -run_test 51c "rmdir .../t-0 --- .../t-70000 ====================" +run_test 51c "rmdir .../t-0 --- .../t-$NUMTEST ====================" test_52a() { [ -f $DIR/d52a/foo ] && chattr -a $DIR/d52a/foo @@ -2227,6 +2295,18 @@ test_99f() { } run_test 99f "cvs commit =======================================" +test_100() { + netstat -ta | while read PROT SND RCV LOCAL REMOTE STAT; do + LPORT=`echo $LOCAL | cut -d: -f2` + RPORT=`echo $REMOTE | cut -d: -f2` + if [ "$PROT" = "tcp" ] && [ "$LPORT" != "*" ] && [ "$RPORT" != "*" ] && [ $RPORT -eq 988 ] && [ $LPORT -gt 1024 ]; then + echo "local port: $LPORT > 1024" + error + fi + done +} +run_test 100 "check local port using privileged port ===========" + TMPDIR=$OLDTMPDIR TMP=$OLDTMP HOME=$OLDHOME diff --git a/lustre/tests/sanityN.sh b/lustre/tests/sanityN.sh index d2be182..5375531 100644 --- a/lustre/tests/sanityN.sh +++ b/lustre/tests/sanityN.sh @@ -3,8 +3,8 @@ set -e ONLY=${ONLY:-"$*"} -# bug number for skipped test: 1768 3192 -ALWAYS_EXCEPT=${ALWAYS_EXCEPT:-"4 14b 14c"} +# bug number for skipped test: 1768 3192 3192 +ALWAYS_EXCEPT=${ALWAYS_EXCEPT:-"4 14b 14c"} # UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT! [ "$ALWAYS_EXCEPT$EXCEPT" ] && echo "Skipping tests: $ALWAYS_EXCEPT $EXCEPT" @@ -12,6 +12,7 @@ ALWAYS_EXCEPT=${ALWAYS_EXCEPT:-"4 14b 14c"} SRCDIR=`dirname $0` PATH=$PWD/$SRCDIR:$SRCDIR:$SRCDIR/../utils:$PATH +SIZE=${SIZE:-40960} CHECKSTAT=${CHECKSTAT:-"checkstat -v"} CREATETEST=${CREATETEST:-createtest} LFIND=${LFIND:-lfind} @@ -64,11 +65,12 @@ run_one() { if ! mount | grep -q $DIR1; then $START fi - log "== test $1: $2 `date +%H:%M:%S`" + BEFORE=`date +%s` + log "== test $1: $2= `date +%H:%M:%S` ($BEFORE)" export TESTNAME=test_$1 test_$1 || error "test_$1: exit with rc=$?" unset TESTNAME - pass + pass "($((`date +%s` - $BEFORE))s)" cd $SAVE_PWD $CLEAN } @@ -107,7 +109,7 @@ error () { } pass() { - echo PASS + echo PASS $@ } export MOUNT1=`mount| awk '/ lustre/ { print $3 }'| head -n 1` @@ -370,9 +372,38 @@ run_test 17 "resource creation/LVB creation race ===============" test_18() { ./mmap_sanity -d $MOUNT1 -m $MOUNT2 + sync; sleep 1; sync } run_test 18 "mmap sanity check =================================" +test_19() { # bug3811 + [ -d /proc/fs/lustre/obdfilter ] || return 0 + + MAX=`cat /proc/fs/lustre/obdfilter/*/readcache_max_filesize | head -n 1` + for O in /proc/fs/lustre/obdfilter/OST*; do + echo 4096 > $O/readcache_max_filesize + done + dd if=/dev/urandom of=$TMP/f19b bs=512k count=32 + SUM=`cksum $TMP/f19b | cut -d" " -f 1,2` + cp $TMP/f19b $DIR1/f19b + for i in `seq 1 20`; do + [ $((i % 5)) -eq 0 ] && log "test_18 loop $i" + cancel_lru_locks OSC > /dev/null + cksum $DIR1/f19b | cut -d" " -f 1,2 > $TMP/sum1 & \ + cksum $DIR2/f19b | cut -d" " -f 1,2 > $TMP/sum2 + wait + [ "`cat $TMP/sum1`" = "$SUM" ] || \ + error "$DIR1/f19b `cat $TMP/sum1` != $SUM" + [ "`cat $TMP/sum2`" = "$SUM" ] || \ + error "$DIR2/f19b `cat $TMP/sum2` != $SUM" + done + for O in /proc/fs/lustre/obdfilter/OST*; do + echo $MAX > $O/readcache_max_filesize + done + rm $DIR1/f19b +} +#run_test 19 "test concurrent uncached read races ===============" + log "cleanup: ======================================================" rm -rf $DIR1/[df][0-9]* $DIR1/lnk || true diff --git a/lustre/tests/test-framework.sh b/lustre/tests/test-framework.sh index 3e2a6c3..d5febfa 100644 --- a/lustre/tests/test-framework.sh +++ b/lustre/tests/test-framework.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash set -e @@ -94,7 +94,7 @@ zconf_mount() { else # this is so cheating do_node $client $LCONF --nosetup --node client_facet $XMLCONFIG > /dev/null || return 2 - do_node $client $LLMOUNT `facet_active_host mds`:/mds_svc/client_facet $mnt -o nettype=$NETTYPE|| return 4 + do_node $client $LLMOUNT -o nettype=$NETTYPE `facet_active_host mds`:/mds_svc/client_facet $mnt || return 4 fi [ -d /r ] && $LCTL modules > /r/tmp/ogdb-`hostname` @@ -489,9 +489,11 @@ error() { } build_test_filter() { + [ "$ONLY" ] && log "only running test $ONLY" for O in $ONLY; do eval ONLY_${O}=true done + [ "$EXCEPT$ALWAYS_EXCEPT" ] && log "skipping $EXCEPT $ALWAYS_EXCEPT" for E in $EXCEPT $ALWAYS_EXCEPT; do eval EXCEPT_${E}=true done @@ -550,6 +552,10 @@ log() { lctl mark "$*" 2> /dev/null || true } +pass() { + echo PASS $@ +} + run_one() { testnum=$1 message=$2 @@ -559,8 +565,10 @@ run_one() { # Pretty tests run faster. equals_msg $testnum: $message - log "== test $testnum: $message =========== `date +%H:%M:%S`" + BEFORE=`date +%s` + log "== test $testnum: $message =========== `date +%H:%M:%S` ($BEFORE)" test_${testnum} || error "test_$testnum failed with $?" + pass "($((`date +%s` - $BEFORE))s)" } canonical_path() { diff --git a/lustre/tests/unlinkmany.c b/lustre/tests/unlinkmany.c index ba1bee7..45f0d15 100644 --- a/lustre/tests/unlinkmany.c +++ b/lustre/tests/unlinkmany.c @@ -16,17 +16,23 @@ void usage(char *prog) int main(int argc, char ** argv) { - int i, rc = 0; + int i, rc = 0, do_rmdir = 0; char format[4096], *fmt; char filename[4096]; long start, last; long begin = 0, count; - if (argc < 3 || argc > 4) { + if (argc < 3 || argc > 5) { usage(argv[0]); return 1; } + if (strcmp(argv[1], "-d") == 0) { + do_rmdir = 1; + argv++; + argc--; + } + if (strlen(argv[1]) > 4080) { printf("name too long\n"); return 1; @@ -53,9 +59,13 @@ int main(int argc, char ** argv) } for (i = 0; i < count; i++, begin++) { sprintf(filename, fmt, begin); - rc = unlink(filename); + if (do_rmdir) + rc = rmdir(filename); + else + rc = unlink(filename); if (rc) { - printf("unlink(%s) error: %s\n", + printf("%s(%s) error: %s\n", + do_rmdir ? "rmdir" : "unlink", filename, strerror(errno)); rc = errno; break; diff --git a/lustre/utils/lconf b/lustre/utils/lconf index 3f00da0..082baaa 100755 --- a/lustre/utils/lconf +++ b/lustre/utils/lconf @@ -742,13 +742,47 @@ def mkfs(dev, devsize, fstype, jsize, isize, mkfsoptions, isblock=1): ret, out = runcmd("ls -l %s" %dev) devsize = int(string.split(out[0])[4]) / 1024 else: - devlast = dev.split("/")[-1] - ret, out = runcmd("cat /proc/partitions | grep %s"%devlast) - if ret: - panic("Unable to read the size of block device:", dev) + # sfdisk works for symlink, hardlink, and realdev + ret, out = runcmd("sfdisk -s %s" %dev) + if not ret: + devsize = int(out[0]) else: - out = out[0].split() - devsize = int(out[2]) + # sfdisk -s will fail for too large block device, + # then, read the size of partition from /proc/partitions + + # get the realpath of the device + # it may be the real device, such as /dev/hda7 + # or the hardlink created via mknod for a device + if 'realpath' in dir(os.path): + real_dev = os.path.realpath(dev) + else: + real_dev = dev + link_count = 0 + while os.path.islink(real_dev) and (link_count < 20): + link_count = link_count + 1 + dev_link = os.readlink(real_dev) + if os.path.isabs(dev_link): + real_dev = dev_link + else: + real_dev = os.path.join(os.path.dirname(real_dev), dev_link) + if link_count > 19: + panic("Entountered too many symbolic links resolving block device:", dev) + + # get the major and minor number of the realpath via ls + # it seems python(os.stat) does not return + # the st_rdev member of the stat structure + ret, out = runcmd("ls -l %s" %real_dev) + major = string.split(string.split(out[0])[4], ",")[0] + minor = string.split(out[0])[5] + + # get the devsize from /proc/partitions with the major and minor number + ret, out = runcmd("cat /proc/partitions") + for line in out: + if len(line) > 1: + if string.split(line)[0] == major and string.split(line)[1] == minor: + devsize = int(string.split(line)[2]) + break + if devsize > 1024 * 1024: jsize = ((devsize / 102400) * 4) if jsize > 400: diff --git a/lustre/utils/lctl.c b/lustre/utils/lctl.c index 8620bf8..6603aca 100644 --- a/lustre/utils/lctl.c +++ b/lustre/utils/lctl.c @@ -72,7 +72,7 @@ command_t cmdlist[] = { "usage: print_autoconns"}, {"add_autoconn", jt_ptl_add_autoconnect, 0, "add an autoconnect entry\n" "usage: add_autoconn [ise]"}, - {"del_autoconn", jt_ptl_del_autoconnect, 0, "remove an autoconnect entry\n" + {"del_autoconn",jt_ptl_del_autoconnect,0,"remove an autoconnect entry\n" "usage: del_autoconn [] [] [ks]"}, {"conn_list", jt_ptl_print_connections, 0, "connect to a remote nid\n" "usage: print_conns"}, @@ -80,7 +80,7 @@ command_t cmdlist[] = { "usage: connect [iIOC]"}, {"disconnect", jt_ptl_disconnect, 0, "disconnect from a remote nid\n" "usage: disconnect []"}, - {"active_tx", jt_ptl_print_active_txs, 0, "print active transmits (no args)\n" + {"active_tx", jt_ptl_print_active_txs, 0, "print active transmits\n" "usage: active_tx"}, {"mynid", jt_ptl_mynid, 0, "inform the socknal of the local nid. " "The nid defaults to hostname for tcp networks and is automatically " @@ -267,7 +267,7 @@ command_t cmdlist[] = { {"======== debug =========", jt_noop, 0, "debug"}, {"debug_daemon", jt_dbg_debug_daemon, 0, "debug daemon control and dump to a file\n" - "usage: debug_daemon [start file <#MB>|stop|pause|continue]"}, + "usage: debug_daemon {start file [#MB]|stop}"}, {"debug_kernel", jt_dbg_debug_kernel, 0, "get debug buffer and dump to a file, same as dk\n" "usage: debug_kernel [file] [raw]"}, diff --git a/lustre/utils/lfind b/lustre/utils/lfind index ae62017..552394e 100755 --- a/lustre/utils/lfind +++ b/lustre/utils/lfind @@ -1,3 +1,9 @@ #!/bin/bash PATH=`dirname $0`:$PATH + +if [ $# -eq 0 ] || [ "$1" == "-h" -o "$1" == "--help" ]; then + lfs help find 2>&1 | sed "s/find/lfind/g" + exit 0 +fi + lfs find "$@" diff --git a/lustre/utils/liblustreapi.c b/lustre/utils/liblustreapi.c index b9d6864..2d75721 100644 --- a/lustre/utils/liblustreapi.c +++ b/lustre/utils/liblustreapi.c @@ -189,7 +189,7 @@ int llapi_lov_get_uuids(int fd, struct obd_uuid *uuidp, int *ost_count) out: free(buf); - return 0; + return rc; } static int setup_obd_uuids(DIR *dir, char *dname, struct find_param *param) diff --git a/lustre/utils/lstripe b/lustre/utils/lstripe index 51ebd79..03b2014 100755 --- a/lustre/utils/lstripe +++ b/lustre/utils/lstripe @@ -1,3 +1,9 @@ #!/bin/bash PATH=`dirname $0`:$PATH + +if [ $# -eq 0 ] || [ "$1" == "-h" -o "$1" == "--help" ]; then + lfs help setstripe 2>&1 | sed "s/setstripe/lstripe/g" + exit 0 +fi + lfs setstripe "$@" -- 1.8.3.1