patch-2.2.11 linux/drivers/block/loop.c
Next file: linux/drivers/block/nbd.c
Previous file: linux/drivers/block/ll_rw_blk.c
Back to the patch index
Back to the overall index
- Lines: 44
- Date:
Mon Aug 9 12:04:39 1999
- Orig file:
v2.2.10/linux/drivers/block/loop.c
- Orig date:
Sun May 30 10:17:03 1999
diff -u --recursive --new-file v2.2.10/linux/drivers/block/loop.c linux/drivers/block/loop.c
@@ -27,7 +27,13 @@
* - Should use an own CAP_* category instead of CAP_SYS_ADMIN
* - Should use the underlying filesystems/devices read function if possible
* to support read ahead (and for write)
- */
+ *
+ * WARNING/FIXME:
+ * - The block number as IV passing to low level transfer functions is broken:
+ * it passes the underlying device's block number instead of the
+ * offset. This makes it change for a given block when the file is
+ * moved/restored/copied and also doesn't work over NFS.
+ */
#include <linux/module.h>
@@ -107,7 +113,7 @@
static int xor_status(struct loop_device *lo, struct loop_info *info)
{
- if (info->lo_encrypt_key_size < 0)
+ if (info->lo_encrypt_key_size <= 0)
return -EINVAL;
return 0;
}
@@ -369,6 +375,10 @@
a file structure */
lo->lo_backing_file = NULL;
} else if (S_ISREG(inode->i_mode)) {
+ if (!inode->i_op->bmap) {
+ printk(KERN_ERR "loop: device has no block access/not implemented\n");
+ goto out_putf;
+ }
/* Backed by a regular file - we need to hold onto
a file structure for this file. We'll use it to
@@ -504,8 +514,6 @@
if ((unsigned int) info.lo_encrypt_key_size > LO_KEY_SIZE)
return -EINVAL;
type = info.lo_encrypt_type;
- if (info.lo_encrypt_key_size == 0 && type == LO_CRYPT_XOR)
- return -EINVAL;
if (type >= MAX_LO_CRYPT || xfer_funcs[type] == NULL)
return -EINVAL;
err = loop_release_xfer(lo);
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)