Loading fs/gfs2/Makefile +1 −0 Original line number Original line Diff line number Diff line EXTRA_CFLAGS := -I$(src) obj-$(CONFIG_GFS2_FS) += gfs2.o obj-$(CONFIG_GFS2_FS) += gfs2.o gfs2-y := acl.o bmap.o dir.o eaops.o eattr.o glock.o \ gfs2-y := acl.o bmap.o dir.o eaops.o eattr.o glock.o \ glops.o inode.o log.o lops.o main.o meta_io.o \ glops.o inode.o log.o lops.o main.o meta_io.o \ Loading fs/gfs2/bmap.c +3 −0 Original line number Original line Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include "trans.h" #include "trans.h" #include "dir.h" #include "dir.h" #include "util.h" #include "util.h" #include "trace_gfs2.h" /* This doesn't need to be that large as max 64 bit pointers in a 4k /* This doesn't need to be that large as max 64 bit pointers in a 4k * block is 512, so __u16 is fine for that. It saves stack space to * block is 512, so __u16 is fine for that. It saves stack space to Loading Loading @@ -589,6 +590,7 @@ int gfs2_block_map(struct inode *inode, sector_t lblock, clear_buffer_mapped(bh_map); clear_buffer_mapped(bh_map); clear_buffer_new(bh_map); clear_buffer_new(bh_map); clear_buffer_boundary(bh_map); clear_buffer_boundary(bh_map); trace_gfs2_bmap(ip, bh_map, lblock, create, 1); if (gfs2_is_dir(ip)) { if (gfs2_is_dir(ip)) { bsize = sdp->sd_jbsize; bsize = sdp->sd_jbsize; arr = sdp->sd_jheightsize; arr = sdp->sd_jheightsize; Loading Loading @@ -623,6 +625,7 @@ int gfs2_block_map(struct inode *inode, sector_t lblock, ret = 0; ret = 0; out: out: release_metapath(&mp); release_metapath(&mp); trace_gfs2_bmap(ip, bh_map, lblock, create, ret); bmap_unlock(ip, create); bmap_unlock(ip, create); return ret; return ret; Loading fs/gfs2/glock.c +11 −1 Original line number Original line Diff line number Diff line Loading @@ -39,6 +39,8 @@ #include "super.h" #include "super.h" #include "util.h" #include "util.h" #include "bmap.h" #include "bmap.h" #define CREATE_TRACE_POINTS #include "trace_gfs2.h" struct gfs2_gl_hash_bucket { struct gfs2_gl_hash_bucket { struct hlist_head hb_list; struct hlist_head hb_list; Loading Loading @@ -155,7 +157,7 @@ static void glock_free(struct gfs2_glock *gl) if (aspace) if (aspace) gfs2_aspace_put(aspace); gfs2_aspace_put(aspace); trace_gfs2_glock_put(gl); sdp->sd_lockstruct.ls_ops->lm_put_lock(gfs2_glock_cachep, gl); sdp->sd_lockstruct.ls_ops->lm_put_lock(gfs2_glock_cachep, gl); } } Loading Loading @@ -317,14 +319,17 @@ __acquires(&gl->gl_spin) return 2; return 2; gh->gh_error = ret; gh->gh_error = ret; list_del_init(&gh->gh_list); list_del_init(&gh->gh_list); trace_gfs2_glock_queue(gh, 0); gfs2_holder_wake(gh); gfs2_holder_wake(gh); goto restart; goto restart; } } set_bit(HIF_HOLDER, &gh->gh_iflags); set_bit(HIF_HOLDER, &gh->gh_iflags); trace_gfs2_promote(gh, 1); gfs2_holder_wake(gh); gfs2_holder_wake(gh); goto restart; goto restart; } } set_bit(HIF_HOLDER, &gh->gh_iflags); set_bit(HIF_HOLDER, &gh->gh_iflags); trace_gfs2_promote(gh, 0); gfs2_holder_wake(gh); gfs2_holder_wake(gh); continue; continue; } } Loading Loading @@ -354,6 +359,7 @@ static inline void do_error(struct gfs2_glock *gl, const int ret) else else continue; continue; list_del_init(&gh->gh_list); list_del_init(&gh->gh_list); trace_gfs2_glock_queue(gh, 0); gfs2_holder_wake(gh); gfs2_holder_wake(gh); } } } } Loading Loading @@ -422,6 +428,7 @@ static void finish_xmote(struct gfs2_glock *gl, unsigned int ret) int rv; int rv; spin_lock(&gl->gl_spin); spin_lock(&gl->gl_spin); trace_gfs2_glock_state_change(gl, state); state_change(gl, state); state_change(gl, state); gh = find_first_waiter(gl); gh = find_first_waiter(gl); Loading Loading @@ -851,6 +858,7 @@ static void handle_callback(struct gfs2_glock *gl, unsigned int state, gl->gl_demote_state != state) { gl->gl_demote_state != state) { gl->gl_demote_state = LM_ST_UNLOCKED; gl->gl_demote_state = LM_ST_UNLOCKED; } } trace_gfs2_demote_rq(gl); } } /** /** Loading Loading @@ -936,6 +944,7 @@ __acquires(&gl->gl_spin) goto do_cancel; goto do_cancel; return; return; } } trace_gfs2_glock_queue(gh, 1); list_add_tail(&gh->gh_list, insert_pt); list_add_tail(&gh->gh_list, insert_pt); do_cancel: do_cancel: gh = list_entry(gl->gl_holders.next, struct gfs2_holder, gh_list); gh = list_entry(gl->gl_holders.next, struct gfs2_holder, gh_list); Loading Loading @@ -1032,6 +1041,7 @@ void gfs2_glock_dq(struct gfs2_holder *gh) !test_bit(GLF_DEMOTE, &gl->gl_flags)) !test_bit(GLF_DEMOTE, &gl->gl_flags)) fast_path = 1; fast_path = 1; } } trace_gfs2_glock_queue(gh, 0); spin_unlock(&gl->gl_spin); spin_unlock(&gl->gl_spin); if (likely(fast_path)) if (likely(fast_path)) return; return; Loading fs/gfs2/log.c +8 −1 Original line number Original line Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include "meta_io.h" #include "meta_io.h" #include "util.h" #include "util.h" #include "dir.h" #include "dir.h" #include "trace_gfs2.h" #define PULL 1 #define PULL 1 Loading Loading @@ -313,6 +314,7 @@ int gfs2_log_reserve(struct gfs2_sbd *sdp, unsigned int blks) gfs2_log_lock(sdp); gfs2_log_lock(sdp); } } atomic_sub(blks, &sdp->sd_log_blks_free); atomic_sub(blks, &sdp->sd_log_blks_free); trace_gfs2_log_blocks(sdp, -blks); gfs2_log_unlock(sdp); gfs2_log_unlock(sdp); mutex_unlock(&sdp->sd_log_reserve_mutex); mutex_unlock(&sdp->sd_log_reserve_mutex); Loading @@ -333,6 +335,7 @@ void gfs2_log_release(struct gfs2_sbd *sdp, unsigned int blks) gfs2_log_lock(sdp); gfs2_log_lock(sdp); atomic_add(blks, &sdp->sd_log_blks_free); atomic_add(blks, &sdp->sd_log_blks_free); trace_gfs2_log_blocks(sdp, blks); gfs2_assert_withdraw(sdp, gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= sdp->sd_jdesc->jd_blocks); atomic_read(&sdp->sd_log_blks_free) <= sdp->sd_jdesc->jd_blocks); gfs2_log_unlock(sdp); gfs2_log_unlock(sdp); Loading Loading @@ -558,6 +561,7 @@ static void log_pull_tail(struct gfs2_sbd *sdp, unsigned int new_tail) gfs2_log_lock(sdp); gfs2_log_lock(sdp); atomic_add(dist, &sdp->sd_log_blks_free); atomic_add(dist, &sdp->sd_log_blks_free); trace_gfs2_log_blocks(sdp, dist); gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= sdp->sd_jdesc->jd_blocks); gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= sdp->sd_jdesc->jd_blocks); gfs2_log_unlock(sdp); gfs2_log_unlock(sdp); Loading Loading @@ -715,6 +719,7 @@ void __gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl) up_write(&sdp->sd_log_flush_lock); up_write(&sdp->sd_log_flush_lock); return; return; } } trace_gfs2_log_flush(sdp, 1); ai = kzalloc(sizeof(struct gfs2_ail), GFP_NOFS | __GFP_NOFAIL); ai = kzalloc(sizeof(struct gfs2_ail), GFP_NOFS | __GFP_NOFAIL); INIT_LIST_HEAD(&ai->ai_ail1_list); INIT_LIST_HEAD(&ai->ai_ail1_list); Loading Loading @@ -746,6 +751,7 @@ void __gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl) else if (sdp->sd_log_tail != current_tail(sdp) && !sdp->sd_log_idle){ else if (sdp->sd_log_tail != current_tail(sdp) && !sdp->sd_log_idle){ gfs2_log_lock(sdp); gfs2_log_lock(sdp); atomic_dec(&sdp->sd_log_blks_free); /* Adjust for unreserved buffer */ atomic_dec(&sdp->sd_log_blks_free); /* Adjust for unreserved buffer */ trace_gfs2_log_blocks(sdp, -1); gfs2_log_unlock(sdp); gfs2_log_unlock(sdp); log_write_header(sdp, 0, PULL); log_write_header(sdp, 0, PULL); } } Loading @@ -763,7 +769,7 @@ void __gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl) ai = NULL; ai = NULL; } } gfs2_log_unlock(sdp); gfs2_log_unlock(sdp); trace_gfs2_log_flush(sdp, 0); up_write(&sdp->sd_log_flush_lock); up_write(&sdp->sd_log_flush_lock); kfree(ai); kfree(ai); Loading @@ -787,6 +793,7 @@ static void log_refund(struct gfs2_sbd *sdp, struct gfs2_trans *tr) gfs2_assert_withdraw(sdp, sdp->sd_log_blks_reserved + tr->tr_reserved >= reserved); gfs2_assert_withdraw(sdp, sdp->sd_log_blks_reserved + tr->tr_reserved >= reserved); unused = sdp->sd_log_blks_reserved - reserved + tr->tr_reserved; unused = sdp->sd_log_blks_reserved - reserved + tr->tr_reserved; atomic_add(unused, &sdp->sd_log_blks_free); atomic_add(unused, &sdp->sd_log_blks_free); trace_gfs2_log_blocks(sdp, unused); gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= sdp->sd_jdesc->jd_blocks); sdp->sd_jdesc->jd_blocks); sdp->sd_log_blks_reserved = reserved; sdp->sd_log_blks_reserved = reserved; Loading fs/gfs2/lops.c +3 −0 Original line number Original line Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include "rgrp.h" #include "rgrp.h" #include "trans.h" #include "trans.h" #include "util.h" #include "util.h" #include "trace_gfs2.h" /** /** * gfs2_pin - Pin a buffer in memory * gfs2_pin - Pin a buffer in memory Loading @@ -53,6 +54,7 @@ static void gfs2_pin(struct gfs2_sbd *sdp, struct buffer_head *bh) if (bd->bd_ail) if (bd->bd_ail) list_move(&bd->bd_ail_st_list, &bd->bd_ail->ai_ail2_list); list_move(&bd->bd_ail_st_list, &bd->bd_ail->ai_ail2_list); get_bh(bh); get_bh(bh); trace_gfs2_pin(bd, 1); } } /** /** Loading Loading @@ -89,6 +91,7 @@ static void gfs2_unpin(struct gfs2_sbd *sdp, struct buffer_head *bh, bd->bd_ail = ai; bd->bd_ail = ai; list_add(&bd->bd_ail_st_list, &ai->ai_ail1_list); list_add(&bd->bd_ail_st_list, &ai->ai_ail1_list); clear_bit(GLF_LFLUSH, &bd->bd_gl->gl_flags); clear_bit(GLF_LFLUSH, &bd->bd_gl->gl_flags); trace_gfs2_pin(bd, 0); gfs2_log_unlock(sdp); gfs2_log_unlock(sdp); unlock_buffer(bh); unlock_buffer(bh); } } Loading Loading
fs/gfs2/Makefile +1 −0 Original line number Original line Diff line number Diff line EXTRA_CFLAGS := -I$(src) obj-$(CONFIG_GFS2_FS) += gfs2.o obj-$(CONFIG_GFS2_FS) += gfs2.o gfs2-y := acl.o bmap.o dir.o eaops.o eattr.o glock.o \ gfs2-y := acl.o bmap.o dir.o eaops.o eattr.o glock.o \ glops.o inode.o log.o lops.o main.o meta_io.o \ glops.o inode.o log.o lops.o main.o meta_io.o \ Loading
fs/gfs2/bmap.c +3 −0 Original line number Original line Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include "trans.h" #include "trans.h" #include "dir.h" #include "dir.h" #include "util.h" #include "util.h" #include "trace_gfs2.h" /* This doesn't need to be that large as max 64 bit pointers in a 4k /* This doesn't need to be that large as max 64 bit pointers in a 4k * block is 512, so __u16 is fine for that. It saves stack space to * block is 512, so __u16 is fine for that. It saves stack space to Loading Loading @@ -589,6 +590,7 @@ int gfs2_block_map(struct inode *inode, sector_t lblock, clear_buffer_mapped(bh_map); clear_buffer_mapped(bh_map); clear_buffer_new(bh_map); clear_buffer_new(bh_map); clear_buffer_boundary(bh_map); clear_buffer_boundary(bh_map); trace_gfs2_bmap(ip, bh_map, lblock, create, 1); if (gfs2_is_dir(ip)) { if (gfs2_is_dir(ip)) { bsize = sdp->sd_jbsize; bsize = sdp->sd_jbsize; arr = sdp->sd_jheightsize; arr = sdp->sd_jheightsize; Loading Loading @@ -623,6 +625,7 @@ int gfs2_block_map(struct inode *inode, sector_t lblock, ret = 0; ret = 0; out: out: release_metapath(&mp); release_metapath(&mp); trace_gfs2_bmap(ip, bh_map, lblock, create, ret); bmap_unlock(ip, create); bmap_unlock(ip, create); return ret; return ret; Loading
fs/gfs2/glock.c +11 −1 Original line number Original line Diff line number Diff line Loading @@ -39,6 +39,8 @@ #include "super.h" #include "super.h" #include "util.h" #include "util.h" #include "bmap.h" #include "bmap.h" #define CREATE_TRACE_POINTS #include "trace_gfs2.h" struct gfs2_gl_hash_bucket { struct gfs2_gl_hash_bucket { struct hlist_head hb_list; struct hlist_head hb_list; Loading Loading @@ -155,7 +157,7 @@ static void glock_free(struct gfs2_glock *gl) if (aspace) if (aspace) gfs2_aspace_put(aspace); gfs2_aspace_put(aspace); trace_gfs2_glock_put(gl); sdp->sd_lockstruct.ls_ops->lm_put_lock(gfs2_glock_cachep, gl); sdp->sd_lockstruct.ls_ops->lm_put_lock(gfs2_glock_cachep, gl); } } Loading Loading @@ -317,14 +319,17 @@ __acquires(&gl->gl_spin) return 2; return 2; gh->gh_error = ret; gh->gh_error = ret; list_del_init(&gh->gh_list); list_del_init(&gh->gh_list); trace_gfs2_glock_queue(gh, 0); gfs2_holder_wake(gh); gfs2_holder_wake(gh); goto restart; goto restart; } } set_bit(HIF_HOLDER, &gh->gh_iflags); set_bit(HIF_HOLDER, &gh->gh_iflags); trace_gfs2_promote(gh, 1); gfs2_holder_wake(gh); gfs2_holder_wake(gh); goto restart; goto restart; } } set_bit(HIF_HOLDER, &gh->gh_iflags); set_bit(HIF_HOLDER, &gh->gh_iflags); trace_gfs2_promote(gh, 0); gfs2_holder_wake(gh); gfs2_holder_wake(gh); continue; continue; } } Loading Loading @@ -354,6 +359,7 @@ static inline void do_error(struct gfs2_glock *gl, const int ret) else else continue; continue; list_del_init(&gh->gh_list); list_del_init(&gh->gh_list); trace_gfs2_glock_queue(gh, 0); gfs2_holder_wake(gh); gfs2_holder_wake(gh); } } } } Loading Loading @@ -422,6 +428,7 @@ static void finish_xmote(struct gfs2_glock *gl, unsigned int ret) int rv; int rv; spin_lock(&gl->gl_spin); spin_lock(&gl->gl_spin); trace_gfs2_glock_state_change(gl, state); state_change(gl, state); state_change(gl, state); gh = find_first_waiter(gl); gh = find_first_waiter(gl); Loading Loading @@ -851,6 +858,7 @@ static void handle_callback(struct gfs2_glock *gl, unsigned int state, gl->gl_demote_state != state) { gl->gl_demote_state != state) { gl->gl_demote_state = LM_ST_UNLOCKED; gl->gl_demote_state = LM_ST_UNLOCKED; } } trace_gfs2_demote_rq(gl); } } /** /** Loading Loading @@ -936,6 +944,7 @@ __acquires(&gl->gl_spin) goto do_cancel; goto do_cancel; return; return; } } trace_gfs2_glock_queue(gh, 1); list_add_tail(&gh->gh_list, insert_pt); list_add_tail(&gh->gh_list, insert_pt); do_cancel: do_cancel: gh = list_entry(gl->gl_holders.next, struct gfs2_holder, gh_list); gh = list_entry(gl->gl_holders.next, struct gfs2_holder, gh_list); Loading Loading @@ -1032,6 +1041,7 @@ void gfs2_glock_dq(struct gfs2_holder *gh) !test_bit(GLF_DEMOTE, &gl->gl_flags)) !test_bit(GLF_DEMOTE, &gl->gl_flags)) fast_path = 1; fast_path = 1; } } trace_gfs2_glock_queue(gh, 0); spin_unlock(&gl->gl_spin); spin_unlock(&gl->gl_spin); if (likely(fast_path)) if (likely(fast_path)) return; return; Loading
fs/gfs2/log.c +8 −1 Original line number Original line Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include "meta_io.h" #include "meta_io.h" #include "util.h" #include "util.h" #include "dir.h" #include "dir.h" #include "trace_gfs2.h" #define PULL 1 #define PULL 1 Loading Loading @@ -313,6 +314,7 @@ int gfs2_log_reserve(struct gfs2_sbd *sdp, unsigned int blks) gfs2_log_lock(sdp); gfs2_log_lock(sdp); } } atomic_sub(blks, &sdp->sd_log_blks_free); atomic_sub(blks, &sdp->sd_log_blks_free); trace_gfs2_log_blocks(sdp, -blks); gfs2_log_unlock(sdp); gfs2_log_unlock(sdp); mutex_unlock(&sdp->sd_log_reserve_mutex); mutex_unlock(&sdp->sd_log_reserve_mutex); Loading @@ -333,6 +335,7 @@ void gfs2_log_release(struct gfs2_sbd *sdp, unsigned int blks) gfs2_log_lock(sdp); gfs2_log_lock(sdp); atomic_add(blks, &sdp->sd_log_blks_free); atomic_add(blks, &sdp->sd_log_blks_free); trace_gfs2_log_blocks(sdp, blks); gfs2_assert_withdraw(sdp, gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= sdp->sd_jdesc->jd_blocks); atomic_read(&sdp->sd_log_blks_free) <= sdp->sd_jdesc->jd_blocks); gfs2_log_unlock(sdp); gfs2_log_unlock(sdp); Loading Loading @@ -558,6 +561,7 @@ static void log_pull_tail(struct gfs2_sbd *sdp, unsigned int new_tail) gfs2_log_lock(sdp); gfs2_log_lock(sdp); atomic_add(dist, &sdp->sd_log_blks_free); atomic_add(dist, &sdp->sd_log_blks_free); trace_gfs2_log_blocks(sdp, dist); gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= sdp->sd_jdesc->jd_blocks); gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= sdp->sd_jdesc->jd_blocks); gfs2_log_unlock(sdp); gfs2_log_unlock(sdp); Loading Loading @@ -715,6 +719,7 @@ void __gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl) up_write(&sdp->sd_log_flush_lock); up_write(&sdp->sd_log_flush_lock); return; return; } } trace_gfs2_log_flush(sdp, 1); ai = kzalloc(sizeof(struct gfs2_ail), GFP_NOFS | __GFP_NOFAIL); ai = kzalloc(sizeof(struct gfs2_ail), GFP_NOFS | __GFP_NOFAIL); INIT_LIST_HEAD(&ai->ai_ail1_list); INIT_LIST_HEAD(&ai->ai_ail1_list); Loading Loading @@ -746,6 +751,7 @@ void __gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl) else if (sdp->sd_log_tail != current_tail(sdp) && !sdp->sd_log_idle){ else if (sdp->sd_log_tail != current_tail(sdp) && !sdp->sd_log_idle){ gfs2_log_lock(sdp); gfs2_log_lock(sdp); atomic_dec(&sdp->sd_log_blks_free); /* Adjust for unreserved buffer */ atomic_dec(&sdp->sd_log_blks_free); /* Adjust for unreserved buffer */ trace_gfs2_log_blocks(sdp, -1); gfs2_log_unlock(sdp); gfs2_log_unlock(sdp); log_write_header(sdp, 0, PULL); log_write_header(sdp, 0, PULL); } } Loading @@ -763,7 +769,7 @@ void __gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl) ai = NULL; ai = NULL; } } gfs2_log_unlock(sdp); gfs2_log_unlock(sdp); trace_gfs2_log_flush(sdp, 0); up_write(&sdp->sd_log_flush_lock); up_write(&sdp->sd_log_flush_lock); kfree(ai); kfree(ai); Loading @@ -787,6 +793,7 @@ static void log_refund(struct gfs2_sbd *sdp, struct gfs2_trans *tr) gfs2_assert_withdraw(sdp, sdp->sd_log_blks_reserved + tr->tr_reserved >= reserved); gfs2_assert_withdraw(sdp, sdp->sd_log_blks_reserved + tr->tr_reserved >= reserved); unused = sdp->sd_log_blks_reserved - reserved + tr->tr_reserved; unused = sdp->sd_log_blks_reserved - reserved + tr->tr_reserved; atomic_add(unused, &sdp->sd_log_blks_free); atomic_add(unused, &sdp->sd_log_blks_free); trace_gfs2_log_blocks(sdp, unused); gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= sdp->sd_jdesc->jd_blocks); sdp->sd_jdesc->jd_blocks); sdp->sd_log_blks_reserved = reserved; sdp->sd_log_blks_reserved = reserved; Loading
fs/gfs2/lops.c +3 −0 Original line number Original line Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include "rgrp.h" #include "rgrp.h" #include "trans.h" #include "trans.h" #include "util.h" #include "util.h" #include "trace_gfs2.h" /** /** * gfs2_pin - Pin a buffer in memory * gfs2_pin - Pin a buffer in memory Loading @@ -53,6 +54,7 @@ static void gfs2_pin(struct gfs2_sbd *sdp, struct buffer_head *bh) if (bd->bd_ail) if (bd->bd_ail) list_move(&bd->bd_ail_st_list, &bd->bd_ail->ai_ail2_list); list_move(&bd->bd_ail_st_list, &bd->bd_ail->ai_ail2_list); get_bh(bh); get_bh(bh); trace_gfs2_pin(bd, 1); } } /** /** Loading Loading @@ -89,6 +91,7 @@ static void gfs2_unpin(struct gfs2_sbd *sdp, struct buffer_head *bh, bd->bd_ail = ai; bd->bd_ail = ai; list_add(&bd->bd_ail_st_list, &ai->ai_ail1_list); list_add(&bd->bd_ail_st_list, &ai->ai_ail1_list); clear_bit(GLF_LFLUSH, &bd->bd_gl->gl_flags); clear_bit(GLF_LFLUSH, &bd->bd_gl->gl_flags); trace_gfs2_pin(bd, 0); gfs2_log_unlock(sdp); gfs2_log_unlock(sdp); unlock_buffer(bh); unlock_buffer(bh); } } Loading