aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/log.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/gfs2/log.c')
-rw-r--r--fs/gfs2/log.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
index 291415ddfe51..586923d24e6e 100644
--- a/fs/gfs2/log.c
+++ b/fs/gfs2/log.c
@@ -262,7 +262,7 @@ static void ail2_empty(struct gfs2_sbd *sdp, unsigned int new_tail)
262 * @sdp: The GFS2 superblock 262 * @sdp: The GFS2 superblock
263 * @blks: The number of blocks to reserve 263 * @blks: The number of blocks to reserve
264 * 264 *
265 * Note that we never give out the last 6 blocks of the journal. Thats 265 * Note that we never give out the last few blocks of the journal. Thats
266 * due to the fact that there is are a small number of header blocks 266 * due to the fact that there is are a small number of header blocks
267 * associated with each log flush. The exact number can't be known until 267 * associated with each log flush. The exact number can't be known until
268 * flush time, so we ensure that we have just enough free blocks at all 268 * flush time, so we ensure that we have just enough free blocks at all
@@ -274,6 +274,7 @@ static void ail2_empty(struct gfs2_sbd *sdp, unsigned int new_tail)
274int gfs2_log_reserve(struct gfs2_sbd *sdp, unsigned int blks) 274int gfs2_log_reserve(struct gfs2_sbd *sdp, unsigned int blks)
275{ 275{
276 unsigned int try = 0; 276 unsigned int try = 0;
277 unsigned reserved_blks = 6 * (4096 / sdp->sd_vfs->s_blocksize);
277 278
278 if (gfs2_assert_warn(sdp, blks) || 279 if (gfs2_assert_warn(sdp, blks) ||
279 gfs2_assert_warn(sdp, blks <= sdp->sd_jdesc->jd_blocks)) 280 gfs2_assert_warn(sdp, blks <= sdp->sd_jdesc->jd_blocks))
@@ -281,7 +282,7 @@ int gfs2_log_reserve(struct gfs2_sbd *sdp, unsigned int blks)
281 282
282 mutex_lock(&sdp->sd_log_reserve_mutex); 283 mutex_lock(&sdp->sd_log_reserve_mutex);
283 gfs2_log_lock(sdp); 284 gfs2_log_lock(sdp);
284 while(sdp->sd_log_blks_free <= (blks + 6)) { 285 while(sdp->sd_log_blks_free <= (blks + reserved_blks)) {
285 gfs2_log_unlock(sdp); 286 gfs2_log_unlock(sdp);
286 gfs2_ail1_empty(sdp, 0); 287 gfs2_ail1_empty(sdp, 0);
287 gfs2_log_flush(sdp, NULL); 288 gfs2_log_flush(sdp, NULL);