Skip to contentSkip to conversation

initrd vs. BLKFLSBUF

RFC PATCH In review Werner Almesberger 2 participants 4 messages Nov 20, 2000 – Dec 11, 2000 Block layer

lore
Share & tools
lore
#0 lore raw

RFC PATCH 1/1 initrd vs. BLKFLSBUF

Hi Al,

Jeff Chua reported a while ago that BLKFLSBUF returns EBUSY on a RAM disk that was obtained via initrd. I think the problem is that the effect of the blkdev_open(out_inode, ...) in drivers/block/rd.c:rd_load_image is not undone at the end. I've attached a patch for 2.4.0-test11-pre7 that seems to solve the problem. Since I'm not quite sure I understand the reference counting rules there, I would appreciate your comment.

Thanks,
- Werner

---------------------------------- cut here -----------------------------------

drivers/block/rd.c +1 -0
@@ -690,6 +690,7 @@
 done:
 	if (infile.f_op->release)
 		infile.f_op->release(inode, &infile);
+	blkdev_put(out_inode->i_bdev, BDEV_FILE);
 	set_fs(fs);
 	return;
 free_inodes: /* free inodes on error */ 
Signature · 7 lines
  _________________________________________________________________________
 / Werner Almesberger, ICA, EPFL, CH           [email protected] /
/_IN_N_032__Tel_+41_21_693_6621__Fax_+41_21_693_6610_____________________/
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/
#1 lore raw

Werner,

Thanks for fix. Applied the patch and it's working now.

Linus, please add this patch to the kernel source codes for 2.4.0.

Under 2.2.18, it's working fine without the patch.

Thanks,
Jeff
[ [email protected] ]
----- Original Message -----
From: "Werner Almesberger" <[email protected]>
To: <[email protected]>
Cc: <[email protected]>; <[email protected]>
Sent: Monday, November 20, 2000 11:21 AM
Subject: [PATCH,RFC] initrd vs. BLKFLSBUF

Hi Al,

Jeff Chua reported a while ago that BLKFLSBUF returns EBUSY on a RAM disk that was obtained via initrd. I think the problem is that the effect of the blkdev_open(out_inode, ...) in drivers/block/rd.c:rd_load_image is not undone at the end. I've attached a patch for 2.4.0-test11-pre7 that seems to solve the problem. Since I'm not quite sure I understand the reference counting rules there, I would appreciate your comment.

Thanks,
- Werner

---------------------------------- cut
here -----------------------------------

drivers/block/rd.c Mon Nov 20 04:03:42 2000 renamed from drivers/block/rd.c Mon Nov 20 02:07:47 2000 +1 -0
@@ -690,6 +690,7 @@
 done:
  if (infile.f_op->release)
  infile.f_op->release(inode, &infile);
+ blkdev_put(out_inode->i_bdev, BDEV_FILE);
  set_fs(fs);
  return;
 free_inodes: /* free inodes on error */

--
_________________________________________________________________________
/ Werner Almesberger, ICA, EPFL, CH [email protected] /
/_IN_N_032__Tel_+41_21_693_6621__Fax_+41_21_693_6610_____________________/

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/

#2 lore raw
In reply to Werner Almesberger

I'm posting this again hoping that it'll get incorporated into the kernel.

I've tested the patch against 2.4.0-test12-pre8, and it's working fine.

Thanks,
Jeff
[ [email protected] ]
----- Original Message -----
From: "Werner Almesberger" <[email protected]>
To: <[email protected]>
Cc: <[email protected]>; <[email protected]>
Sent: Monday, November 20, 2000 11:21 AM
Subject: [PATCH,RFC] initrd vs. BLKFLSBUF

Hi Al,

Jeff Chua reported a while ago that BLKFLSBUF returns EBUSY on a RAM disk that was obtained via initrd. I think the problem is that the effect of the blkdev_open(out_inode, ...) in drivers/block/rd.c:rd_load_image is not undone at the end. I've attached a patch for 2.4.0-test11-pre7 that seems to solve the problem. Since I'm not quite sure I understand the reference counting rules there, I would appreciate your comment.

Thanks,
- Werner

---------------------------------- cut
here -----------------------------------

drivers/block/rd.c Mon Nov 20 04:03:42 2000 renamed from drivers/block/rd.c Mon Nov 20 02:07:47 2000 +1 -0
@@ -690,6 +690,7 @@
 done:
  if (infile.f_op->release)
  infile.f_op->release(inode, &infile);
+ blkdev_put(out_inode->i_bdev, BDEV_FILE);
  set_fs(fs);
  return;
 free_inodes: /* free inodes on error */

--
_________________________________________________________________________
/ Werner Almesberger, ICA, EPFL, CH [email protected] /
/_IN_N_032__Tel_+41_21_693_6621__Fax_+41_21_693_6610_____________________/

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/

#3 lore raw
In reply to Werner Almesberger
Quoted 1 line · Jeff Chua

I'm posting this again hoping that it'll get incorporated into the kernel.

It's already in Alan's tree (e.g. patch-2.4.0test11-ac1.bz2) and should find its way from there into Linus' tree soon (i.e. probably by test12).

- Werner

Signature · 7 lines
  _________________________________________________________________________
 / Werner Almesberger, ICA, EPFL, CH           [email protected] /
/_IN_N_032__Tel_+41_21_693_6621__Fax_+41_21_693_6610_____________________/
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/