patch-2.4.10 linux/drivers/block/blkpg.c
Next file: linux/drivers/block/cciss.c
Previous file: linux/drivers/block/ataflop.c
Back to the patch index
Back to the overall index
- Lines: 56
- Date:
Mon Sep 17 15:37:33 2001
- Orig file:
v2.4.9/linux/drivers/block/blkpg.c
- Orig date:
Sun May 20 11:34:05 2001
diff -u --recursive --new-file v2.4.9/linux/drivers/block/blkpg.c linux/drivers/block/blkpg.c
@@ -54,17 +54,6 @@
* Note that several drives may have the same major.
*/
-/* a linear search, superfluous when dev is a pointer */
-static struct gendisk *get_gendisk(kdev_t dev) {
- struct gendisk *g;
- int m = MAJOR(dev);
-
- for (g = gendisk_head; g; g = g->next)
- if (g->major == m)
- break;
- return g;
-}
-
/*
* Add a partition.
*
@@ -250,6 +239,7 @@
case BLKGETSIZE:
/* Today get_gendisk() requires a linear scan;
add this when dev has pointer type. */
+ /* add BLKGETSIZE64 too */
g = get_gendisk(dev);
if (!g)
longval = 0;
@@ -273,6 +263,29 @@
case BLKELVSET:
return blkelvset_ioctl(&blk_get_queue(dev)->elevator,
(blkelv_ioctl_arg_t *) arg);
+
+ case BLKBSZGET:
+ /* get the logical block size (cf. BLKSSZGET) */
+ intval = BLOCK_SIZE;
+ if (blksize_size[MAJOR(dev)])
+ intval = blksize_size[MAJOR(dev)][MINOR(dev)];
+ return put_user (intval, (int *) arg);
+
+ case BLKBSZSET:
+ /* set the logical block size */
+ if (!capable (CAP_SYS_ADMIN))
+ return -EACCES;
+ if (!dev || !arg)
+ return -EINVAL;
+ if (get_user (intval, (int *) arg))
+ return -EFAULT;
+ if (intval > PAGE_SIZE || intval < 512 ||
+ (intval & (intval - 1)))
+ return -EINVAL;
+ if (is_mounted (dev) || is_swap_partition (dev))
+ return -EBUSY;
+ set_blocksize (dev, intval);
+ return 0;
default:
return -EINVAL;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)