From 26d49aadf2a7c9791332af797ffc425e4f6e0161 Mon Sep 17 00:00:00 2001 From: shadow Date: Mon, 28 Jan 2008 15:34:38 +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 | 24 +++++++++++----------- lustre/include/obd.h | 40 ++++++++++++++++++------------------ 6 files changed, 47 insertions(+), 36 deletions(-) diff --git a/lustre/ChangeLog b/lustre/ChangeLog index d933b24..3422dfb 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -13,6 +13,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 bc17911..cf63180 100644 --- a/lustre/include/lustre/liblustreapi.h +++ b/lustre/include/lustre/liblustreapi.h @@ -59,8 +59,13 @@ struct find_param { int size_sign; unsigned long long size_units; - 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 5c8719d..047c98c 100644 --- a/lustre/include/lustre_export.h +++ b/lustre/include/lustre_export.h @@ -104,7 +104,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_in_recovery:1, exp_disconnected:1, exp_connecting:1, diff --git a/lustre/include/lustre_import.h b/lustre/include/lustre_import.h index 76197c9..5dee54a 100644 --- a/lustre/include/lustre_import.h +++ b/lustre/include/lustre_import.h @@ -90,7 +90,7 @@ struct obd_import { spinlock_t imp_lock; /* flags */ - unsigned int imp_no_timeout:1, /* timeouts are disabled */ + unsigned long imp_no_timeout:1, /* timeouts are disabled */ imp_invalid:1, /* evicted */ imp_deactive:1, /* administratively disabled */ imp_replayable:1, /* try to recover the import */ diff --git a/lustre/include/lustre_net.h b/lustre/include/lustre_net.h index 4f5bc8a..0635010 100644 --- a/lustre/include/lustre_net.h +++ b/lustre/include/lustre_net.h @@ -242,12 +242,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; @@ -297,7 +297,7 @@ struct ptlrpc_request { int rq_status; spinlock_t rq_lock; /* client-side flags */ - 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 @@ -339,7 +339,7 @@ struct ptlrpc_request { struct list_head rq_ctx_chain; /* link to waited ctx */ ptlrpc_sec_flavor_t rq_sec_flavor; /* client & server */ /* client security flags */ - unsigned int rq_ctx_init:1, /* context initiation */ + unsigned long rq_ctx_init:1, /* context initiation */ rq_ctx_fini:1, /* context destroy */ rq_bulk_read:1, /* request bulk read */ rq_bulk_write:1, /* request bulk write */ @@ -524,10 +524,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 91afc47..b5c14c0 100644 --- a/lustre/include/obd.h +++ b/lustre/include/obd.h @@ -69,7 +69,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; @@ -238,7 +238,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 */ @@ -464,7 +464,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; @@ -631,7 +631,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 */ @@ -644,7 +644,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 */ }; @@ -863,21 +863,21 @@ struct obd_device { struct lu_device *obd_lu_dev; 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_req_replaying:1, /* replaying requests */ - 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_req_replaying:1, /* replaying requests */ + 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