* [PATCH] floppy: remove floppy-specific O_EXCL handling @ 2012-05-13 9:02 Jiri Kosina 2012-05-14 16:25 ` Tejun Heo 0 siblings, 1 reply; 8+ messages in thread From: Jiri Kosina @ 2012-05-13 9:02 UTC (permalink / raw) To: Andrew Morton, Jens Axboe, NeilBrown, Tejun Heo; +Cc: linux-kernel Block layer now handles O_EXCL in a generic way for block devices. The semantics is however different for floppy and all other block devices, as floppy driver contains its own O_EXCL handling. The semantics for all-but-floppy bdevs is "there can be at most one O_EXCL open of this file", while for floppy bdev the semantics is "if someone has the bdev open with O_EXCL, noone else can open it". Remove the floppy-specific handling and let the generic bdev code O_EXCL handling take over. Signed-off-by: Jiri Kosina <jkosina@suse.cz> --- drivers/block/floppy.c | 8 +------- 1 files changed, 1 insertions(+), 7 deletions(-) diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c index b0b00d7..fe694f8 100644 --- a/drivers/block/floppy.c +++ b/drivers/block/floppy.c @@ -3650,13 +3650,7 @@ static int floppy_open(struct block_device *bdev, fmode_t mode) set_bit(FD_VERIFY_BIT, &UDRS->flags); } - if (UDRS->fd_ref == -1 || (UDRS->fd_ref && (mode & FMODE_EXCL))) - goto out2; - - if (mode & FMODE_EXCL) - UDRS->fd_ref = -1; - else - UDRS->fd_ref++; + UDRS->fd_ref++; opened_bdev[drive] = bdev; -- Jiri Kosina SUSE Labs ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] floppy: remove floppy-specific O_EXCL handling 2012-05-13 9:02 [PATCH] floppy: remove floppy-specific O_EXCL handling Jiri Kosina @ 2012-05-14 16:25 ` Tejun Heo 2012-05-14 16:49 ` Joe Perches 2012-05-14 20:42 ` Jiri Kosina 0 siblings, 2 replies; 8+ messages in thread From: Tejun Heo @ 2012-05-14 16:25 UTC (permalink / raw) To: Jiri Kosina; +Cc: Andrew Morton, Jens Axboe, NeilBrown, linux-kernel Hello, On Sun, May 13, 2012 at 11:02:07AM +0200, Jiri Kosina wrote: > Block layer now handles O_EXCL in a generic way for block devices. > > The semantics is however different for floppy and all other block devices, > as floppy driver contains its own O_EXCL handling. > > The semantics for all-but-floppy bdevs is "there can be at most one O_EXCL > open of this file", while for floppy bdev the semantics is "if someone has > the bdev open with O_EXCL, noone else can open it". > > Remove the floppy-specific handling and let the generic bdev code O_EXCL > handling take over. > > Signed-off-by: Jiri Kosina <jkosina@suse.cz> Patch looks good to me but why do we want to change this at this point? Thanks. -- tejun ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] floppy: remove floppy-specific O_EXCL handling 2012-05-14 16:25 ` Tejun Heo @ 2012-05-14 16:49 ` Joe Perches 2012-05-14 20:42 ` Jiri Kosina 1 sibling, 0 replies; 8+ messages in thread From: Joe Perches @ 2012-05-14 16:49 UTC (permalink / raw) To: Tejun Heo; +Cc: Jiri Kosina, Andrew Morton, Jens Axboe, NeilBrown, linux-kernel On Mon, 2012-05-14 at 09:25 -0700, Tejun Heo wrote: > Hello, > > On Sun, May 13, 2012 at 11:02:07AM +0200, Jiri Kosina wrote: > > Block layer now handles O_EXCL in a generic way for block devices. > > > > The semantics is however different for floppy and all other block devices, > > as floppy driver contains its own O_EXCL handling. > > > > The semantics for all-but-floppy bdevs is "there can be at most one O_EXCL > > open of this file", while for floppy bdev the semantics is "if someone has > > the bdev open with O_EXCL, noone else can open it". > > > > Remove the floppy-specific handling and let the generic bdev code O_EXCL > > handling take over. > > > > Signed-off-by: Jiri Kosina <jkosina@suse.cz> > > Patch looks good to me but why do we want to change this at this > point? Because the hobgoblins of consistency are as fun to hunt as the wumpus? ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] floppy: remove floppy-specific O_EXCL handling 2012-05-14 16:25 ` Tejun Heo 2012-05-14 16:49 ` Joe Perches @ 2012-05-14 20:42 ` Jiri Kosina 2012-05-14 21:19 ` Tejun Heo 1 sibling, 1 reply; 8+ messages in thread From: Jiri Kosina @ 2012-05-14 20:42 UTC (permalink / raw) To: Tejun Heo; +Cc: Andrew Morton, Jens Axboe, NeilBrown, linux-kernel, Joe Perches On Mon, 14 May 2012, Tejun Heo wrote: > > Block layer now handles O_EXCL in a generic way for block devices. > > > > The semantics is however different for floppy and all other block devices, > > as floppy driver contains its own O_EXCL handling. > > > > The semantics for all-but-floppy bdevs is "there can be at most one O_EXCL > > open of this file", while for floppy bdev the semantics is "if someone has > > the bdev open with O_EXCL, noone else can open it". > > > > Remove the floppy-specific handling and let the generic bdev code O_EXCL > > handling take over. > > > > Signed-off-by: Jiri Kosina <jkosina@suse.cz> > > Patch looks good to me Thanks. > but why do we want to change this at this point? Because since commit e525fd89d380c4a94c0d63913a1dd1a593ed25e7 Author: Tejun Heo <tj@kernel.org> Date: Sat Nov 13 11:55:17 2010 +0100 block: make blkdev_get/put() handle exclusive access mount of /dev/fd0 actually causes the fd0 block device be claimed with _EXCL. Before this commit, you are able to mount /dev/fd0 and then open() it afterward. After this commit you can't any more, because mounting /dev/fd0 already passes O_EXCL to floppy_open(), and thus noone else can open(/dev/fd0) any more. My commit brings things back into shape, i.e. you can, equally to other block devices, both mount it and open() it afterwards. -- Jiri Kosina SUSE Labs ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] floppy: remove floppy-specific O_EXCL handling 2012-05-14 20:42 ` Jiri Kosina @ 2012-05-14 21:19 ` Tejun Heo 2012-05-14 21:38 ` Jiri Kosina 0 siblings, 1 reply; 8+ messages in thread From: Tejun Heo @ 2012-05-14 21:19 UTC (permalink / raw) To: Jiri Kosina Cc: Andrew Morton, Jens Axboe, NeilBrown, linux-kernel, Joe Perches Hello, On Mon, May 14, 2012 at 10:42:58PM +0200, Jiri Kosina wrote: > Because since > > commit e525fd89d380c4a94c0d63913a1dd1a593ed25e7 > Author: Tejun Heo <tj@kernel.org> > Date: Sat Nov 13 11:55:17 2010 +0100 > > block: make blkdev_get/put() handle exclusive access > > mount of /dev/fd0 actually causes the fd0 block device be claimed with > _EXCL. Before this commit, you are able to mount /dev/fd0 and then open() > it afterward. After this commit you can't any more, because mounting > /dev/fd0 already passes O_EXCL to floppy_open(), and thus noone else can > open(/dev/fd0) any more. > > My commit brings things back into shape, i.e. you can, equally to other > block devices, both mount it and open() it afterwards. Ah, that makes sense. Maybe it's a good idea to note why the change is necessary in the commit message too? Acked-by: Tejun Heo <tj@kernel.org> Thanks. -- tejun ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] floppy: remove floppy-specific O_EXCL handling 2012-05-14 21:19 ` Tejun Heo @ 2012-05-14 21:38 ` Jiri Kosina 2012-05-14 23:22 ` NeilBrown 0 siblings, 1 reply; 8+ messages in thread From: Jiri Kosina @ 2012-05-14 21:38 UTC (permalink / raw) To: Tejun Heo; +Cc: Andrew Morton, Jens Axboe, NeilBrown, linux-kernel, Joe Perches On Mon, 14 May 2012, Tejun Heo wrote: > > Because since > > > > commit e525fd89d380c4a94c0d63913a1dd1a593ed25e7 > > Author: Tejun Heo <tj@kernel.org> > > Date: Sat Nov 13 11:55:17 2010 +0100 > > > > block: make blkdev_get/put() handle exclusive access > > > > mount of /dev/fd0 actually causes the fd0 block device be claimed with > > _EXCL. Before this commit, you are able to mount /dev/fd0 and then open() > > it afterward. After this commit you can't any more, because mounting > > /dev/fd0 already passes O_EXCL to floppy_open(), and thus noone else can > > open(/dev/fd0) any more. > > > > My commit brings things back into shape, i.e. you can, equally to other > > block devices, both mount it and open() it afterwards. > > Ah, that makes sense. Maybe it's a good idea to note why the change > is necessary in the commit message too? Makes sense. Please find the updated patch below. Andrew, Jens, are you going to pick it up, please? Thanks. From: Jiri Kosina <jkosina@suse.cz> Subject: [PATCH] floppy: remove floppy-specific O_EXCL handling Block layer now handles O_EXCL in a generic way for block devices. The semantics is however different for floppy and all other block devices, as floppy driver contains its own O_EXCL handling. The semantics for all-but-floppy bdevs is "there can be at most one O_EXCL open of this file", while for floppy bdev the semantics is "if someone has the bdev open with O_EXCL, noone else can open it". There is actual userspace-observable change in behavior because of this since commit e525fd89d380c ("block: make blkdev_get/put() handle exclusive access") -- on kernels containing this commit, mount of /dev/fd0 causes the fd0 block device be claimed with _EXCL, preventing subsequent open(/dev/fd0). Bring things back into shape, i.e. make it possible, analogically to other block devices, to mount the floppy and open() it afterwards -- remove the floppy-specific handling and let the generic bdev code O_EXCL handling take over. Signed-off-by: Jiri Kosina <jkosina@suse.cz> Acked-by: Tejun Heo <tj@kernel.org> --- drivers/block/floppy.c | 8 +------- 1 files changed, 1 insertions(+), 7 deletions(-) diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c index b0b00d7..fe694f8 100644 --- a/drivers/block/floppy.c +++ b/drivers/block/floppy.c @@ -3650,13 +3650,7 @@ static int floppy_open(struct block_device *bdev, fmode_t mode) set_bit(FD_VERIFY_BIT, &UDRS->flags); } - if (UDRS->fd_ref == -1 || (UDRS->fd_ref && (mode & FMODE_EXCL))) - goto out2; - - if (mode & FMODE_EXCL) - UDRS->fd_ref = -1; - else - UDRS->fd_ref++; + UDRS->fd_ref++; opened_bdev[drive] = bdev; -- Jiri Kosina SUSE Labs ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] floppy: remove floppy-specific O_EXCL handling 2012-05-14 21:38 ` Jiri Kosina @ 2012-05-14 23:22 ` NeilBrown 2012-05-15 6:15 ` Jiri Kosina 0 siblings, 1 reply; 8+ messages in thread From: NeilBrown @ 2012-05-14 23:22 UTC (permalink / raw) To: Jiri Kosina Cc: Tejun Heo, Andrew Morton, Jens Axboe, linux-kernel, Joe Perches [-- Attachment #1: Type: text/plain, Size: 3270 bytes --] On Mon, 14 May 2012 23:38:27 +0200 (CEST) Jiri Kosina <jkosina@suse.cz> wrote: > On Mon, 14 May 2012, Tejun Heo wrote: > > > > Because since > > > > > > commit e525fd89d380c4a94c0d63913a1dd1a593ed25e7 > > > Author: Tejun Heo <tj@kernel.org> > > > Date: Sat Nov 13 11:55:17 2010 +0100 > > > > > > block: make blkdev_get/put() handle exclusive access > > > > > > mount of /dev/fd0 actually causes the fd0 block device be claimed with > > > _EXCL. Before this commit, you are able to mount /dev/fd0 and then open() > > > it afterward. After this commit you can't any more, because mounting > > > /dev/fd0 already passes O_EXCL to floppy_open(), and thus noone else can > > > open(/dev/fd0) any more. > > > > > > My commit brings things back into shape, i.e. you can, equally to other > > > block devices, both mount it and open() it afterwards. > > > > Ah, that makes sense. Maybe it's a good idea to note why the change > > is necessary in the commit message too? > > Makes sense. Please find the updated patch below. Andrew, Jens, are you > going to pick it up, please? > Thanks. > > > > > From: Jiri Kosina <jkosina@suse.cz> > Subject: [PATCH] floppy: remove floppy-specific O_EXCL handling > > Block layer now handles O_EXCL in a generic way for block devices. > > The semantics is however different for floppy and all other block devices, > as floppy driver contains its own O_EXCL handling. > > The semantics for all-but-floppy bdevs is "there can be at most one O_EXCL > open of this file", while for floppy bdev the semantics is "if someone has > the bdev open with O_EXCL, noone else can open it". > > There is actual userspace-observable change in behavior because of this > since commit e525fd89d380c ("block: make blkdev_get/put() handle exclusive > access") -- on kernels containing this commit, mount of /dev/fd0 causes > the fd0 block device be claimed with _EXCL, preventing subsequent > open(/dev/fd0). > > Bring things back into shape, i.e. make it possible, analogically to other > block devices, to mount the floppy and open() it afterwards -- remove the > floppy-specific handling and let the generic bdev code O_EXCL handling > take over. > > Signed-off-by: Jiri Kosina <jkosina@suse.cz> > Acked-by: Tejun Heo <tj@kernel.org> > --- > drivers/block/floppy.c | 8 +------- > 1 files changed, 1 insertions(+), 7 deletions(-) > > diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c > index b0b00d7..fe694f8 100644 > --- a/drivers/block/floppy.c > +++ b/drivers/block/floppy.c > @@ -3650,13 +3650,7 @@ static int floppy_open(struct block_device *bdev, fmode_t mode) > set_bit(FD_VERIFY_BIT, &UDRS->flags); > } > > - if (UDRS->fd_ref == -1 || (UDRS->fd_ref && (mode & FMODE_EXCL))) > - goto out2; > - > - if (mode & FMODE_EXCL) > - UDRS->fd_ref = -1; > - else > - UDRS->fd_ref++; > + UDRS->fd_ref++; > > opened_bdev[drive] = bdev; > As we not longer set fd_ref to -1, you should also remove: if (UDRS->fd_ref < 0) UDRS->fd_ref = 0; else from floppy_release(), and the 'out:' section of floppy_open(). With those changes: Acked-by: NeilBrown <neilb@suse.de> Thanks, NeilBrown [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 828 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] floppy: remove floppy-specific O_EXCL handling 2012-05-14 23:22 ` NeilBrown @ 2012-05-15 6:15 ` Jiri Kosina 0 siblings, 0 replies; 8+ messages in thread From: Jiri Kosina @ 2012-05-15 6:15 UTC (permalink / raw) To: NeilBrown, Andrew Morton; +Cc: Tejun Heo, Jens Axboe, linux-kernel, Joe Perches On Tue, 15 May 2012, NeilBrown wrote: > > From: Jiri Kosina <jkosina@suse.cz> > > Subject: [PATCH] floppy: remove floppy-specific O_EXCL handling > > > > Block layer now handles O_EXCL in a generic way for block devices. > > > > The semantics is however different for floppy and all other block devices, > > as floppy driver contains its own O_EXCL handling. > > > > The semantics for all-but-floppy bdevs is "there can be at most one O_EXCL > > open of this file", while for floppy bdev the semantics is "if someone has > > the bdev open with O_EXCL, noone else can open it". > > > > There is actual userspace-observable change in behavior because of this > > since commit e525fd89d380c ("block: make blkdev_get/put() handle exclusive > > access") -- on kernels containing this commit, mount of /dev/fd0 causes > > the fd0 block device be claimed with _EXCL, preventing subsequent > > open(/dev/fd0). > > > > Bring things back into shape, i.e. make it possible, analogically to other > > block devices, to mount the floppy and open() it afterwards -- remove the > > floppy-specific handling and let the generic bdev code O_EXCL handling > > take over. > > > > Signed-off-by: Jiri Kosina <jkosina@suse.cz> > > Acked-by: Tejun Heo <tj@kernel.org> > > --- > > drivers/block/floppy.c | 8 +------- > > 1 files changed, 1 insertions(+), 7 deletions(-) > > > > diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c > > index b0b00d7..fe694f8 100644 > > --- a/drivers/block/floppy.c > > +++ b/drivers/block/floppy.c > > @@ -3650,13 +3650,7 @@ static int floppy_open(struct block_device *bdev, fmode_t mode) > > set_bit(FD_VERIFY_BIT, &UDRS->flags); > > } > > > > - if (UDRS->fd_ref == -1 || (UDRS->fd_ref && (mode & FMODE_EXCL))) > > - goto out2; > > - > > - if (mode & FMODE_EXCL) > > - UDRS->fd_ref = -1; > > - else > > - UDRS->fd_ref++; > > + UDRS->fd_ref++; > > > > opened_bdev[drive] = bdev; > > > > > As we not longer set fd_ref to -1, you should also remove: > > if (UDRS->fd_ref < 0) > UDRS->fd_ref = 0; > else > > from floppy_release(), and the 'out:' section of floppy_open(). > > With those changes: > Acked-by: NeilBrown <neilb@suse.de> Good point, thanks. Andrew, could you please replace floppy-remove-floppy-specific-o_excl-handling.patch in your tree with the updated version below? Thanks. From: Jiri Kosina <jkosina@suse.cz> Subject: [PATCH] floppy: remove floppy-specific O_EXCL handling Block layer now handles O_EXCL in a generic way for block devices. The semantics is however different for floppy and all other block devices, as floppy driver contains its own O_EXCL handling. The semantics for all-but-floppy bdevs is "there can be at most one O_EXCL open of this file", while for floppy bdev the semantics is "if someone has the bdev open with O_EXCL, noone else can open it". There is actual userspace-observable change in behavior because of this since commit e525fd89d380c ("block: make blkdev_get/put() handle exclusive access") -- on kernels containing this commit, mount of /dev/fd0 causes the fd0 block device be claimed with _EXCL, preventing subsequent open(/dev/fd0). Bring things back into shape, i.e. make it possible, analogically to other block devices, to mount the floppy and open() it afterwards -- remove the floppy-specific handling and let the generic bdev code O_EXCL handling take over. Signed-off-by: Jiri Kosina <jkosina@suse.cz> Acked-by: Tejun Heo <tj@kernel.org> Acked-by: NeilBrown <neilb@suse.de> Cc: Jens Axboe <axboe@kernel.dk> --- drivers/block/floppy.c | 18 ++++-------------- 1 files changed, 4 insertions(+), 14 deletions(-) diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c index b0b00d7..87c3a6e 100644 --- a/drivers/block/floppy.c +++ b/drivers/block/floppy.c @@ -3612,9 +3612,7 @@ static int floppy_release(struct gendisk *disk, fmode_t mode) mutex_lock(&floppy_mutex); mutex_lock(&open_lock); - if (UDRS->fd_ref < 0) - UDRS->fd_ref = 0; - else if (!UDRS->fd_ref--) { + if (!UDRS->fd_ref--) { DPRINT("floppy_release with fd_ref == 0"); UDRS->fd_ref = 0; } @@ -3650,13 +3648,7 @@ static int floppy_open(struct block_device *bdev, fmode_t mode) set_bit(FD_VERIFY_BIT, &UDRS->flags); } - if (UDRS->fd_ref == -1 || (UDRS->fd_ref && (mode & FMODE_EXCL))) - goto out2; - - if (mode & FMODE_EXCL) - UDRS->fd_ref = -1; - else - UDRS->fd_ref++; + UDRS->fd_ref++; opened_bdev[drive] = bdev; @@ -3719,10 +3711,8 @@ static int floppy_open(struct block_device *bdev, fmode_t mode) mutex_unlock(&floppy_mutex); return 0; out: - if (UDRS->fd_ref < 0) - UDRS->fd_ref = 0; - else - UDRS->fd_ref--; + UDRS->fd_ref--; + if (!UDRS->fd_ref) opened_bdev[drive] = NULL; out2: -- Jiri Kosina SUSE Labs ^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2012-05-15 6:16 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-05-13 9:02 [PATCH] floppy: remove floppy-specific O_EXCL handling Jiri Kosina 2012-05-14 16:25 ` Tejun Heo 2012-05-14 16:49 ` Joe Perches 2012-05-14 20:42 ` Jiri Kosina 2012-05-14 21:19 ` Tejun Heo 2012-05-14 21:38 ` Jiri Kosina 2012-05-14 23:22 ` NeilBrown 2012-05-15 6:15 ` Jiri Kosina
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox