mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-16 05:26:07 +00:00
gfs2: Save ip from gfs2_glock_nq_init
Before this patch, when a glock was locked by function gfs2_glock_nq_init, it initialized the holder gh_ip (return address) as gfs2_glock_nq_init. That made it extremely difficult to track down problems because many functions call gfs2_glock_nq_init. This patch changes the function so that it saves gh_ip from the caller of gfs2_glock_nq_init, which makes it easy to backtrack which holder took the lock. Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com> Signed-off-by: Bob Peterson <rpeterso@redhat.com>
This commit is contained in:
parent
a500bd3155
commit
b016d9a84a
@ -911,7 +911,7 @@ static void gfs2_glock_poke(struct gfs2_glock *gl)
|
||||
struct gfs2_holder gh;
|
||||
int error;
|
||||
|
||||
gfs2_holder_init(gl, LM_ST_SHARED, flags, &gh);
|
||||
__gfs2_holder_init(gl, LM_ST_SHARED, flags, &gh, _RET_IP_);
|
||||
error = gfs2_glock_nq(&gh);
|
||||
if (!error)
|
||||
gfs2_glock_dq(&gh);
|
||||
@ -1208,12 +1208,12 @@ out:
|
||||
*
|
||||
*/
|
||||
|
||||
void gfs2_holder_init(struct gfs2_glock *gl, unsigned int state, u16 flags,
|
||||
struct gfs2_holder *gh)
|
||||
void __gfs2_holder_init(struct gfs2_glock *gl, unsigned int state, u16 flags,
|
||||
struct gfs2_holder *gh, unsigned long ip)
|
||||
{
|
||||
INIT_LIST_HEAD(&gh->gh_list);
|
||||
gh->gh_gl = gl;
|
||||
gh->gh_ip = _RET_IP_;
|
||||
gh->gh_ip = ip;
|
||||
gh->gh_owner_pid = get_pid(task_pid(current));
|
||||
gh->gh_state = state;
|
||||
gh->gh_flags = flags;
|
||||
|
@ -190,8 +190,15 @@ extern int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number,
|
||||
extern void gfs2_glock_hold(struct gfs2_glock *gl);
|
||||
extern void gfs2_glock_put(struct gfs2_glock *gl);
|
||||
extern void gfs2_glock_queue_put(struct gfs2_glock *gl);
|
||||
extern void gfs2_holder_init(struct gfs2_glock *gl, unsigned int state,
|
||||
u16 flags, struct gfs2_holder *gh);
|
||||
|
||||
extern void __gfs2_holder_init(struct gfs2_glock *gl, unsigned int state,
|
||||
u16 flags, struct gfs2_holder *gh,
|
||||
unsigned long ip);
|
||||
static inline void gfs2_holder_init(struct gfs2_glock *gl, unsigned int state,
|
||||
u16 flags, struct gfs2_holder *gh) {
|
||||
__gfs2_holder_init(gl, state, flags, gh, _RET_IP_);
|
||||
}
|
||||
|
||||
extern void gfs2_holder_reinit(unsigned int state, u16 flags,
|
||||
struct gfs2_holder *gh);
|
||||
extern void gfs2_holder_uninit(struct gfs2_holder *gh);
|
||||
@ -241,7 +248,7 @@ static inline int gfs2_glock_nq_init(struct gfs2_glock *gl,
|
||||
{
|
||||
int error;
|
||||
|
||||
gfs2_holder_init(gl, state, flags, gh);
|
||||
__gfs2_holder_init(gl, state, flags, gh, _RET_IP_);
|
||||
|
||||
error = gfs2_glock_nq(gh);
|
||||
if (error)
|
||||
|
Loading…
x
Reference in New Issue
Block a user