From 0613b30bc5f541c955be08f13c31a24bd3005c6f Mon Sep 17 00:00:00 2001 From: shadow Date: Mon, 28 Jan 2008 15:33:30 +0000 Subject: [PATCH] fix LBUG in ptlrpc_check_set() "bad phase ebc0de00" b=12228 i=nikita i=johann --- lustre/ChangeLog | 6 ++++++ lustre/include/lustre/liblustreapi.h | 9 +++++++-- lustre/include/lustre_export.h | 2 +- lustre/include/lustre_import.h | 2 +- lustre/include/lustre_net.h | 22 ++++++++++----------- lustre/include/obd.h | 38 ++++++++++++++++++------------------ 6 files changed, 45 insertions(+), 34 deletions(-) diff --git a/lustre/ChangeLog b/lustre/ChangeLog index 611ac96..a4b0cdd 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -18,6 +18,12 @@ tbd Sun Microsystems, Inc. removed cwd "./" (refer to Bugzilla 14399). Severity : normal +Bugzilla : 12228 +Description: LBUG in ptlrpc_check_set() bad phase ebc0de00 +Details : access to bitfield in structure is always rounded to long + and this produce problem with not atomic change any bit. + +Severity : normal Bugzilla : 13647 Description: Lustre make rpms failed. Details : Remove ldiskfs spec file to avoids rpmbuild be confused when diff --git a/lustre/include/lustre/liblustreapi.h b/lustre/include/lustre/liblustreapi.h index eb45937..4d6c802 100644 --- a/lustre/include/lustre/liblustreapi.h +++ b/lustre/include/lustre/liblustreapi.h @@ -60,8 +60,13 @@ struct find_param { unsigned long long size_units; int size_check; - unsigned zeroend:1, recursive:1, got_uuids:1, obds_printed:1, - exclude_pattern:1, exclude_type:1, have_fileinfo:1; + unsigned long zeroend:1, + recursive:1, + got_uuids:1, + obds_printed:1, + exclude_pattern:1, + exclude_type:1, + have_fileinfo:1; int verbose; int quiet; diff --git a/lustre/include/lustre_export.h b/lustre/include/lustre_export.h index dab7bad..233f6e6 100644 --- a/lustre/include/lustre_export.h +++ b/lustre/include/lustre_export.h @@ -91,7 +91,7 @@ struct obd_export { /* ^ protects exp_outstanding_replies too */ __u64 exp_connect_flags; int exp_flags; - unsigned int exp_failed:1, + unsigned long exp_failed:1, exp_disconnected:1, exp_connecting:1, exp_replay_needed:1, diff --git a/lustre/include/lustre_import.h b/lustre/include/lustre_import.h index 9879f95..fb66323 100644 --- a/lustre/include/lustre_import.h +++ b/lustre/include/lustre_import.h @@ -112,7 +112,7 @@ struct obd_import { spinlock_t imp_lock; /* flags */ - unsigned int imp_invalid:1, /* evicted */ + unsigned long imp_invalid:1, /* evicted */ imp_deactive:1, /* administratively disabled */ imp_replayable:1, /* try to recover the import */ imp_dlm_fake:1, /* don't run recovery (timeout instead) */ diff --git a/lustre/include/lustre_net.h b/lustre/include/lustre_net.h index f72921b..67d86bf 100644 --- a/lustre/include/lustre_net.h +++ b/lustre/include/lustre_net.h @@ -218,12 +218,12 @@ struct ptlrpc_reply_state { struct list_head rs_debug_list; #endif /* updates to following flag serialised by srv_request_lock */ - unsigned int rs_difficult:1; /* ACK/commit stuff */ - unsigned int rs_scheduled:1; /* being handled? */ - unsigned int rs_scheduled_ever:1;/* any schedule attempts? */ - unsigned int rs_handled:1; /* been handled yet? */ - unsigned int rs_on_net:1; /* reply_out_callback pending? */ - unsigned int rs_prealloc:1; /* rs from prealloc list */ + unsigned long rs_difficult:1; /* ACK/commit stuff */ + unsigned long rs_scheduled:1; /* being handled? */ + unsigned long rs_scheduled_ever:1;/* any schedule attempts? */ + unsigned long rs_handled:1; /* been handled yet? */ + unsigned long rs_on_net:1; /* reply_out_callback pending? */ + unsigned long rs_prealloc:1; /* rs from prealloc list */ int rs_size; __u64 rs_transno; @@ -267,7 +267,7 @@ struct ptlrpc_request { int rq_status; spinlock_t rq_lock; /* client-side flags are serialized by rq_lock */ - unsigned int rq_intr:1, rq_replied:1, rq_err:1, + unsigned long rq_intr:1, rq_replied:1, rq_err:1, rq_timedout:1, rq_resend:1, rq_restart:1, /* * when ->rq_replay is set, request is kept by the client even @@ -459,10 +459,10 @@ struct ptlrpc_bulk_page { #define BULK_PUT_SOURCE 3 struct ptlrpc_bulk_desc { - unsigned int bd_success:1; /* completed successfully */ - unsigned int bd_network_rw:1; /* accessible to the network */ - unsigned int bd_type:2; /* {put,get}{source,sink} */ - unsigned int bd_registered:1; /* client side */ + unsigned long bd_success:1; /* completed successfully */ + unsigned long bd_network_rw:1; /* accessible to the network */ + unsigned long bd_type:2; /* {put,get}{source,sink} */ + unsigned long bd_registered:1; /* client side */ spinlock_t bd_lock; /* serialise with callback */ int bd_import_generation; struct obd_export *bd_export; diff --git a/lustre/include/obd.h b/lustre/include/obd.h index a846bdb..cf80b7a 100644 --- a/lustre/include/obd.h +++ b/lustre/include/obd.h @@ -66,7 +66,7 @@ struct lov_oinfo { /* per-stripe data structure */ struct list_head loi_write_item; struct list_head loi_read_item; - unsigned loi_kms_valid:1; + unsigned long loi_kms_valid:1; __u64 loi_kms; /* known minimum size */ struct ost_lvb loi_lvb; struct osc_async_rc loi_ar; @@ -229,7 +229,7 @@ struct oig_callback_context { * callees of this method are encouraged to abort their state * in the oig. This may be called multiple times. */ void (*occ_interrupted)(struct oig_callback_context *occ); - unsigned int interrupted:1; + unsigned long interrupted:1; }; /* Individual type definitions */ @@ -407,7 +407,7 @@ struct client_obd { struct obd_export *cl_mgc_mgsexp; /* Flags section */ - unsigned int cl_checksum:1; /* debug checksums */ + unsigned long cl_checksum:1; /* debug checksums */ /* also protected by the poorly named _loi_list_lock lock above */ struct osc_async_rc cl_ar; @@ -557,7 +557,7 @@ struct lov_qos { __u32 *lq_rr_array; /* round-robin optimized list */ unsigned int lq_rr_size; /* rr array size */ unsigned int lq_prio_free; /* priority for free space */ - unsigned int lq_dirty:1, /* recalc qos data */ + unsigned long lq_dirty:1, /* recalc qos data */ lq_dirty_rr:1, /* recalc round-robin list */ lq_same_space:1,/* the ost's all have approx. the same space avail */ @@ -570,7 +570,7 @@ struct lov_tgt_desc { struct ltd_qos ltd_qos; /* qos info per target */ __u32 ltd_gen; __u32 ltd_index; /* index in lov_obd->tgts */ - unsigned int ltd_active:1,/* is this target up for requests */ + unsigned long ltd_active:1,/* is this target up for requests */ ltd_activate:1,/* should this target be activated */ ltd_reap:1; /* should this target be deleted */ }; @@ -756,20 +756,20 @@ struct obd_device { struct obd_uuid obd_uuid; int obd_minor; - unsigned int obd_attached:1, /* finished attach */ - obd_set_up:1, /* finished setup */ - obd_recovering:1, /* there are recoverable clients */ - obd_abort_recovery:1,/* somebody ioctl'ed us to abort */ - obd_replayable:1, /* recovery is enabled; inform clients */ - obd_no_transno:1, /* no committed-transno notification */ - obd_no_recov:1, /* fail instead of retry messages */ - obd_stopping:1, /* started cleanup */ - obd_starting:1, /* started setup */ - obd_force:1, /* cleanup with > 0 obd refcount */ - obd_fail:1, /* cleanup with failover */ - obd_async_recov:1, /* allow asyncronous orphan cleanup */ - obd_no_conn:1, /* deny new connections */ - obd_inactive:1; /* device active/inactive + unsigned long obd_attached:1, /* finished attach */ + obd_set_up:1, /* finished setup */ + obd_recovering:1, /* there are recoverable clients */ + obd_abort_recovery:1,/* somebody ioctl'ed us to abort */ + obd_replayable:1, /* recovery is enabled; inform clients */ + obd_no_transno:1, /* no committed-transno notification */ + obd_no_recov:1, /* fail instead of retry messages */ + obd_stopping:1, /* started cleanup */ + obd_starting:1, /* started setup */ + obd_force:1, /* cleanup with > 0 obd refcount */ + obd_fail:1, /* cleanup with failover */ + obd_async_recov:1, /* allow asyncronous orphan cleanup */ + obd_no_conn:1, /* deny new connections */ + obd_inactive:1; /* device active/inactive * (for /proc/status only!!) */ /* uuid-export hash body */ struct lustre_class_hash_body *obd_uuid_hash_body; -- 1.8.3.1