Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F153130807
D20705.id58819.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D20705.id58819.diff
View Options
Index: sys/kern/vfs_vnops.c
===================================================================
--- sys/kern/vfs_vnops.c
+++ sys/kern/vfs_vnops.c
@@ -1458,6 +1458,25 @@
return (0);
}
+/* generic FIOBMAP2 implementation */
+static int
+vn_ioc_bmap2(struct file *fp, struct fiobmap2_arg *arg, struct ucred *cred)
+{
+ struct vnode *vp = fp->f_vnode;
+ daddr_t lbn = arg->bn;
+ int error;
+
+ vn_lock(vp, LK_SHARED | LK_RETRY);
+#ifdef MAC
+ error = mac_vnode_check_read(cred, fp->f_cred, vp);
+ if (error == 0)
+#endif
+ error = VOP_BMAP(vp, lbn, NULL, &arg->bn, &arg->runp,
+ &arg->runb);
+ VOP_UNLOCK(vp, 0);
+ return (error);
+}
+
/*
* File table vnode ioctl routine.
*/
@@ -1481,6 +1500,9 @@
if (error == 0)
*(int *)data = vattr.va_size - fp->f_offset;
return (error);
+ case FIOBMAP2:
+ return (vn_ioc_bmap2(fp, (struct fiobmap2_arg*)data,
+ active_cred));
case FIONBIO:
case FIOASYNC:
return (0);
Index: sys/sys/filio.h
===================================================================
--- sys/sys/filio.h
+++ sys/sys/filio.h
@@ -62,6 +62,13 @@
/* Handle lseek SEEK_DATA and SEEK_HOLE for holey file knowledge. */
#define FIOSEEKDATA _IOWR('f', 97, off_t) /* SEEK_DATA */
#define FIOSEEKHOLE _IOWR('f', 98, off_t) /* SEEK_HOLE */
+struct fiobmap2_arg {
+ int64_t bn;
+ int runp;
+ int runb;
+};
+/* Get the file's bmap info for the logical block bn */
+#define FIOBMAP2 _IOWR('f', 99, struct fiobmap2_arg)
#ifdef _KERNEL
#ifdef COMPAT_FREEBSD32
Index: sys/ufs/ufs/ufs_bmap.c
===================================================================
--- sys/ufs/ufs/ufs_bmap.c
+++ sys/ufs/ufs/ufs_bmap.c
@@ -200,12 +200,15 @@
*bnp = blkptrtodb(ump, ip->i_din2->di_extb[-1 - bn]);
if (*bnp == 0)
*bnp = -1;
- if (nbp == NULL)
- panic("ufs_bmaparray: mapping ext data");
+ if (nbp == NULL) {
+ /* indirect block not found */
+ return (EINVAL);
+ }
nbp->b_xflags |= BX_ALTDATA;
return (0);
} else {
- panic("ufs_bmaparray: blkno out of range");
+ /* blkno out of range */
+ return (EINVAL);
}
/*
* Since this is FFS independent code, we are out of
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Apr 20, 9:21 AM (19 h, 15 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31830031
Default Alt Text
D20705.id58819.diff (2 KB)
Attached To
Mode
D20705: Add FIOBMAP2 ioctl
Attached
Detach File
Event Timeline
Log In to Comment