shelly wrote: > i would like to know how to include a ioctl in zfs_ioctl.c. > > So would be grateful if somebody explained how zfs ioctls work.
zfs ioctls are made to the device /dev/zfs. To add a new ioctl, you'd have to do the following. 1. Add an entry say, ZFS_IOC_MYIOCTL, for the new ioctl to zfs_ioc_t. See: usr/src/uts/common/sys/fs/zfs.h, enum zfs_ioc 2. You'll have to add an entry to the ioctl vector zfs_ioc_vec. Something like: { zfs_ioc_myioctl, zfs_secpolicy_[read|write|none|...=], [pool_name|dataset_name|no_name] }, Make sure the new additions to zfs_ioc and zfs_ioc_vec are at the same offset. 3. Add your ioctl handling routine to usr/src/uts/common/fs/zfs/zfs_ioctl.c static int zfs_ioc_myioctl(zfs_cmd_t *zc) { // your ioctl implementation } 4. You might want to add a library routine to call the ioctl to usr/src/lib/libzfs/common/libzfs_pool.c int zpool_myioctl(libzfs_handle_t *hdl) { zfs_cmd_t zc = { 0 }; int error; error = ioctl(hdl->libzfs_fd, ZFS_IOC_MYIOCTL, &zc); return (error); } 5. You could declare the new library routine in libzfs.h usr/src/lib/libzfs/common/libzfs.h extern int zpool_myioctl(libzfs_handle_t *); At least, you should now know which files to look at. Good luck and happy hacking! Cheers Manoj