From 6cd962dc1b7beda63d4dc795fa1c25448808b6a7 Mon Sep 17 00:00:00 2001 From: green Date: Wed, 1 Feb 2006 20:21:29 +0000 Subject: [PATCH] Branch: b_release_1_4_6 Merge from b1_4 --- lustre/ChangeLog | 144 +++++++++++++++++++ lustre/include/linux/lustre_import.h | 3 +- lustre/include/linux/lustre_lib.h | 27 +++- lustre/include/linux/lustre_net.h | 17 ++- .../kernel-2.6.5-2.6-suse-i686-bigsmp.config | 26 +++- .../kernel-2.6.5-2.6-suse-i686-smp.config | 26 +++- .../kernel-2.6.5-2.6-suse-i686.config | 26 +++- .../kernel-2.6.5-2.6-suse-ia64-smp.config | 24 +++- .../kernel-2.6.5-2.6-suse-ia64.config | 24 +++- .../kernel-2.6.5-2.6-suse-x86_64-smp.config | 33 ++++- .../kernel-2.6.5-2.6-suse-x86_64.config | 33 ++++- .../patches/vfs_intent-2.6-rhel4.patch | 156 ++++++++++----------- lustre/kernel_patches/targets/2.6-rhel4.target.in | 2 +- lustre/kernel_patches/targets/2.6-suse.target.in | 2 +- lustre/ldlm/ldlm_lib.c | 23 ++- lustre/ldlm/ldlm_lockd.c | 6 + lustre/mdc/mdc_request.c | 61 +------- lustre/mds/mds_open.c | 21 ++- lustre/mds/mds_reint.c | 9 +- lustre/obdecho/echo_client.c | 6 +- lustre/scripts/lustre | 25 ++-- lustre/tests/recovery-small.sh | 11 +- 22 files changed, 498 insertions(+), 207 deletions(-) diff --git a/lustre/ChangeLog b/lustre/ChangeLog index 4a6bdc8..132eb3f 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -537,6 +537,150 @@ Bugzilla : 9794 Description: Random seed of liblustre clients was not sufficiently random Details : Improve initial seed of liblustre random number generator. +Severity : minor +Frequency : occasional (Cray XT3 only) +Bugzilla : 7305 +Description: root not authorized to access files in CRAY_PORTALS environment +Details : The client process capabilities were not honoured on the MDS in + a CRAY_PORTALS/CRAY_XT3 environment. If the file had previously + been accessed by an authorized user then root was able to access + the file on the local client also. The root user capabilities + are now allowed on the MDS, as this environment has secure UID. + +Severity : minor +Frequency : occasional +Bugzilla : 6449 +Description: ldiskfs "too long searching" message happens too often +Details : A debugging message (otherwise harmless) prints too often on + the OST console. This has been reduced to only happen when + there are fragmentation problems on the filesystem. + +Severity : minor +Frequency : rare +Bugzilla : 9598 +Description: Division by zero in statfs when all OSCs are inactive +Details : lov_get_stripecnt() returns zero due to incorrect order of checks, + lov_statfs divides by value returned by lov_get_stripecnt(). + +Severity : minor +Frequency : common +Bugzilla : 9489, 3273 +Description: First write from each client to each OST was only 4kB in size, + to initialize client writeback cache, which caused sub-optimal + RPCs and poor layout on disk for the first writen file. +Details : Clients now request an initial cache grant at (re)connect time + and so that they can start streaming writes to the cache right + away and always do full-sized RPCs if there is enough data. + If the OST is rebooted the client also re-establishes its grant + so that client cached writes will be honoured under the grant. + +Severity : minor +Frequency : common +Bugzilla : 7198 +Description: Slow ls (and stat(2) syscall) on files residing on IO-loaded OSTs +Details : Now I/O RPCs go to different portal number and (presumably) fast + lock requests (and glimses) and other RPCs get their own service + threads pool that should be able to service those RPCs + immediatelly. + +Severity : enhancement +Bugzilla : 7417 +Description: Ability to exchange lustre version between client and servers and + issue warnings at client side if client is too old. Also for + liblustre clients there is ability to refuse connection of too old + clients. +Details : New 'version' field is added to connect data structure that is + filled with version info. That info is later checked by server and + by client. + +Severity : minor +Frequency : rare, liblustre only. +Bugzilla : 9296, 9581 +Description: Two simultaneous writes from liblustre at offset within same page + might proceed at the same time overwriting eachother with stale + data. +Details : I/O lock withing llu_file_prwv was released too early, before data + actually was hitting the wire. Extended lock-holding time until + server acknowledges receiving data. + +Severity : minor +Frequency : extremely rare. Never observed in practice. +Bugzilla : 9652 +Description: avoid generating lustre_handle cookie of 0. +Details : class_handle_hash() generates handle cookies by incrementing + global counter, and can hit 0 occasionaly (this is unlikely, but + not impossible, because initial value of cookie counter is + selected randonly). Value of 0 is used as a sentinel meaning + "unassigned handle" --- avoid it. Also coalesce two critical + sections in this function into one. + +Severity : enhancement +Bugzilla : 9528 +Description: allow liblustre clients to delegate truncate locking to OST +Details : To avoid overhead of locking, liblustre client instructs OST to + take extent lock in ost_punch() on client's behalf. New connection + flag is added to handle backward compatibility. + +Severity : enhancement +Bugzilla : 4928, 7341, 9758 +Description: allow number of OST service threads to be specified +Details : a module parameter allows the number of OST service threads + to be specified via "options ost ost_num_threads=X" in + /etc/modules.conf or /etc/modutils.conf. + +Severity : major +Frequency : rare +Bugzilla : 9635 +Description: servers crash with bad pointer in target_handle_connect() +Details : In rare cases when a client is reconnecting it was possible that + the connection request was the last reference for that export. + We would temporarily drop the export reference and get a new + one, but this may have been the last reference and the export + was just destroyed. Get new reference before dropping old one. + +Severity : enhancement +Frequency : if client is started with failover MDS +Bugzilla : 9818 +Description: Allow multiple MDS hostnames in the mount command +Details : Try to read the configuration from all specified MDS + hostnames during a client mount in case the "primary" + MDS is down. + +Severity : minor +Frequency : echo_client brw_test command +Bugzilla : 9919 +Description: fix echo_client to work with OST preallocated code +Details : OST preallocation code (5137) didn't take echo_client IO path + into account: echo_client calls filter methods outside of any + OST thread and, hence, there is no per-thread preallocated + pages and buffers to use. Solution: hijack pga pages for IO. As + a byproduct, this avoids unnecessary data copying. + +Severity : major +Frequency : rare, unless heavy write-truncate concurrency is continuous +Bugzilla : 4180, 6984, 7171, 9963 +Description: OST becomes very slow and/or deadlocked during object unlink +Details : filter_destroy() was holding onto the parent directory lock + while truncating+unlinking objects. For very large objects this + may block other threads for a long time and slow overall OST + responsiveness. It may also be possible to get a lock ordering + deadlock in this case, or run out of journal credits because of + the combined truncate+unlink. Solution is to do object truncate + first in one transaction without parent lock, and then do the + final unlink in a new transaction with the parent lock. This + reduces the lock hold time dramatically. + +Severity : minor +Frequency : rare +Bugzilla : 3555, 5962, 6025, 6155, 6296, 9574 +Description: Client can oops in mdc_commit_close() after open replay +Details : It was possible for the MDS to return an open request with no + transaction number in mds_finish_transno() if the client was + evicted, but without actually returning an error. Clients + would later try to replay that open and may trip an assertion + Simplify the client close codepath, and always return an error + from the MDS in case the open is not successful. + ------------------------------------------------------------------------------ 08-26-2005 Cluster File Systems, Inc. diff --git a/lustre/include/linux/lustre_import.h b/lustre/include/linux/lustre_import.h index 59cf6ad..fca0aa5 100644 --- a/lustre/include/linux/lustre_import.h +++ b/lustre/include/linux/lustre_import.h @@ -54,7 +54,6 @@ struct obd_import { struct lustre_handle imp_dlm_handle; /* client's ldlm export */ struct ptlrpc_connection *imp_connection; struct ptlrpc_client *imp_client; - struct list_head imp_observers; struct list_head imp_pinger_chain; /* Lists of requests that are retained for replay, waiting for a reply, @@ -89,7 +88,7 @@ struct obd_import { unsigned int imp_invalid:1, imp_replayable:1, imp_dlm_fake:1, imp_server_timeout:1, imp_initial_recov:1, imp_initial_recov_bk:1, - imp_force_verify:1, imp_pingable:1, + imp_force_verify:1, imp_pingable:1, imp_resend_replay:1, imp_deactive:1; __u32 imp_connect_op; struct obd_connect_data imp_connect_data; diff --git a/lustre/include/linux/lustre_lib.h b/lustre/include/linux/lustre_lib.h index ef90acb..519c4e5 100644 --- a/lustre/include/linux/lustre_lib.h +++ b/lustre/include/linux/lustre_lib.h @@ -499,7 +499,7 @@ static inline void obd_ioctl_freedata(char *buf, int len) * If it returns FALSE l_wait_event() continues to wait as described above with * signals enabled. Otherwise it returns -ETIMEDOUT. * - * LWI_INTR(intr_handler, callback_data) is shorthand for + * LWI_INTR(intr_handler, callback_data) is shorthand for * LWI_TIMEOUT_INTR(0, NULL, intr_handler, callback_data) * * The second form of usage looks like this: @@ -519,6 +519,27 @@ static inline void obd_ioctl_freedata(char *buf, int len) * This is the same as previous case, but condition is checked once every * 'interval' jiffies (if non-zero). * + * Subtle synchronization point: this macro does *not* necessary takes + * wait-queue spin-lock before returning, and, hence, following idiom is safe + * ONLY when caller provides some external locking: + * + * Thread1 Thread2 + * + * l_wait_event(&obj->wq, ....); (1) + * + * wake_up(&obj->wq): (2) + * spin_lock(&q->lock); (2.1) + * __wake_up_common(q, ...); (2.2) + * spin_unlock(&q->lock, flags); (2.3) + * + * OBD_FREE_PTR(obj); (3) + * + * As l_wait_event() may "short-cut" execution and return without taking + * wait-queue spin-lock, some additional synchronization is necessary to + * guarantee that step (3) can begin only after (2.3) finishes. + * + * XXX nikita: some ptlrpc daemon threads have races of that sort. + * */ #define LWI_ON_SIGNAL_NOOP ((void (*)(void *))(-1)) @@ -579,6 +600,10 @@ static inline sigset_t l_w_e_set_sigs(int sigs) return old; } +/* + * wait for @condition to become true, but no longer than timeout, specified + * by @info. + */ #define __l_wait_event(wq, condition, info, ret, excl) \ do { \ wait_queue_t __wait; \ diff --git a/lustre/include/linux/lustre_net.h b/lustre/include/linux/lustre_net.h index 77f4338..ca8dcb2 100644 --- a/lustre/include/linux/lustre_net.h +++ b/lustre/include/linux/lustre_net.h @@ -278,7 +278,17 @@ struct ptlrpc_request { spinlock_t rq_lock; /* client-side flags */ unsigned int rq_intr:1, rq_replied:1, rq_err:1, - rq_timedout:1, rq_resend:1, rq_restart:1, rq_replay:1, + rq_timedout:1, rq_resend:1, rq_restart:1, + /* + * when ->rq_replay is set, request is kept by the client even + * after server commits corresponding transaction. This is + * used for operations that require sequence of multiple + * requests to be replayed. The only example currently is file + * open/close. When last request in such a sequence is + * committed, ->rq_replay is cleared on all requests in the + * sequence. + */ + rq_replay:1, rq_no_resend:1, rq_waiting:1, rq_receiving_reply:1, rq_no_delay:1, rq_net_err:1; enum rq_phase rq_phase; /* one of RQ_PHASE_* */ @@ -511,7 +521,10 @@ struct ptlrpc_service { struct list_head srv_active_replies; /* all the active replies */ struct list_head srv_reply_queue; /* replies waiting for service */ - wait_queue_head_t srv_waitq; /* all threads sleep on this */ + wait_queue_head_t srv_waitq; /* all threads sleep on this. This + * wait-queue is signalled when new + * incoming request arrives and when + * difficult reply has to be handled. */ struct list_head srv_threads; svc_handler_t srv_handler; diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-i686-bigsmp.config b/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-i686-bigsmp.config index 1718e49..9971cfa 100644 --- a/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-i686-bigsmp.config +++ b/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-i686-bigsmp.config @@ -67,7 +67,6 @@ CONFIG_STOP_MACHINE=y # # Processor type and features # -CONFIG_MEM_MIRROR=y # CONFIG_X86_PC is not set # CONFIG_X86_ELAN is not set # CONFIG_X86_VOYAGER is not set @@ -131,6 +130,8 @@ CONFIG_X86_CPUID=m # Firmware Drivers # CONFIG_EDD=m +CONFIG_DELL_RBU=m +CONFIG_DCDBAS=m # CONFIG_NOHIGHMEM is not set # CONFIG_HIGHMEM4G is not set CONFIG_HIGHMEM64G=y @@ -610,6 +611,7 @@ CONFIG_MEGARAID_NEWGEN=y CONFIG_MEGARAID_MM=m CONFIG_MEGARAID_MAILBOX=m CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_SAS=m CONFIG_SCSI_SATA=y CONFIG_SCSI_SATA_AHCI=m CONFIG_SCSI_SATA_SVW=m @@ -667,6 +669,7 @@ CONFIG_SCSI_QLA21XX=m CONFIG_SCSI_QLA22XX=m CONFIG_SCSI_QLA2300=m CONFIG_SCSI_QLA2322=m +CONFIG_SCSI_QLA24XX=m CONFIG_SCSI_QLA6312=m CONFIG_SCSI_QLA2XXX_FAILOVER=y CONFIG_SCSI_QLA4XXX=m @@ -729,7 +732,10 @@ CONFIG_BLK_DEV_DM_BBR=m # # Fusion MPT device support # -CONFIG_FUSION=m +CONFIG_FUSION=y +CONFIG_FUSION_SPI=m +CONFIG_FUSION_FC=m +CONFIG_FUSION_SAS=m CONFIG_FUSION_MAX_SGE=40 CONFIG_FUSION_CTL=m CONFIG_FUSION_LAN=m @@ -932,6 +938,9 @@ CONFIG_IP_NF_CONNTRACK_MARK=y CONFIG_IP_NF_TARGET_CONNMARK=m CONFIG_IP_NF_MATCH_CONNMARK=m CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_MATCH_HASHLIMIT=m +# CONFIG_IP_NF_MATCH_IPV4OPTIONS is not set # # IPv6: Netfilter Configuration @@ -1194,6 +1203,7 @@ CONFIG_SK98LIN=m CONFIG_TIGON3=m CONFIG_NET_BROADCOM=m CONFIG_NET_BCM44=m +CONFIG_BNX2=m # # Ethernet (10000 Mbit) @@ -1202,6 +1212,7 @@ CONFIG_IXGB=m CONFIG_IXGB_NAPI=y CONFIG_S2IO=m CONFIG_S2IO_NAPI=y +# CONFIG_2BUFF_MODE is not set CONFIG_FDDI=y # CONFIG_DEFXX is not set CONFIG_SKFP=m @@ -1804,8 +1815,9 @@ CONFIG_IPMI_HANDLER=m CONFIG_IPMI_PANIC_EVENT=y CONFIG_IPMI_PANIC_STRING=y CONFIG_IPMI_DEVICE_INTERFACE=m -CONFIG_IPMI_KCS=m +CONFIG_IPMI_SI=m CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m # # Watchdog Cards @@ -1865,6 +1877,13 @@ CONFIG_SONYPI=m # # Ftape, the floppy tape device driver # + +# +# TPM devices +# +CONFIG_TCG_TPM=m +CONFIG_TCG_NSC=m +CONFIG_TCG_ATMEL=m CONFIG_AGP=m CONFIG_AGP_ALI=m CONFIG_AGP_ATI=m @@ -1966,6 +1985,7 @@ CONFIG_SENSORS_VT1211=m CONFIG_SENSORS_W83781D=m CONFIG_SENSORS_W83L785TS=m CONFIG_SENSORS_W83627HF=m +CONFIG_SENSORS_PCF8574=m # # Other I2C Chip support diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-i686-smp.config b/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-i686-smp.config index 1718e49..9971cfa 100644 --- a/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-i686-smp.config +++ b/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-i686-smp.config @@ -67,7 +67,6 @@ CONFIG_STOP_MACHINE=y # # Processor type and features # -CONFIG_MEM_MIRROR=y # CONFIG_X86_PC is not set # CONFIG_X86_ELAN is not set # CONFIG_X86_VOYAGER is not set @@ -131,6 +130,8 @@ CONFIG_X86_CPUID=m # Firmware Drivers # CONFIG_EDD=m +CONFIG_DELL_RBU=m +CONFIG_DCDBAS=m # CONFIG_NOHIGHMEM is not set # CONFIG_HIGHMEM4G is not set CONFIG_HIGHMEM64G=y @@ -610,6 +611,7 @@ CONFIG_MEGARAID_NEWGEN=y CONFIG_MEGARAID_MM=m CONFIG_MEGARAID_MAILBOX=m CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_SAS=m CONFIG_SCSI_SATA=y CONFIG_SCSI_SATA_AHCI=m CONFIG_SCSI_SATA_SVW=m @@ -667,6 +669,7 @@ CONFIG_SCSI_QLA21XX=m CONFIG_SCSI_QLA22XX=m CONFIG_SCSI_QLA2300=m CONFIG_SCSI_QLA2322=m +CONFIG_SCSI_QLA24XX=m CONFIG_SCSI_QLA6312=m CONFIG_SCSI_QLA2XXX_FAILOVER=y CONFIG_SCSI_QLA4XXX=m @@ -729,7 +732,10 @@ CONFIG_BLK_DEV_DM_BBR=m # # Fusion MPT device support # -CONFIG_FUSION=m +CONFIG_FUSION=y +CONFIG_FUSION_SPI=m +CONFIG_FUSION_FC=m +CONFIG_FUSION_SAS=m CONFIG_FUSION_MAX_SGE=40 CONFIG_FUSION_CTL=m CONFIG_FUSION_LAN=m @@ -932,6 +938,9 @@ CONFIG_IP_NF_CONNTRACK_MARK=y CONFIG_IP_NF_TARGET_CONNMARK=m CONFIG_IP_NF_MATCH_CONNMARK=m CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_MATCH_HASHLIMIT=m +# CONFIG_IP_NF_MATCH_IPV4OPTIONS is not set # # IPv6: Netfilter Configuration @@ -1194,6 +1203,7 @@ CONFIG_SK98LIN=m CONFIG_TIGON3=m CONFIG_NET_BROADCOM=m CONFIG_NET_BCM44=m +CONFIG_BNX2=m # # Ethernet (10000 Mbit) @@ -1202,6 +1212,7 @@ CONFIG_IXGB=m CONFIG_IXGB_NAPI=y CONFIG_S2IO=m CONFIG_S2IO_NAPI=y +# CONFIG_2BUFF_MODE is not set CONFIG_FDDI=y # CONFIG_DEFXX is not set CONFIG_SKFP=m @@ -1804,8 +1815,9 @@ CONFIG_IPMI_HANDLER=m CONFIG_IPMI_PANIC_EVENT=y CONFIG_IPMI_PANIC_STRING=y CONFIG_IPMI_DEVICE_INTERFACE=m -CONFIG_IPMI_KCS=m +CONFIG_IPMI_SI=m CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m # # Watchdog Cards @@ -1865,6 +1877,13 @@ CONFIG_SONYPI=m # # Ftape, the floppy tape device driver # + +# +# TPM devices +# +CONFIG_TCG_TPM=m +CONFIG_TCG_NSC=m +CONFIG_TCG_ATMEL=m CONFIG_AGP=m CONFIG_AGP_ALI=m CONFIG_AGP_ATI=m @@ -1966,6 +1985,7 @@ CONFIG_SENSORS_VT1211=m CONFIG_SENSORS_W83781D=m CONFIG_SENSORS_W83L785TS=m CONFIG_SENSORS_W83627HF=m +CONFIG_SENSORS_PCF8574=m # # Other I2C Chip support diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-i686.config b/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-i686.config index 1718e49..9971cfa 100644 --- a/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-i686.config +++ b/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-i686.config @@ -67,7 +67,6 @@ CONFIG_STOP_MACHINE=y # # Processor type and features # -CONFIG_MEM_MIRROR=y # CONFIG_X86_PC is not set # CONFIG_X86_ELAN is not set # CONFIG_X86_VOYAGER is not set @@ -131,6 +130,8 @@ CONFIG_X86_CPUID=m # Firmware Drivers # CONFIG_EDD=m +CONFIG_DELL_RBU=m +CONFIG_DCDBAS=m # CONFIG_NOHIGHMEM is not set # CONFIG_HIGHMEM4G is not set CONFIG_HIGHMEM64G=y @@ -610,6 +611,7 @@ CONFIG_MEGARAID_NEWGEN=y CONFIG_MEGARAID_MM=m CONFIG_MEGARAID_MAILBOX=m CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_SAS=m CONFIG_SCSI_SATA=y CONFIG_SCSI_SATA_AHCI=m CONFIG_SCSI_SATA_SVW=m @@ -667,6 +669,7 @@ CONFIG_SCSI_QLA21XX=m CONFIG_SCSI_QLA22XX=m CONFIG_SCSI_QLA2300=m CONFIG_SCSI_QLA2322=m +CONFIG_SCSI_QLA24XX=m CONFIG_SCSI_QLA6312=m CONFIG_SCSI_QLA2XXX_FAILOVER=y CONFIG_SCSI_QLA4XXX=m @@ -729,7 +732,10 @@ CONFIG_BLK_DEV_DM_BBR=m # # Fusion MPT device support # -CONFIG_FUSION=m +CONFIG_FUSION=y +CONFIG_FUSION_SPI=m +CONFIG_FUSION_FC=m +CONFIG_FUSION_SAS=m CONFIG_FUSION_MAX_SGE=40 CONFIG_FUSION_CTL=m CONFIG_FUSION_LAN=m @@ -932,6 +938,9 @@ CONFIG_IP_NF_CONNTRACK_MARK=y CONFIG_IP_NF_TARGET_CONNMARK=m CONFIG_IP_NF_MATCH_CONNMARK=m CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_MATCH_HASHLIMIT=m +# CONFIG_IP_NF_MATCH_IPV4OPTIONS is not set # # IPv6: Netfilter Configuration @@ -1194,6 +1203,7 @@ CONFIG_SK98LIN=m CONFIG_TIGON3=m CONFIG_NET_BROADCOM=m CONFIG_NET_BCM44=m +CONFIG_BNX2=m # # Ethernet (10000 Mbit) @@ -1202,6 +1212,7 @@ CONFIG_IXGB=m CONFIG_IXGB_NAPI=y CONFIG_S2IO=m CONFIG_S2IO_NAPI=y +# CONFIG_2BUFF_MODE is not set CONFIG_FDDI=y # CONFIG_DEFXX is not set CONFIG_SKFP=m @@ -1804,8 +1815,9 @@ CONFIG_IPMI_HANDLER=m CONFIG_IPMI_PANIC_EVENT=y CONFIG_IPMI_PANIC_STRING=y CONFIG_IPMI_DEVICE_INTERFACE=m -CONFIG_IPMI_KCS=m +CONFIG_IPMI_SI=m CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m # # Watchdog Cards @@ -1865,6 +1877,13 @@ CONFIG_SONYPI=m # # Ftape, the floppy tape device driver # + +# +# TPM devices +# +CONFIG_TCG_TPM=m +CONFIG_TCG_NSC=m +CONFIG_TCG_ATMEL=m CONFIG_AGP=m CONFIG_AGP_ALI=m CONFIG_AGP_ATI=m @@ -1966,6 +1985,7 @@ CONFIG_SENSORS_VT1211=m CONFIG_SENSORS_W83781D=m CONFIG_SENSORS_W83L785TS=m CONFIG_SENSORS_W83627HF=m +CONFIG_SENSORS_PCF8574=m # # Other I2C Chip support diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-ia64-smp.config b/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-ia64-smp.config index 2a42807..c205dc4 100644 --- a/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-ia64-smp.config +++ b/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-ia64-smp.config @@ -93,6 +93,7 @@ CONFIG_IA64_SGI_SN_XPC=m CONFIG_FORCE_MAX_ZONEORDER=18 CONFIG_SMP=y CONFIG_NR_CPUS=128 +CONFIG_SCHED_SMT=y # CONFIG_PREEMPT is not set CONFIG_HAVE_DEC_LOCK=y CONFIG_IA32_SUPPORT=y @@ -439,6 +440,7 @@ CONFIG_MEGARAID_NEWGEN=y CONFIG_MEGARAID_MM=m CONFIG_MEGARAID_MAILBOX=m CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_SAS=m CONFIG_SCSI_SATA=y CONFIG_SCSI_SATA_AHCI=m CONFIG_SCSI_SATA_SVW=m @@ -482,6 +484,7 @@ CONFIG_SCSI_QLA21XX=m CONFIG_SCSI_QLA22XX=m CONFIG_SCSI_QLA2300=m CONFIG_SCSI_QLA2322=m +CONFIG_SCSI_QLA24XX=m CONFIG_SCSI_QLA6312=m CONFIG_SCSI_QLA2XXX_FAILOVER=y CONFIG_SCSI_QLA4XXX=m @@ -520,7 +523,10 @@ CONFIG_BLK_DEV_DM_BBR=m # # Fusion MPT device support # -CONFIG_FUSION=m +CONFIG_FUSION=y +CONFIG_FUSION_SPI=m +CONFIG_FUSION_FC=m +CONFIG_FUSION_SAS=m CONFIG_FUSION_MAX_SGE=40 CONFIG_FUSION_CTL=m CONFIG_FUSION_LAN=m @@ -723,6 +729,9 @@ CONFIG_IP_NF_CONNTRACK_MARK=y CONFIG_IP_NF_TARGET_CONNMARK=m CONFIG_IP_NF_MATCH_CONNMARK=m CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_MATCH_HASHLIMIT=m +# CONFIG_IP_NF_MATCH_IPV4OPTIONS is not set # # IPv6: Netfilter Configuration @@ -942,6 +951,7 @@ CONFIG_SK98LIN=m CONFIG_TIGON3=m CONFIG_NET_BROADCOM=m CONFIG_NET_BCM44=m +CONFIG_BNX2=m # # Ethernet (10000 Mbit) @@ -950,6 +960,7 @@ CONFIG_IXGB=m CONFIG_IXGB_NAPI=y CONFIG_S2IO=m CONFIG_S2IO_NAPI=y +# CONFIG_2BUFF_MODE is not set CONFIG_FDDI=y # CONFIG_DEFXX is not set CONFIG_SKFP=m @@ -1489,8 +1500,9 @@ CONFIG_IPMI_HANDLER=m CONFIG_IPMI_PANIC_EVENT=y CONFIG_IPMI_PANIC_STRING=y CONFIG_IPMI_DEVICE_INTERFACE=m -CONFIG_IPMI_KCS=m +CONFIG_IPMI_SI=m CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m # # Watchdog Cards @@ -1525,6 +1537,13 @@ CONFIG_APPLICOM=m # # Ftape, the floppy tape device driver # + +# +# TPM devices +# +CONFIG_TCG_TPM=m +CONFIG_TCG_NSC=m +CONFIG_TCG_ATMEL=m CONFIG_AGP=m CONFIG_AGP_I460=m CONFIG_AGP_HP_ZX1=m @@ -1612,6 +1631,7 @@ CONFIG_SENSORS_VT1211=m CONFIG_SENSORS_W83781D=m # CONFIG_SENSORS_W83L785TS is not set CONFIG_SENSORS_W83627HF=m +CONFIG_SENSORS_PCF8574=m # # Other I2C Chip support diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-ia64.config b/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-ia64.config index 2a42807..c205dc4 100644 --- a/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-ia64.config +++ b/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-ia64.config @@ -93,6 +93,7 @@ CONFIG_IA64_SGI_SN_XPC=m CONFIG_FORCE_MAX_ZONEORDER=18 CONFIG_SMP=y CONFIG_NR_CPUS=128 +CONFIG_SCHED_SMT=y # CONFIG_PREEMPT is not set CONFIG_HAVE_DEC_LOCK=y CONFIG_IA32_SUPPORT=y @@ -439,6 +440,7 @@ CONFIG_MEGARAID_NEWGEN=y CONFIG_MEGARAID_MM=m CONFIG_MEGARAID_MAILBOX=m CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_SAS=m CONFIG_SCSI_SATA=y CONFIG_SCSI_SATA_AHCI=m CONFIG_SCSI_SATA_SVW=m @@ -482,6 +484,7 @@ CONFIG_SCSI_QLA21XX=m CONFIG_SCSI_QLA22XX=m CONFIG_SCSI_QLA2300=m CONFIG_SCSI_QLA2322=m +CONFIG_SCSI_QLA24XX=m CONFIG_SCSI_QLA6312=m CONFIG_SCSI_QLA2XXX_FAILOVER=y CONFIG_SCSI_QLA4XXX=m @@ -520,7 +523,10 @@ CONFIG_BLK_DEV_DM_BBR=m # # Fusion MPT device support # -CONFIG_FUSION=m +CONFIG_FUSION=y +CONFIG_FUSION_SPI=m +CONFIG_FUSION_FC=m +CONFIG_FUSION_SAS=m CONFIG_FUSION_MAX_SGE=40 CONFIG_FUSION_CTL=m CONFIG_FUSION_LAN=m @@ -723,6 +729,9 @@ CONFIG_IP_NF_CONNTRACK_MARK=y CONFIG_IP_NF_TARGET_CONNMARK=m CONFIG_IP_NF_MATCH_CONNMARK=m CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_MATCH_HASHLIMIT=m +# CONFIG_IP_NF_MATCH_IPV4OPTIONS is not set # # IPv6: Netfilter Configuration @@ -942,6 +951,7 @@ CONFIG_SK98LIN=m CONFIG_TIGON3=m CONFIG_NET_BROADCOM=m CONFIG_NET_BCM44=m +CONFIG_BNX2=m # # Ethernet (10000 Mbit) @@ -950,6 +960,7 @@ CONFIG_IXGB=m CONFIG_IXGB_NAPI=y CONFIG_S2IO=m CONFIG_S2IO_NAPI=y +# CONFIG_2BUFF_MODE is not set CONFIG_FDDI=y # CONFIG_DEFXX is not set CONFIG_SKFP=m @@ -1489,8 +1500,9 @@ CONFIG_IPMI_HANDLER=m CONFIG_IPMI_PANIC_EVENT=y CONFIG_IPMI_PANIC_STRING=y CONFIG_IPMI_DEVICE_INTERFACE=m -CONFIG_IPMI_KCS=m +CONFIG_IPMI_SI=m CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m # # Watchdog Cards @@ -1525,6 +1537,13 @@ CONFIG_APPLICOM=m # # Ftape, the floppy tape device driver # + +# +# TPM devices +# +CONFIG_TCG_TPM=m +CONFIG_TCG_NSC=m +CONFIG_TCG_ATMEL=m CONFIG_AGP=m CONFIG_AGP_I460=m CONFIG_AGP_HP_ZX1=m @@ -1612,6 +1631,7 @@ CONFIG_SENSORS_VT1211=m CONFIG_SENSORS_W83781D=m # CONFIG_SENSORS_W83L785TS is not set CONFIG_SENSORS_W83627HF=m +CONFIG_SENSORS_PCF8574=m # # Other I2C Chip support diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-x86_64-smp.config b/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-x86_64-smp.config index c455f9d..81f3823 100644 --- a/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-x86_64-smp.config +++ b/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-x86_64-smp.config @@ -84,6 +84,13 @@ CONFIG_X86_GOOD_APIC=y CONFIG_MICROCODE=m CONFIG_X86_MSR=m CONFIG_X86_CPUID=m + +# +# Firmware Drivers +# +CONFIG_EDD=m +CONFIG_DELL_RBU=m +CONFIG_DCDBAS=m CONFIG_X86_HT=y CONFIG_X86_IO_APIC=y CONFIG_X86_LOCAL_APIC=y @@ -496,6 +503,7 @@ CONFIG_MEGARAID_NEWGEN=y CONFIG_MEGARAID_MM=m CONFIG_MEGARAID_MAILBOX=m CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_SAS=m CONFIG_SCSI_SATA=y CONFIG_SCSI_SATA_AHCI=m CONFIG_SCSI_SATA_SVW=m @@ -543,6 +551,7 @@ CONFIG_SCSI_QLA21XX=m CONFIG_SCSI_QLA22XX=m CONFIG_SCSI_QLA2300=m CONFIG_SCSI_QLA2322=m +CONFIG_SCSI_QLA24XX=m CONFIG_SCSI_QLA6312=m CONFIG_SCSI_QLA2XXX_FAILOVER=y CONFIG_SCSI_QLA4XXX=m @@ -581,7 +590,10 @@ CONFIG_BLK_DEV_DM_BBR=m # # Fusion MPT device support # -CONFIG_FUSION=m +CONFIG_FUSION=y +CONFIG_FUSION_SPI=m +CONFIG_FUSION_FC=m +CONFIG_FUSION_SAS=m CONFIG_FUSION_MAX_SGE=40 CONFIG_FUSION_CTL=m CONFIG_FUSION_LAN=m @@ -787,6 +799,9 @@ CONFIG_IP_NF_CONNTRACK_MARK=y CONFIG_IP_NF_TARGET_CONNMARK=m CONFIG_IP_NF_MATCH_CONNMARK=m CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_MATCH_HASHLIMIT=m +# CONFIG_IP_NF_MATCH_IPV4OPTIONS is not set # # IPv6: Netfilter Configuration @@ -999,6 +1014,7 @@ CONFIG_SK98LIN=m CONFIG_TIGON3=m CONFIG_NET_BROADCOM=m CONFIG_NET_BCM44=m +CONFIG_BNX2=m # # Ethernet (10000 Mbit) @@ -1007,6 +1023,7 @@ CONFIG_IXGB=m CONFIG_IXGB_NAPI=y CONFIG_S2IO=m CONFIG_S2IO_NAPI=y +# CONFIG_2BUFF_MODE is not set CONFIG_FDDI=y # CONFIG_DEFXX is not set CONFIG_SKFP=m @@ -1494,8 +1511,9 @@ CONFIG_IPMI_HANDLER=m CONFIG_IPMI_PANIC_EVENT=y # CONFIG_IPMI_PANIC_STRING is not set CONFIG_IPMI_DEVICE_INTERFACE=m -CONFIG_IPMI_KCS=m +CONFIG_IPMI_SI=m CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m # # Watchdog Cards @@ -1546,8 +1564,16 @@ CONFIG_APPLICOM=m # # Ftape, the floppy tape device driver # + +# +# TPM devices +# +CONFIG_TCG_TPM=m +CONFIG_TCG_NSC=m +CONFIG_TCG_ATMEL=m CONFIG_AGP=y CONFIG_AGP_AMD64=y +CONFIG_AGP_INTEL=m CONFIG_AGP_INTEL_MCH=m # CONFIG_DRM is not set @@ -1633,6 +1659,7 @@ CONFIG_SENSORS_VT1211=m CONFIG_SENSORS_W83781D=m CONFIG_SENSORS_W83L785TS=m CONFIG_SENSORS_W83627HF=m +CONFIG_SENSORS_PCF8574=m # # Other I2C Chip support @@ -1763,6 +1790,8 @@ CONFIG_FB_VESA=y CONFIG_VIDEO_SELECT=y CONFIG_FB_HGA=m CONFIG_FB_RIVA=m +CONFIG_FB_I810=m +CONFIG_FB_I810_GTF=y CONFIG_FB_MATROX=m CONFIG_FB_MATROX_MILLENIUM=y CONFIG_FB_MATROX_MYSTIQUE=y diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-x86_64.config b/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-x86_64.config index c455f9d..81f3823 100644 --- a/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-x86_64.config +++ b/lustre/kernel_patches/kernel_configs/kernel-2.6.5-2.6-suse-x86_64.config @@ -84,6 +84,13 @@ CONFIG_X86_GOOD_APIC=y CONFIG_MICROCODE=m CONFIG_X86_MSR=m CONFIG_X86_CPUID=m + +# +# Firmware Drivers +# +CONFIG_EDD=m +CONFIG_DELL_RBU=m +CONFIG_DCDBAS=m CONFIG_X86_HT=y CONFIG_X86_IO_APIC=y CONFIG_X86_LOCAL_APIC=y @@ -496,6 +503,7 @@ CONFIG_MEGARAID_NEWGEN=y CONFIG_MEGARAID_MM=m CONFIG_MEGARAID_MAILBOX=m CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_SAS=m CONFIG_SCSI_SATA=y CONFIG_SCSI_SATA_AHCI=m CONFIG_SCSI_SATA_SVW=m @@ -543,6 +551,7 @@ CONFIG_SCSI_QLA21XX=m CONFIG_SCSI_QLA22XX=m CONFIG_SCSI_QLA2300=m CONFIG_SCSI_QLA2322=m +CONFIG_SCSI_QLA24XX=m CONFIG_SCSI_QLA6312=m CONFIG_SCSI_QLA2XXX_FAILOVER=y CONFIG_SCSI_QLA4XXX=m @@ -581,7 +590,10 @@ CONFIG_BLK_DEV_DM_BBR=m # # Fusion MPT device support # -CONFIG_FUSION=m +CONFIG_FUSION=y +CONFIG_FUSION_SPI=m +CONFIG_FUSION_FC=m +CONFIG_FUSION_SAS=m CONFIG_FUSION_MAX_SGE=40 CONFIG_FUSION_CTL=m CONFIG_FUSION_LAN=m @@ -787,6 +799,9 @@ CONFIG_IP_NF_CONNTRACK_MARK=y CONFIG_IP_NF_TARGET_CONNMARK=m CONFIG_IP_NF_MATCH_CONNMARK=m CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_MATCH_HASHLIMIT=m +# CONFIG_IP_NF_MATCH_IPV4OPTIONS is not set # # IPv6: Netfilter Configuration @@ -999,6 +1014,7 @@ CONFIG_SK98LIN=m CONFIG_TIGON3=m CONFIG_NET_BROADCOM=m CONFIG_NET_BCM44=m +CONFIG_BNX2=m # # Ethernet (10000 Mbit) @@ -1007,6 +1023,7 @@ CONFIG_IXGB=m CONFIG_IXGB_NAPI=y CONFIG_S2IO=m CONFIG_S2IO_NAPI=y +# CONFIG_2BUFF_MODE is not set CONFIG_FDDI=y # CONFIG_DEFXX is not set CONFIG_SKFP=m @@ -1494,8 +1511,9 @@ CONFIG_IPMI_HANDLER=m CONFIG_IPMI_PANIC_EVENT=y # CONFIG_IPMI_PANIC_STRING is not set CONFIG_IPMI_DEVICE_INTERFACE=m -CONFIG_IPMI_KCS=m +CONFIG_IPMI_SI=m CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m # # Watchdog Cards @@ -1546,8 +1564,16 @@ CONFIG_APPLICOM=m # # Ftape, the floppy tape device driver # + +# +# TPM devices +# +CONFIG_TCG_TPM=m +CONFIG_TCG_NSC=m +CONFIG_TCG_ATMEL=m CONFIG_AGP=y CONFIG_AGP_AMD64=y +CONFIG_AGP_INTEL=m CONFIG_AGP_INTEL_MCH=m # CONFIG_DRM is not set @@ -1633,6 +1659,7 @@ CONFIG_SENSORS_VT1211=m CONFIG_SENSORS_W83781D=m CONFIG_SENSORS_W83L785TS=m CONFIG_SENSORS_W83627HF=m +CONFIG_SENSORS_PCF8574=m # # Other I2C Chip support @@ -1763,6 +1790,8 @@ CONFIG_FB_VESA=y CONFIG_VIDEO_SELECT=y CONFIG_FB_HGA=m CONFIG_FB_RIVA=m +CONFIG_FB_I810=m +CONFIG_FB_I810_GTF=y CONFIG_FB_MATROX=m CONFIG_FB_MATROX_MILLENIUM=y CONFIG_FB_MATROX_MYSTIQUE=y diff --git a/lustre/kernel_patches/patches/vfs_intent-2.6-rhel4.patch b/lustre/kernel_patches/patches/vfs_intent-2.6-rhel4.patch index 49165c4..75d587e 100644 --- a/lustre/kernel_patches/patches/vfs_intent-2.6-rhel4.patch +++ b/lustre/kernel_patches/patches/vfs_intent-2.6-rhel4.patch @@ -1,8 +1,8 @@ -Index: linux-2.6.9-5.0.3.EL/fs/exec.c +Index: linux-2.6.9-22.0.2.EL/fs/exec.c =================================================================== ---- linux-2.6.9-5.0.3.EL.orig/fs/exec.c 2005-02-26 14:28:01.000000000 +0200 -+++ linux-2.6.9-5.0.3.EL/fs/exec.c 2005-02-26 23:29:02.000000000 +0200 -@@ -124,9 +124,10 @@ +--- linux-2.6.9-22.0.2.EL.orig/fs/exec.c 2006-01-25 23:40:13.000000000 -0500 ++++ linux-2.6.9-22.0.2.EL/fs/exec.c 2006-01-26 18:46:33.000000000 -0500 +@@ -125,9 +125,10 @@ struct file * file; struct nameidata nd; int error; @@ -15,7 +15,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/exec.c if (error) goto out; -@@ -138,7 +139,7 @@ +@@ -139,7 +140,7 @@ if (error) goto exit; @@ -24,7 +24,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/exec.c error = PTR_ERR(file); if (IS_ERR(file)) goto out; -@@ -487,8 +488,9 @@ +@@ -488,8 +489,9 @@ int err; struct file *file; @@ -36,7 +36,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/exec.c file = ERR_PTR(err); if (!err) { -@@ -501,7 +503,7 @@ +@@ -502,7 +504,7 @@ err = -EACCES; file = ERR_PTR(err); if (!err) { @@ -45,11 +45,11 @@ Index: linux-2.6.9-5.0.3.EL/fs/exec.c if (!IS_ERR(file)) { err = deny_write_access(file); if (err) { -Index: linux-2.6.9-5.0.3.EL/fs/namei.c +Index: linux-2.6.9-22.0.2.EL/fs/namei.c =================================================================== ---- linux-2.6.9-5.0.3.EL.orig/fs/namei.c 2005-02-26 14:28:01.000000000 +0200 -+++ linux-2.6.9-5.0.3.EL/fs/namei.c 2005-04-01 18:15:29.743029208 +0300 -@@ -272,8 +272,19 @@ +--- linux-2.6.9-22.0.2.EL.orig/fs/namei.c 2006-01-25 23:40:13.000000000 -0500 ++++ linux-2.6.9-22.0.2.EL/fs/namei.c 2006-01-26 18:46:33.000000000 -0500 +@@ -274,8 +274,19 @@ return 0; } @@ -69,7 +69,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/namei.c dput(nd->dentry); mntput(nd->mnt); } -@@ -363,7 +374,10 @@ +@@ -367,7 +378,10 @@ { struct dentry * result; struct inode *dir = parent->d_inode; @@ -80,7 +80,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/namei.c down(&dir->i_sem); /* * First re-do the cached lookup just in case it was created -@@ -402,7 +416,10 @@ +@@ -406,7 +420,10 @@ if (result->d_op && result->d_op->d_revalidate) { if (!result->d_op->d_revalidate(result, nd) && !d_invalidate(result)) { dput(result); @@ -92,7 +92,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/namei.c } } return result; -@@ -432,7 +449,9 @@ +@@ -436,7 +453,9 @@ static inline int __vfs_follow_link(struct nameidata *nd, const char *link) { int res = 0; @@ -102,7 +102,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/namei.c if (IS_ERR(link)) goto fail; -@@ -442,6 +461,9 @@ +@@ -446,6 +465,9 @@ /* weird __emul_prefix() stuff did it */ goto out; } @@ -112,7 +112,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/namei.c res = link_path_walk(link, nd); out: if (nd->depth || res || nd->last_type!=LAST_NORM) -@@ -650,6 +672,33 @@ +@@ -654,6 +676,33 @@ return PTR_ERR(dentry); } @@ -145,8 +145,8 @@ Index: linux-2.6.9-5.0.3.EL/fs/namei.c + /* * Name resolution. - * -@@ -751,8 +800,12 @@ + * This is the basic name resolution function, turning a pathname into +@@ -755,8 +804,12 @@ goto out_dput; if (inode->i_op->follow_link) { @@ -159,7 +159,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/namei.c dput(next.dentry); mntput(next.mnt); if (err) -@@ -791,14 +844,34 @@ +@@ -795,14 +848,34 @@ inode = nd->dentry->d_inode; /* fallthrough */ case 1: @@ -194,7 +194,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/namei.c if (err) break; follow_mount(&next.mnt, &next.dentry); -@@ -1016,7 +1089,7 @@ +@@ -1053,7 +1126,7 @@ } /* SMP-safe */ @@ -203,7 +203,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/namei.c { unsigned long hash; struct qstr this; -@@ -1036,11 +1109,16 @@ +@@ -1073,11 +1146,16 @@ } this.hash = end_name_hash(hash); @@ -221,7 +221,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/namei.c /* * namei() * -@@ -1052,7 +1130,7 @@ +@@ -1089,7 +1167,7 @@ * that namei follows links, while lnamei does not. * SMP-safe */ @@ -230,7 +230,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/namei.c { char *tmp = getname(name); int err = PTR_ERR(tmp); -@@ -1064,6 +1142,12 @@ +@@ -1101,6 +1179,12 @@ return err; } @@ -243,7 +243,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/namei.c /* * It's inline, so penalty for filesystems that don't use sticky bit is * minimal. -@@ -1347,8 +1431,8 @@ +@@ -1387,8 +1471,8 @@ acc_mode |= MAY_APPEND; /* Fill in the open() intent data */ @@ -254,7 +254,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/namei.c /* * The simplest case - just a plain lookup. -@@ -1363,6 +1447,7 @@ +@@ -1403,6 +1487,7 @@ /* * Create - we need to know the parent. */ @@ -262,7 +262,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/namei.c error = path_lookup(pathname, LOOKUP_PARENT|LOOKUP_OPEN|LOOKUP_CREATE, nd); if (error) return error; -@@ -1379,7 +1464,9 @@ +@@ -1419,7 +1504,9 @@ dir = nd->dentry; nd->flags &= ~LOOKUP_PARENT; down(&dir->d_inode->i_sem); @@ -272,20 +272,20 @@ Index: linux-2.6.9-5.0.3.EL/fs/namei.c do_last: error = PTR_ERR(dentry); -@@ -1492,7 +1579,9 @@ +@@ -1532,7 +1619,9 @@ } dir = nd->dentry; down(&dir->d_inode->i_sem); + nd->flags |= LOOKUP_LAST; dentry = __lookup_hash(&nd->last, nd->dentry, nd); + nd->flags &= ~LOOKUP_LAST; - putname(nd->last.name); + __putname(nd->last.name); goto do_last; } -Index: linux-2.6.9-5.0.3.EL/fs/namespace.c +Index: linux-2.6.9-22.0.2.EL/fs/namespace.c =================================================================== ---- linux-2.6.9-5.0.3.EL.orig/fs/namespace.c 2005-02-26 14:28:01.000000000 +0200 -+++ linux-2.6.9-5.0.3.EL/fs/namespace.c 2005-02-26 23:29:02.000000000 +0200 +--- linux-2.6.9-22.0.2.EL.orig/fs/namespace.c 2006-01-25 23:40:13.000000000 -0500 ++++ linux-2.6.9-22.0.2.EL/fs/namespace.c 2006-01-26 18:46:32.000000000 -0500 @@ -61,6 +61,7 @@ INIT_LIST_HEAD(&mnt->mnt_mounts); INIT_LIST_HEAD(&mnt->mnt_list); @@ -345,11 +345,11 @@ Index: linux-2.6.9-5.0.3.EL/fs/namespace.c /* Discard magic */ if ((flags & MS_MGC_MSK) == MS_MGC_VAL) flags &= ~MS_MGC_MSK; -Index: linux-2.6.9-5.0.3.EL/fs/open.c +Index: linux-2.6.9-22.0.2.EL/fs/open.c =================================================================== ---- linux-2.6.9-5.0.3.EL.orig/fs/open.c 2005-02-26 14:28:01.000000000 +0200 -+++ linux-2.6.9-5.0.3.EL/fs/open.c 2005-02-26 23:29:02.000000000 +0200 -@@ -215,12 +215,12 @@ +--- linux-2.6.9-22.0.2.EL.orig/fs/open.c 2006-01-25 23:40:13.000000000 -0500 ++++ linux-2.6.9-22.0.2.EL/fs/open.c 2006-01-26 18:46:33.000000000 -0500 +@@ -216,12 +216,12 @@ struct nameidata nd; struct inode * inode; int error; @@ -364,7 +364,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/open.c if (error) goto out; inode = nd.dentry->d_inode; -@@ -474,6 +474,7 @@ +@@ -475,6 +475,7 @@ int old_fsuid, old_fsgid; kernel_cap_t old_cap; int res; @@ -372,7 +372,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/open.c if (mode & ~S_IRWXO) /* where's F_OK, X_OK, W_OK, R_OK? */ return -EINVAL; -@@ -498,13 +499,14 @@ +@@ -499,13 +500,14 @@ else current->cap_effective = current->cap_permitted; @@ -388,7 +388,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/open.c path_release(&nd); } -@@ -519,8 +521,9 @@ +@@ -520,8 +522,9 @@ { struct nameidata nd; int error; @@ -399,7 +399,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/open.c if (error) goto out; -@@ -572,8 +575,9 @@ +@@ -573,8 +576,9 @@ { struct nameidata nd; int error; @@ -410,7 +410,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/open.c if (error) goto out; -@@ -754,27 +758,8 @@ +@@ -755,27 +759,8 @@ * for the internal routines (ie open_namei()/follow_link() etc). 00 is * used by symlinks. */ @@ -440,7 +440,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/open.c { struct file * f; struct inode *inode; -@@ -786,6 +771,7 @@ +@@ -787,6 +772,7 @@ goto cleanup_dentry; f->f_flags = flags; f->f_mode = ((flags+1) & O_ACCMODE) | FMODE_LSEEK | FMODE_PREAD | FMODE_PWRITE; @@ -448,7 +448,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/open.c inode = dentry->d_inode; if (f->f_mode & FMODE_WRITE) { error = get_write_access(inode); -@@ -804,6 +790,7 @@ +@@ -805,6 +791,7 @@ error = f->f_op->open(inode,f); if (error) goto cleanup_all; @@ -456,7 +456,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/open.c } f->f_flags &= ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC); -@@ -829,6 +816,7 @@ +@@ -830,6 +817,7 @@ cleanup_file: put_filp(f); cleanup_dentry: @@ -464,7 +464,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/open.c dput(dentry); mntput(mnt); return ERR_PTR(error); -@@ -836,6 +824,36 @@ +@@ -837,6 +825,36 @@ EXPORT_SYMBOL(dentry_open); @@ -501,10 +501,10 @@ Index: linux-2.6.9-5.0.3.EL/fs/open.c /* * Find an empty file descriptor entry, and mark it busy. */ -Index: linux-2.6.9-5.0.3.EL/fs/stat.c +Index: linux-2.6.9-22.0.2.EL/fs/stat.c =================================================================== ---- linux-2.6.9-5.0.3.EL.orig/fs/stat.c 2005-02-26 14:28:01.000000000 +0200 -+++ linux-2.6.9-5.0.3.EL/fs/stat.c 2005-02-26 23:29:02.000000000 +0200 +--- linux-2.6.9-22.0.2.EL.orig/fs/stat.c 2006-01-25 23:40:13.000000000 -0500 ++++ linux-2.6.9-22.0.2.EL/fs/stat.c 2006-01-25 23:40:55.000000000 -0500 @@ -37,7 +37,7 @@ EXPORT_SYMBOL(generic_fillattr); @@ -574,11 +574,11 @@ Index: linux-2.6.9-5.0.3.EL/fs/stat.c fput(f); } return error; -Index: linux-2.6.9-5.0.3.EL/fs/nfs/dir.c +Index: linux-2.6.9-22.0.2.EL/fs/nfs/dir.c =================================================================== ---- linux-2.6.9-5.0.3.EL.orig/fs/nfs/dir.c 2005-02-26 14:28:01.000000000 +0200 -+++ linux-2.6.9-5.0.3.EL/fs/nfs/dir.c 2005-04-01 18:10:28.924760536 +0300 -@@ -718,7 +718,7 @@ +--- linux-2.6.9-22.0.2.EL.orig/fs/nfs/dir.c 2006-01-25 23:40:13.000000000 -0500 ++++ linux-2.6.9-22.0.2.EL/fs/nfs/dir.c 2006-01-26 18:46:32.000000000 -0500 +@@ -726,7 +726,7 @@ return 0; if (!nd || (nd->flags & LOOKUP_CONTINUE) || !(nd->flags & LOOKUP_CREATE)) return 0; @@ -587,7 +587,7 @@ Index: linux-2.6.9-5.0.3.EL/fs/nfs/dir.c } static struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, struct nameidata *nd) -@@ -1043,7 +1043,7 @@ +@@ -1057,7 +1057,7 @@ attr.ia_valid = ATTR_MODE; if (nd && (nd->flags & LOOKUP_CREATE)) @@ -596,11 +596,11 @@ Index: linux-2.6.9-5.0.3.EL/fs/nfs/dir.c /* * The 0 argument passed into the create function should one day -Index: linux-2.6.9-5.0.3.EL/fs/inode.c +Index: linux-2.6.9-22.0.2.EL/fs/inode.c =================================================================== ---- linux-2.6.9-5.0.3.EL.orig/fs/inode.c 2005-02-26 14:28:01.000000000 +0200 -+++ linux-2.6.9-5.0.3.EL/fs/inode.c 2005-02-26 23:29:02.000000000 +0200 -@@ -233,6 +233,7 @@ +--- linux-2.6.9-22.0.2.EL.orig/fs/inode.c 2006-01-25 23:40:13.000000000 -0500 ++++ linux-2.6.9-22.0.2.EL/fs/inode.c 2006-01-25 23:40:55.000000000 -0500 +@@ -235,6 +235,7 @@ inodes_stat.nr_unused--; } @@ -608,10 +608,10 @@ Index: linux-2.6.9-5.0.3.EL/fs/inode.c /** * clear_inode - clear an inode * @inode: inode to clear -Index: linux-2.6.9-5.0.3.EL/include/linux/dcache.h +Index: linux-2.6.9-22.0.2.EL/include/linux/dcache.h =================================================================== ---- linux-2.6.9-5.0.3.EL.orig/include/linux/dcache.h 2005-02-26 14:28:01.000000000 +0200 -+++ linux-2.6.9-5.0.3.EL/include/linux/dcache.h 2005-02-26 23:29:02.000000000 +0200 +--- linux-2.6.9-22.0.2.EL.orig/include/linux/dcache.h 2006-01-25 23:40:13.000000000 -0500 ++++ linux-2.6.9-22.0.2.EL/include/linux/dcache.h 2006-01-26 18:46:32.000000000 -0500 @@ -4,6 +4,7 @@ #ifdef __KERNEL__ @@ -629,11 +629,11 @@ Index: linux-2.6.9-5.0.3.EL/include/linux/dcache.h struct dentry_stat_t { int nr_dentry; int nr_unused; -Index: linux-2.6.9-5.0.3.EL/include/linux/fs.h +Index: linux-2.6.9-22.0.2.EL/include/linux/fs.h =================================================================== ---- linux-2.6.9-5.0.3.EL.orig/include/linux/fs.h 2005-02-26 14:28:01.000000000 +0200 -+++ linux-2.6.9-5.0.3.EL/include/linux/fs.h 2005-02-26 23:29:02.000000000 +0200 -@@ -74,6 +74,7 @@ +--- linux-2.6.9-22.0.2.EL.orig/include/linux/fs.h 2006-01-25 23:40:13.000000000 -0500 ++++ linux-2.6.9-22.0.2.EL/include/linux/fs.h 2006-01-26 18:46:33.000000000 -0500 +@@ -75,6 +75,7 @@ #define FMODE_READ 1 #define FMODE_WRITE 2 @@ -641,7 +641,7 @@ Index: linux-2.6.9-5.0.3.EL/include/linux/fs.h /* Internal kernel extensions */ #define FMODE_LSEEK 4 -@@ -258,6 +259,8 @@ +@@ -259,6 +260,8 @@ #define ATTR_ATTR_FLAG 1024 #define ATTR_KILL_SUID 2048 #define ATTR_KILL_SGID 4096 @@ -650,7 +650,7 @@ Index: linux-2.6.9-5.0.3.EL/include/linux/fs.h /* * This is the Inode Attributes structure, used for notify_change(). It -@@ -456,6 +459,7 @@ +@@ -457,6 +460,7 @@ struct block_device *i_bdev; struct cdev *i_cdev; int i_cindex; @@ -658,7 +658,7 @@ Index: linux-2.6.9-5.0.3.EL/include/linux/fs.h __u32 i_generation; -@@ -589,6 +593,7 @@ +@@ -590,6 +594,7 @@ spinlock_t f_ep_lock; #endif /* #ifdef CONFIG_EPOLL */ struct address_space *f_mapping; @@ -666,7 +666,7 @@ Index: linux-2.6.9-5.0.3.EL/include/linux/fs.h }; extern spinlock_t files_lock; #define file_list_lock() spin_lock(&files_lock); -@@ -934,7 +939,9 @@ +@@ -960,7 +965,9 @@ void (*truncate) (struct inode *); int (*permission) (struct inode *, int, struct nameidata *); int (*setattr) (struct dentry *, struct iattr *); @@ -676,7 +676,7 @@ Index: linux-2.6.9-5.0.3.EL/include/linux/fs.h int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t); ssize_t (*listxattr) (struct dentry *, char *, size_t); -@@ -974,6 +981,7 @@ +@@ -1000,6 +1007,7 @@ int (*remount_fs) (struct super_block *, int *, char *); void (*clear_inode) (struct inode *); void (*umount_begin) (struct super_block *); @@ -684,7 +684,7 @@ Index: linux-2.6.9-5.0.3.EL/include/linux/fs.h int (*show_options)(struct seq_file *, struct vfsmount *); }; -@@ -1164,6 +1172,7 @@ +@@ -1192,6 +1200,7 @@ extern struct vfsmount *kern_mount(struct file_system_type *); extern int may_umount_tree(struct vfsmount *); extern int may_umount(struct vfsmount *); @@ -692,7 +692,7 @@ Index: linux-2.6.9-5.0.3.EL/include/linux/fs.h extern long do_mount(char *, char *, char *, unsigned long, void *); extern int vfs_statfs(struct super_block *, struct kstatfs *); -@@ -1228,6 +1237,7 @@ +@@ -1256,6 +1265,7 @@ extern int do_truncate(struct dentry *, loff_t start); extern struct file *filp_open(const char *, int, int); extern struct file * dentry_open(struct dentry *, struct vfsmount *, int); @@ -700,10 +700,10 @@ Index: linux-2.6.9-5.0.3.EL/include/linux/fs.h extern int filp_close(struct file *, fl_owner_t id); extern char * getname(const char __user *); -Index: linux-2.6.9-5.0.3.EL/include/linux/namei.h +Index: linux-2.6.9-22.0.2.EL/include/linux/namei.h =================================================================== ---- linux-2.6.9-5.0.3.EL.orig/include/linux/namei.h 2005-02-26 14:28:01.000000000 +0200 -+++ linux-2.6.9-5.0.3.EL/include/linux/namei.h 2005-02-26 23:29:02.000000000 +0200 +--- linux-2.6.9-22.0.2.EL.orig/include/linux/namei.h 2006-01-25 23:40:13.000000000 -0500 ++++ linux-2.6.9-22.0.2.EL/include/linux/namei.h 2006-01-25 23:40:55.000000000 -0500 @@ -2,14 +2,48 @@ #define _LINUX_NAMEI_H @@ -777,7 +777,7 @@ Index: linux-2.6.9-5.0.3.EL/include/linux/namei.h /* * Intent data -@@ -56,6 +90,12 @@ +@@ -56,6 +89,12 @@ #define LOOKUP_ACCESS (0x0400) extern int FASTCALL(__user_walk(const char __user *, unsigned, struct nameidata *)); @@ -790,7 +790,7 @@ Index: linux-2.6.9-5.0.3.EL/include/linux/namei.h #define user_path_walk(name,nd) \ __user_walk(name, LOOKUP_FOLLOW, nd) #define user_path_walk_link(name,nd) \ -@@ -68,7 +108,6 @@ +@@ -68,7 +107,6 @@ extern struct dentry * lookup_one_len(const char *, struct dentry *, int); extern struct dentry * lookup_hash(struct qstr *, struct dentry *); @@ -798,10 +798,10 @@ Index: linux-2.6.9-5.0.3.EL/include/linux/namei.h extern int follow_down(struct vfsmount **, struct dentry **); extern int follow_up(struct vfsmount **, struct dentry **); -Index: linux-2.6.9-5.0.3.EL/include/linux/mount.h +Index: linux-2.6.9-22.0.2.EL/include/linux/mount.h =================================================================== ---- linux-2.6.9-5.0.3.EL.orig/include/linux/mount.h 2005-02-26 14:28:01.000000000 +0200 -+++ linux-2.6.9-5.0.3.EL/include/linux/mount.h 2005-02-26 23:29:02.000000000 +0200 +--- linux-2.6.9-22.0.2.EL.orig/include/linux/mount.h 2006-01-25 23:40:13.000000000 -0500 ++++ linux-2.6.9-22.0.2.EL/include/linux/mount.h 2006-01-25 23:40:55.000000000 -0500 @@ -34,6 +34,8 @@ struct list_head mnt_list; struct list_head mnt_fslink; /* link in fs-specific expiry list */ diff --git a/lustre/kernel_patches/targets/2.6-rhel4.target.in b/lustre/kernel_patches/targets/2.6-rhel4.target.in index 307353a..db5c9fa 100644 --- a/lustre/kernel_patches/targets/2.6-rhel4.target.in +++ b/lustre/kernel_patches/targets/2.6-rhel4.target.in @@ -1,5 +1,5 @@ lnxmaj="2.6.9" -lnxrel="22.EL" +lnxrel="22.0.2.EL" KERNEL=linux-${lnxmaj}-${lnxrel}.tar.bz2 SERIES=2.6-rhel4.series diff --git a/lustre/kernel_patches/targets/2.6-suse.target.in b/lustre/kernel_patches/targets/2.6-suse.target.in index d604f6e..a0a2633 100644 --- a/lustre/kernel_patches/targets/2.6-suse.target.in +++ b/lustre/kernel_patches/targets/2.6-suse.target.in @@ -1,5 +1,5 @@ lnxmaj="2.6.5" -lnxrel="7.201" +lnxrel="7.244" KERNEL=linux-$lnxmaj-$lnxrel.tar.bz2 # they include our patches diff --git a/lustre/ldlm/ldlm_lib.c b/lustre/ldlm/ldlm_lib.c index b84e6e3..0bb67db 100644 --- a/lustre/ldlm/ldlm_lib.c +++ b/lustre/ldlm/ldlm_lib.c @@ -535,9 +535,8 @@ int target_handle_connect(struct ptlrpc_request *req, svc_handler_t handler) obd_str2uuid (&tgtuuid, str); target = class_uuid2obd(&tgtuuid); - if (!target) { + if (!target) target = class_name2obd(str); - } if (!target || target->obd_stopping || !target->obd_set_up) { DEBUG_REQ(D_ERROR, req, "UUID '%s' is not available " @@ -624,8 +623,9 @@ int target_handle_connect(struct ptlrpc_request *req, svc_handler_t handler) if (!export) { spin_unlock(&target->obd_dev_lock); } else if (req->rq_reqmsg->conn_cnt == 1) { - CERROR("%s reconnected with 1 conn_cnt; cookies not random?\n", - cluuid.uuid); + CERROR("%s: NID %s (%s) reconnected with 1 conn_cnt; " + "cookies not random?\n", target->obd_name, + libcfs_nid2str(req->rq_peer.nid), cluuid.uuid); GOTO(out, rc = -EALREADY); } @@ -648,9 +648,10 @@ int target_handle_connect(struct ptlrpc_request *req, svc_handler_t handler) if (export == NULL) { if (target->obd_recovering) { - CERROR("%s: denying connection for new client %s: " + CERROR("%s: denying connection for new client %s (%s): " "%d clients in recovery for %lds\n", - target->obd_name, cluuid.uuid, + target->obd_name, + libcfs_nid2str(req->rq_peer.nid), cluuid.uuid, target->obd_recoverable_clients, (target->obd_recovery_timer.expires-jiffies)/HZ); rc = -EBUSY; @@ -698,9 +699,9 @@ int target_handle_connect(struct ptlrpc_request *req, svc_handler_t handler) spin_lock_irqsave(&export->exp_lock, flags); if (export->exp_conn_cnt >= req->rq_reqmsg->conn_cnt) { - CERROR("%s: already connected at a higher conn_cnt: %d > %d\n", - cluuid.uuid, export->exp_conn_cnt, - req->rq_reqmsg->conn_cnt); + CERROR("%s: %s already connected at higher conn_cnt: %d > %d\n", + cluuid.uuid, libcfs_nid2str(req->rq_peer.nid), + export->exp_conn_cnt, req->rq_reqmsg->conn_cnt); spin_unlock_irqrestore(&export->exp_lock, flags); GOTO(out, rc = -EALREADY); } @@ -748,7 +749,6 @@ out: int target_handle_disconnect(struct ptlrpc_request *req) { - struct obd_export *exp; int rc; ENTRY; @@ -757,8 +757,7 @@ int target_handle_disconnect(struct ptlrpc_request *req) RETURN(rc); /* keep the rq_export around so we can send the reply */ - exp = class_export_get(req->rq_export); - req->rq_status = obd_disconnect(exp); + req->rq_status = obd_disconnect(class_export_get(req->rq_export)); RETURN(0); } diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c index f80389d..d5c30af 100644 --- a/lustre/ldlm/ldlm_lockd.c +++ b/lustre/ldlm/ldlm_lockd.c @@ -393,6 +393,12 @@ static int ldlm_handle_ast_error(struct ldlm_lock *lock, libcfs_nid2str(peer.nid)); ldlm_lock_cancel(lock); rc = -ERESTART; + } else if (lock->l_flags & LDLM_FL_CANCEL) { + LDLM_DEBUG(lock, "%s AST timeout from nid %s, but " + "cancel was received (AST reply lost?)", + ast_type, libcfs_nid2str(peer.nid)); + ldlm_lock_cancel(lock); + rc = -ERESTART; } else { l_lock(&lock->l_resource->lr_namespace->ns_lock); ldlm_del_waiting_lock(lock); diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c index ca3aab4..6859ca7 100644 --- a/lustre/mdc/mdc_request.c +++ b/lustre/mdc/mdc_request.c @@ -609,43 +609,6 @@ static void mdc_commit_close(struct ptlrpc_request *req) spin_unlock(&open_req->rq_lock); } -static int mdc_close_interpret(struct ptlrpc_request *req, void *data, int rc) -{ - union ptlrpc_async_args *aa = data; - struct mdc_rpc_lock *rpc_lock; - struct obd_device *obd = aa->pointer_arg[1]; - unsigned long flags; - - spin_lock_irqsave(&req->rq_lock, flags); - rpc_lock = aa->pointer_arg[0]; - aa->pointer_arg[0] = NULL; - spin_unlock_irqrestore(&req->rq_lock, flags); - - if (rpc_lock == NULL) { - CERROR("called with NULL rpc_lock\n"); - } else { - LASSERTF(rpc_lock == obd->u.cli.cl_rpc_lock, "%p != %p\n", - rpc_lock, obd->u.cli.cl_rpc_lock); - mdc_put_rpc_lock(rpc_lock, NULL); - } - wake_up(&req->rq_reply_waitq); - RETURN(rc); -} - -/* We can't use ptlrpc_check_reply, because we don't want to wake up for - * anything but a reply or an error. */ -static int mdc_close_check_reply(struct ptlrpc_request *req) -{ - int rc = 0; - unsigned long flags; - - spin_lock_irqsave(&req->rq_lock, flags); - if (req->rq_async_args.pointer_arg[0] == NULL) - rc = 1; - spin_unlock_irqrestore (&req->rq_lock, flags); - return rc; -} - int mdc_close(struct obd_export *exp, struct obdo *oa, struct obd_client_handle *och, struct ptlrpc_request **request) { @@ -656,7 +619,6 @@ int mdc_close(struct obd_export *exp, struct obdo *oa, obd->u.cli.cl_max_mds_cookiesize}; struct ptlrpc_request *req; struct mdc_open_data *mod; - struct l_wait_info lwi; ENTRY; req = ptlrpc_prep_req(class_exp2cliimp(exp), LUSTRE_MDS_VERSION, @@ -690,21 +652,10 @@ int mdc_close(struct obd_export *exp, struct obdo *oa, LASSERT(req->rq_cb_data == NULL); req->rq_cb_data = mod; - CDEBUG(D_HA, "close req->rep_len %d mdsize %d cookiesize %d\n", - req->rq_replen, - obd->u.cli.cl_max_mds_easize, obd->u.cli.cl_max_mds_cookiesize); - - /* We hand a ref to the rpcd here, so we need another one of our own. */ - ptlrpc_request_addref(req); - mdc_get_rpc_lock(obd->u.cli.cl_rpc_lock, NULL); - req->rq_interpret_reply = mdc_close_interpret; - req->rq_async_args.pointer_arg[0] = obd->u.cli.cl_rpc_lock; - req->rq_async_args.pointer_arg[1] = obd; - ptlrpcd_add_req(req); - lwi = LWI_TIMEOUT_INTR(MAX(req->rq_timeout * HZ, 1), NULL, NULL, NULL); - rc = l_wait_event(req->rq_reply_waitq, mdc_close_check_reply(req), - &lwi); + rc = ptlrpc_queue_wait(req); + mdc_put_rpc_lock(obd->u.cli.cl_rpc_lock, NULL); + if (req->rq_repmsg == NULL) { CDEBUG(D_HA, "request failed to send: %p, %d\n", req, req->rq_status); @@ -727,14 +678,10 @@ int mdc_close(struct obd_export *exp, struct obdo *oa, rc = -EPROTO; } } - if (req->rq_async_args.pointer_arg[0] != NULL) { - CERROR("returned without dropping rpc_lock: rc %d\n", rc); - mdc_close_interpret(req, &req->rq_async_args, rc); - } EXIT; - out: *request = req; + out: return rc; } diff --git a/lustre/mds/mds_open.c b/lustre/mds/mds_open.c index 652b7eb..29545a3 100644 --- a/lustre/mds/mds_open.c +++ b/lustre/mds/mds_open.c @@ -777,28 +777,23 @@ static int mds_open_by_fid(struct ptlrpc_request *req, struct ll_fid *fid, if (dchild->d_inode != NULL) { mds_inode_set_orphan(dchild->d_inode); - mds_pack_inode2fid(&body->fid1, dchild->d_inode); - mds_pack_inode2body(body, dchild->d_inode); - intent_set_disposition(rep, DISP_LOOKUP_EXECD); - intent_set_disposition(rep, DISP_LOOKUP_POS); CWARN("Orphan %s found and opened in PENDING directory\n", fidname); - goto open; - } - l_dput(dchild); + } else { + l_dput(dchild); - /* We didn't find it in PENDING so it isn't an orphan. See - * if it was a regular inode that was previously created. */ - dchild = mds_fid2dentry(mds, fid, NULL); - if (IS_ERR(dchild)) - RETURN(PTR_ERR(dchild)); + /* We didn't find it in PENDING so it isn't an orphan. See + * if it was a regular inode that was previously created. */ + dchild = mds_fid2dentry(mds, fid, NULL); + if (IS_ERR(dchild)) + RETURN(PTR_ERR(dchild)); + } mds_pack_inode2fid(&body->fid1, dchild->d_inode); mds_pack_inode2body(body, dchild->d_inode); intent_set_disposition(rep, DISP_LOOKUP_EXECD); intent_set_disposition(rep, DISP_LOOKUP_POS); - open: rc = mds_finish_open(req, dchild, body, flags, &handle, rec, rep, NULL); rc = mds_finish_transno(mds, dchild->d_inode, handle, req, rc, rep ? rep->lock_policy_res1 : 0); diff --git a/lustre/mds/mds_reint.c b/lustre/mds/mds_reint.c index 37b16c5..3fa1b22 100644 --- a/lustre/mds/mds_reint.c +++ b/lustre/mds/mds_reint.c @@ -115,8 +115,10 @@ int mds_finish_transno(struct mds_obd *mds, struct inode *inode, void *handle, /* if the export has already been failed, we have no last_rcvd slot */ if (req->rq_export->exp_failed) { - CWARN("committing transaction for disconnected client %s\n", - req->rq_export->exp_client_uuid.uuid); + CWARN("commit transaction for disconnected client %s: rc %d\n", + req->rq_export->exp_client_uuid.uuid, rc); + if (rc == 0) + rc = -ENOTCONN; if (handle) GOTO(commit, rc); RETURN(rc); @@ -334,8 +336,7 @@ void mds_steal_ack_locks(struct ptlrpc_request *req) ptlrpc_schedule_difficult_reply (oldrep); spin_unlock (&svc->srv_lock); - spin_unlock_irqrestore (&exp->exp_lock, flags); - return; + break; } spin_unlock_irqrestore (&exp->exp_lock, flags); } diff --git a/lustre/obdecho/echo_client.c b/lustre/obdecho/echo_client.c index 9eed26e..bd5fa50 100644 --- a/lustre/obdecho/echo_client.c +++ b/lustre/obdecho/echo_client.c @@ -515,11 +515,11 @@ static int echo_client_kbrw(struct obd_device *obd, int rw, struct obdo *oa, gfp_mask = ((oa->o_id & 2) == 0) ? GFP_KERNEL : GFP_HIGHUSER; LASSERT(rw == OBD_BRW_WRITE || rw == OBD_BRW_READ); + LASSERT(lsm != NULL); + LASSERT(lsm->lsm_object_id == oa->o_id); if (count <= 0 || - (count & (PAGE_SIZE - 1)) != 0 || - (lsm != NULL && - lsm->lsm_object_id != oa->o_id)) + (count & (PAGE_SIZE - 1)) != 0) return (-EINVAL); /* XXX think again with misaligned I/O */ diff --git a/lustre/scripts/lustre b/lustre/scripts/lustre index 2444c65..89edc5b 100755 --- a/lustre/scripts/lustre +++ b/lustre/scripts/lustre @@ -135,33 +135,38 @@ restart() { status() { STATE="stopped" + RETVAL=1 egrep -q "libcfs|lvfs|portals" /proc/modules && STATE="loaded" # check for any routes - on a portals router this is the only thing - [ "`cat /proc/sys/lnet/routes 2> /dev/null`" ] && STATE="running" + [ "`cat /proc/sys/lnet/routes 2> /dev/null`" ] && STATE="running" && RETVAL=0 # check for any configured devices (may indicate partial startup) - [ "`cat /proc/fs/lustre/devices 2> /dev/null`" ] && STATE="partial" + [ "`cat /proc/fs/lustre/devices 2> /dev/null`" ] && STATE="partial" && RETVAL=1 # check for either a server or a client filesystem MDS="`ls /proc/fs/lustre/mds/*/recovery_status 2> /dev/null`" OST="`ls /proc/fs/lustre/obdfilter/*/recovery_status 2> /dev/null`" LLITE="`ls /proc/fs/lustre/llite/fs* 2> /dev/null`" - [ "$MDS" -o "$OST" -o "$LLITE" ] && STATE="running" + [ "$MDS" -o "$OST" -o "$LLITE" ] && STATE="running" && RETVAL=0 # check for server disconnections DISCON="`grep -v FULL /proc/fs/lustre/*c/*/*server_uuid 2> /dev/null`" - [ "$DISCON" ] && STATE="disconnected" + [ "$DISCON" ] && STATE="disconnected" && RETVAL=0 # check for servers in recovery - [ "$MDS$OST" ] && grep -q RECOV $MDS $OST && STATE="recovery" + [ "$MDS$OST" ] && grep -q RECOV $MDS $OST && STATE="recovery" && RETVAL=0 - # check for error in health_check - HEALTH="/proc/fs/lustre/health_check" - [ -f "$HEALTH" ] && grep -q "NOT HEALTHY" $HEALTH && STATE="unhealthy" + # check for error in health_check + HEALTH="/proc/fs/lustre/health_check" + [ -f "$HEALTH" ] && grep -q "NOT HEALTHY" $HEALTH && STATE="unhealthy" && RETVAL=2 - # check for LBUG - [ -f "$HEALTH" ] && grep -q "LBUG" $HEALTH && STATE="LBUG" + # check for LBUG + [ -f "$HEALTH" ] && grep -q "LBUG" $HEALTH && STATE="LBUG" && RETVAL=3 + + # Check if the service really exists + DUMMY=`lctl dl | grep $SERVICE` + [ $? -ne 0 ] && STATE="not_found" && RETVAL=5 echo $STATE } diff --git a/lustre/tests/recovery-small.sh b/lustre/tests/recovery-small.sh index ecf3719..6256185 100755 --- a/lustre/tests/recovery-small.sh +++ b/lustre/tests/recovery-small.sh @@ -136,7 +136,7 @@ run_test 9 "pause bulk on OST (bug 1420)" #bug 1521 test_10() { do_facet client mcreate $MOUNT/$tfile || return 1 - drop_bl_callback "chmod 0777 $MOUNT/$tfile" || return 2 + drop_bl_callback "chmod 0777 $MOUNT/$tfile" || echo "evicted as expected" # wait for the mds to evict the client #echo "sleep $(($TIMEOUT*2))" #sleep $(($TIMEOUT*2)) @@ -155,8 +155,7 @@ test_11(){ cancel_lru_locks OSC do_facet client multiop $MOUNT/$tfile or || return 3 - drop_bl_callback multiop $MOUNT/$tfile Ow || - echo "client evicted, as expected" + drop_bl_callback multiop $MOUNT/$tfile Ow || echo "evicted as expected" do_facet client munlink $MOUNT/$tfile || return 4 } @@ -316,7 +315,7 @@ run_test 18b "eviction and reconnect clears page cache (2766)" test_19a() { f=$MOUNT/$tfile do_facet client mcreate $f || return 1 - drop_ldlm_cancel "chmod 0777 $f" || echo evicted + drop_ldlm_cancel "chmod 0777 $f" || echo "evicted as expected" do_facet client checkstat -v -p 0777 $f || echo evicted # let the client reconnect @@ -446,8 +445,8 @@ test_27() { run_test 27 "fail LOV while using OSC's" test_28() { # bug 6086 - error adding new clients - do_facet client mcreate $MOUNT/$tfile || return 1 - drop_bl_callback "chmod 0777 $MOUNT/$tfile" || return 2 + do_facet client mcreate $MOUNT/$tfile || return 1 + drop_bl_callback "chmod 0777 $MOUNT/$tfile" ||echo "evicted as expected" #define OBD_FAIL_MDS_ADD_CLIENT 0x12f do_facet mds sysctl -w lustre.fail_loc=0x8000012f # fail once (evicted), reconnect fail (fail_loc), ok -- 1.8.3.1