lkml.org 
[lkml]   [2003]   [Aug]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Date
Subject[PATCH] 2 of 2 - Allow O_EXCL on a block device to claim exclusive use.
### Comments for ChangeSet

the blockdev layer has a concept of 'claiming' a device,
so for example it can be claimed when a filesystem is
mounted or when it is included into a raid array.
Only one subsystem can claim it at a time.

This patch matches this functionality available to user-space
via the O_EXCL flag to open.

This allows user-space programs to easily test if a device
is currently mounted etc, and to prevent a device from being
mounted or otherwise claimed.

----------- Diffstat output ------------
./fs/block_dev.c | 16 +++++++++++++++-
1 files changed, 15 insertions(+), 1 deletion(-)
diff ./fs/block_dev.c~current~ ./fs/block_dev.c
--- ./fs/block_dev.c~current~ 2003-08-11 09:01:38.000000000 +1000
+++ ./fs/block_dev.c 2003-08-11 09:01:41.000000000 +1000
@@ -643,6 +643,7 @@ int blkdev_get(struct block_device *bdev
int blkdev_open(struct inode * inode, struct file * filp)
{
struct block_device *bdev;
+ int res;

/*
* Preserve backwards compatibility and allow large file access
@@ -655,7 +656,18 @@ int blkdev_open(struct inode * inode, st
bd_acquire(inode);
bdev = inode->i_bdev;

- return do_open(bdev, inode, filp);
+ res = do_open(bdev, inode, filp);
+ if (res)
+ return res;
+
+ if (!(filp->f_flags & O_EXCL) )
+ return 0;
+
+ if (!(res = bd_claim(bdev, filp)))
+ return 0;
+
+ blkdev_put(bdev, BDEV_FILE);
+ return res;
}

int blkdev_put(struct block_device *bdev, int kind)
@@ -704,6 +716,8 @@ int blkdev_put(struct block_device *bdev

int blkdev_close(struct inode * inode, struct file * filp)
{
+ if (inode->i_bdev->bd_holder == filp)
+ bd_release(inode->i_bdev);
return blkdev_put(inode->i_bdev, BDEV_FILE);
}

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-03-22 13:47    [from the cache]
©2003-2011 Jasper Spaans