Skip to contentSkip to conversation

ocfs2: do not put bh when buffer_uptodate failed

PATCH New alex chen 3 participants 6 messages Mar 25, 2014 – Mar 28, 2014 OCFS2

lore
Share & tools
lore

alex chen

author
#0 lore raw

PATCH 1/1 ocfs2: do not put bh when buffer_uptodate failed

Do not put bh when buffer_uptodate failed in ocfs2_write_block and ocfs2_write_super_or_backup, because it will put bh in b_end_io. Otherwise it will hit a warning "VFS: brelse: Trying to free free buffer".

---
 fs/ocfs2/buffer_head_io.c | 2 --
 1 file changed, 2 deletions(-)
fs/ocfs2/buffer_head_io.c +0 -2
index 5b704c6..1edcb14 100644
@@ -90,7 +90,6 @@ int ocfs2_write_block(struct ocfs2_super *osb, struct buffer_head *bh,
 		 * information for this bh as it's not marked locally
 		 * uptodate. */
 		ret = -EIO;
-		put_bh(bh);
 		mlog_errno(ret);
 	}
 
@@ -420,7 +419,6 @@ int ocfs2_write_super_or_backup(struct ocfs2_super *osb,
 
 	if (!buffer_uptodate(bh)) {
 		ret = -EIO;
-		put_bh(bh);
 		mlog_errno(ret);
 	}
 
Signature · 1 line
1.8.4.3
#1 lore raw

PATCH 1/1 ocfs2: do not put bh when buffer_uptodate failed

These changes looks good to me. However ocfs2_read_blocks and ocfs2_read_blocks_sync needs the same fix ? :)

Quoted 31 lines · alex chen

Do not put bh when buffer_uptodate failed in ocfs2_write_block and ocfs2_write_super_or_backup, because it will put bh in b_end_io. Otherwise it will hit a warning "VFS: brelse: Trying to free free buffer".

---
  fs/ocfs2/buffer_head_io.c | 2 --
  1 file changed, 2 deletions(-)
fs/ocfs2/buffer_head_io.c +0 -2
index 5b704c6..1edcb14 100644
@@ -90,7 +90,6 @@ int ocfs2_write_block(struct ocfs2_super *osb, struct buffer_head *bh,
  		 * information for this bh as it's not marked locally
  		 * uptodate. */
  		ret = -EIO;
-		put_bh(bh);
  		mlog_errno(ret);
  	}
 
@@ -420,7 +419,6 @@ int ocfs2_write_super_or_backup(struct ocfs2_super *osb,
 
  	if (!buffer_uptodate(bh)) {
  		ret = -EIO;
-		put_bh(bh);
  		mlog_errno(ret);
  	}
 
author
#2 lore raw

PATCH 1/1 ocfs2: do not put bh when buffer_uptodate failed

Quoted 2 lines · Srinivas Eeda

These changes looks good to me. However ocfs2_read_blocks and ocfs2_read_blocks_sync needs the same fix ? :)

There is no need to do this in ocfs2_read_blocks and ocfs2_read_blocks_sync, because bh will be set to NULL after put_bh, and brelse will handle it.

Quoted 41 lines · alex chen
Quoted 24 lines

Do not put bh when buffer_uptodate failed in ocfs2_write_block and ocfs2_write_super_or_backup, because it will put bh in b_end_io. Otherwise it will hit a warning "VFS: brelse: Trying to free free buffer".

---
  fs/ocfs2/buffer_head_io.c | 2 --
  1 file changed, 2 deletions(-)
fs/ocfs2/buffer_head_io.c +0 -1
index 5b704c6..1edcb14 100644
@@ -90,7 +90,6 @@ int ocfs2_write_block(struct ocfs2_super *osb, struct buffer_head *bh,
  		 * information for this bh as it's not marked locally
  		 * uptodate. */
  		ret = -EIO;
-		put_bh(bh);
  		mlog_errno(ret);
  	}
 

fs/ocfs2/buffer_head_io.c int ocfs2_write_super_or_backup(struct ocfs2_super *osb, · line 424

Quoted 7 lines
fs/ocfs2/buffer_head_io.c +0 -1
@@ -420,7 +419,6 @@ int ocfs2_write_super_or_backup(struct ocfs2_super *osb,
 
  	if (!buffer_uptodate(bh)) {
  		ret = -EIO;
-		put_bh(bh);
  		mlog_errno(ret);
  	}
 

_______________________________________________
Ocfs2-devel mailing list
Ocfs2-devel at oss.oracle.com
https://oss.oracle.com/mailman/listinfo/ocfs2-devel

#3 lore raw

PATCH 1/1 ocfs2: do not put bh when buffer_uptodate failed

Thanks for explaining

Quoted 46 lines · alex chen
Quoted 2 lines · Srinivas Eeda

These changes looks good to me. However ocfs2_read_blocks and ocfs2_read_blocks_sync needs the same fix ? :)

There is no need to do this in ocfs2_read_blocks and ocfs2_read_blocks_sync, because bh will be set to NULL after put_bh, and brelse will handle it.

Quoted 39 lines · alex chen
Quoted 24 lines

Do not put bh when buffer_uptodate failed in ocfs2_write_block and ocfs2_write_super_or_backup, because it will put bh in b_end_io. Otherwise it will hit a warning "VFS: brelse: Trying to free free buffer".

---
   fs/ocfs2/buffer_head_io.c | 2 --
   1 file changed, 2 deletions(-)
fs/ocfs2/buffer_head_io.c +0 -1
index 5b704c6..1edcb14 100644
@@ -90,7 +90,6 @@ int ocfs2_write_block(struct ocfs2_super *osb, struct buffer_head *bh,
   		 * information for this bh as it's not marked locally
   		 * uptodate. */
   		ret = -EIO;
-		put_bh(bh);
   		mlog_errno(ret);
   	}
 

fs/ocfs2/buffer_head_io.c int ocfs2_write_super_or_backup(struct ocfs2_super *osb, · line 424

Quoted 7 lines
fs/ocfs2/buffer_head_io.c +0 -1
@@ -420,7 +419,6 @@ int ocfs2_write_super_or_backup(struct ocfs2_super *osb,
 
   	if (!buffer_uptodate(bh)) {
   		ret = -EIO;
-		put_bh(bh);
   		mlog_errno(ret);
   	}
 

_______________________________________________
Ocfs2-devel mailing list
Ocfs2-devel at oss.oracle.com
https://oss.oracle.com/mailman/listinfo/ocfs2-devel

maintainer
#4 lore raw

PATCH 1/1 ocfs2: do not put bh when buffer_uptodate failed

In reply to alex chen
Quoted 7 lines · alex chen

Do not put bh when buffer_uptodate failed in ocfs2_write_block and ocfs2_write_super_or_backup, because it will put bh in b_end_io. Otherwise it will hit a warning "VFS: brelse: Trying to free free buffer".

Good catch. Can you tell me what testing or workload found this issue? Just for future reference.

Quoted 32 lines
---
 fs/ocfs2/buffer_head_io.c | 2 --
 1 file changed, 2 deletions(-)
fs/ocfs2/buffer_head_io.c +0 -2
index 5b704c6..1edcb14 100644
@@ -90,7 +90,6 @@ int ocfs2_write_block(struct ocfs2_super *osb, struct buffer_head *bh,
 		 * information for this bh as it's not marked locally
 		 * uptodate. */
 		ret = -EIO;
-		put_bh(bh);
 		mlog_errno(ret);
 	}
 
@@ -420,7 +419,6 @@ int ocfs2_write_super_or_backup(struct ocfs2_super *osb,
 
 	if (!buffer_uptodate(bh)) {
 		ret = -EIO;
-		put_bh(bh);
 		mlog_errno(ret);
 	}
 
Signature · 7 lines
1.8.4.3


_______________________________________________
Ocfs2-devel mailing list
Ocfs2-devel at oss.oracle.com
https://oss.oracle.com/mailman/listinfo/ocfs2-devel
Signature · 6 lines
Life's Little Instruction Book #497

	"Go down swinging."

			http://www.jlbec.org/
			jlbec at evilplan.org
author
#5 lore raw

PATCH 1/1 ocfs2: do not put bh when buffer_uptodate failed

Quoted 6 lines · Joel Becker
Quoted 5 lines · alex chen

Do not put bh when buffer_uptodate failed in ocfs2_write_block and ocfs2_write_super_or_backup, because it will put bh in b_end_io. Otherwise it will hit a warning "VFS: brelse: Trying to free free buffer".

Quoted 8 lines
Quoted 2 lines

Good catch. Can you tell me what testing or workload found this issue? Just for future reference.

This issue was found when resizing volume. During the resize, storage link was not steady and continuing up and down. Uptodate buffer failed because of EIO in ocfs2_write_super_or_backup and then this warning occurs.

Quoted 33 lines
Quoted 32 lines
---
 fs/ocfs2/buffer_head_io.c | 2 --
 1 file changed, 2 deletions(-)
fs/ocfs2/buffer_head_io.c +0 -2
index 5b704c6..1edcb14 100644
@@ -90,7 +90,6 @@ int ocfs2_write_block(struct ocfs2_super *osb, struct buffer_head *bh,
 		 * information for this bh as it's not marked locally
 		 * uptodate. */
 		ret = -EIO;
-		put_bh(bh);
 		mlog_errno(ret);
 	}
 
@@ -420,7 +419,6 @@ int ocfs2_write_super_or_backup(struct ocfs2_super *osb,
 
 	if (!buffer_uptodate(bh)) {
 		ret = -EIO;
-		put_bh(bh);
 		mlog_errno(ret);
 	}
 
Signature · 7 lines
1.8.4.3


_______________________________________________
Ocfs2-devel mailing list
Ocfs2-devel at oss.oracle.com
https://oss.oracle.com/mailman/listinfo/ocfs2-devel