Index: 2.6.x-xfs-n/fs/jfs/Makefile =================================================================== --- 2.6.x-xfs-n.orig/fs/jfs/Makefile +++ 2.6.x-xfs-n/fs/jfs/Makefile @@ -3,7 +3,7 @@ # ifeq ($(CONFIG_JFS_DMAPI),y) - EXTRA_CFLAGS += -I$(TOPDIR)/fs/jfs -DDM_USE_SHASH + EXTRA_CFLAGS += -I$(TOPDIR)/fs/jfs -I$(TOPDIR)/fs/dmapi endif obj-$(CONFIG_JFS_FS) += jfs.o @@ -16,22 +16,6 @@ jfs-$(CONFIG_JFS_POSIX_ACL) += acl.o -jfs-$(CONFIG_JFS_DMAPI) += $(addprefix dmapi/, \ - dmapi_sysent.o \ - dmapi_attr.o \ - dmapi_config.o \ - dmapi_bulkattr.o \ - dmapi_dmattr.o \ - dmapi_event.o \ - dmapi_handle.o \ - dmapi_hole.o \ - dmapi_io.o \ - dmapi_mountinfo.o \ - dmapi_region.o \ - dmapi_register.o \ - dmapi_right.o \ - dmapi_session.o \ - dmapi_jfs.o \ - kmem.o) +jfs-$(CONFIG_JFS_DMAPI) += dmapi/dmapi_jfs.o dmapi/kmem.o EXTRA_CFLAGS += -D_JFS_4K Index: 2.6.x-xfs-n/fs/jfs/dmapi/dmapi_jfs.c =================================================================== --- 2.6.x-xfs-n.orig/fs/jfs/dmapi/dmapi_jfs.c +++ 2.6.x-xfs-n/fs/jfs/dmapi/dmapi_jfs.c @@ -44,7 +44,8 @@ #include #include #endif -#include "dmapi_private.h" +#include +#include #include "jfs_debug.h" #include "jfs_incore.h" #include "jfs_filsys.h" @@ -52,6 +53,7 @@ #include "jfs_txnmgr.h" #include "jfs_dmap.h" #include "jfs_dmapi.h" +#include "dmapi/kmem.h" /* Here's what's left to be done: * Figure out locktype in jfs_dm_send_data_event() @@ -574,7 +576,7 @@ { struct inode *ip; dm_stat_t *buf; - jfs_handle_t handle; + dm_handle_t handle; u_int statstruct_sz; buf = (dm_stat_t *)buffer; @@ -612,7 +614,7 @@ memcpy(buf+1, &handle, sizeof(handle)); /* handle follows stat struct */ buf->dt_handle.vd_offset = (int) sizeof(dm_stat_t); - buf->dt_handle.vd_length = (unsigned int) JFS_HSIZE(handle); + buf->dt_handle.vd_length = (unsigned int) DM_HSIZE(handle); statstruct_sz = (statstruct_sz+(DM_STAT_ALIGN-1)) & ~(DM_STAT_ALIGN-1); } else { @@ -3305,8 +3307,8 @@ int jfs_dm_get_fsys_vector( - struct inode *ip, - caddr_t addr) + struct super_block *sb, + void *addr) { static int initialized = 0; dm_fcntl_vector_t *vecrq; @@ -3584,38 +3586,6 @@ }; #endif -void __init -jfs_dm_init(void) -{ -#ifdef CONFIG_COMPAT - unsigned int i; - int err; - - for (i = 0; i < ARRAY_SIZE(ioctl32_cmds); i++) { - err = register_ioctl32_conversion(ioctl32_cmds[i].cmd, NULL); - if (err >= 0) - ioctl32_cmds[i].reg++; - else - printk(KERN_ERR "jfs_dm_init: unable to register ioctl %x, err = %d\n", ioctl32_cmds[i].cmd, err); - } -#endif -} - -void __exit -jfs_dm_exit(void) -{ -#ifdef CONFIG_COMPAT - unsigned int i; - - for (i = 0; i < ARRAY_SIZE(ioctl32_cmds); i++) { - if (ioctl32_cmds[i].reg) { - unregister_ioctl32_conversion(ioctl32_cmds[i].cmd); - ioctl32_cmds[i].reg--; - } - } -#endif -} - /* * jfs_iget - called by DMAPI to get inode from file handle */ @@ -3623,7 +3593,7 @@ jfs_iget( struct super_block *sbp, struct inode **ipp, - fid_t *fidp) + struct dm_fsfid *fidp) { jfs_fid_t *jfid; struct inode *ip; @@ -3807,7 +3777,7 @@ { struct jfs_sb_info *sbi = JFS_SBI(sb); - return JFS_SEND_NAMESP(DM_EVENT_PREUNMOUNT, sbi->dm_root, + return JFS_SEND_PREUNMOUNT(sb, sbi->dm_root, DM_RIGHT_NULL, sbi->dm_root, DM_RIGHT_NULL, NULL, NULL, 0, 0, ((sbi->dm_evmask & (1<i_sb); + unsigned long ino; + + if (sbi->dm_fsid == 0) + return(-EINVAL); + + fid.fid_len = sizeof(jfs_fid_t) - sizeof(fid.fid_len); + fid.fid_pad = 0; + fid.fid_gen = ip->i_generation; + ino = ip->i_ino; + memcpy(&fid.fid_ino, &ino, sizeof(fid.fid_ino)); + + memcpy(dmfsid, &sbi->dm_fsid, sizeof(*dmfsid)); + memcpy(dmfsfid, &fid, sizeof(*dmfsfid)); + + return 0; +} + +static void +jfs_dm_get_fsid( + struct super_block *sb, + dm_fsid_t *fsid) +{ + struct jfs_sb_info *sbi = JFS_SBI(sb); + + memcpy(fsid, &sbi->dm_fsid, sizeof(*fsid)); +} + + +/* + * Filesystem operations accessed by the DMAPI core. + */ +struct filesystem_dmapi_operations jfs_dmapiops = { + .get_fsys_vector = jfs_dm_get_fsys_vector, + .fh_to_inode = jfs_iget, + .inode_to_fh = jfs_dm_inode_to_fh, + .get_fsid = jfs_dm_get_fsid, +}; + +void __init +jfs_dm_init( + struct file_system_type *fstype) +{ + dmapi_register(fstype, &jfs_dmapiops); +#ifdef CONFIG_COMPAT + unsigned int i; + int err; + + for (i = 0; i < ARRAY_SIZE(ioctl32_cmds); i++) { + err = register_ioctl32_conversion(ioctl32_cmds[i].cmd, NULL); + if (err >= 0) + ioctl32_cmds[i].reg++; + else + printk(KERN_ERR "jfs_dm_init: unable to register ioctl %x, err = %d\n", ioctl32_cmds[i].cmd, err); + } +#endif +} + +void __exit +jfs_dm_exit( + struct file_system_type *fstype) +{ + dmapi_unregister(fstype); +#ifdef CONFIG_COMPAT + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(ioctl32_cmds); i++) { + if (ioctl32_cmds[i].reg) { + unregister_ioctl32_conversion(ioctl32_cmds[i].cmd); + ioctl32_cmds[i].reg--; + } + } +#endif +} + Index: 2.6.x-xfs-n/fs/jfs/dmapi/dmapi_jfs.h =================================================================== --- 2.6.x-xfs-n.orig/fs/jfs/dmapi/dmapi_jfs.h +++ 2.6.x-xfs-n/fs/jfs/dmapi/dmapi_jfs.h @@ -16,9 +16,6 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "sv.h" -#include "spin.h" -#include "kmem.h" #include #include #include @@ -85,12 +82,120 @@ __u16 da_pad; /* DMIG extra padding */ } dm_attrs_t; -int jfs_iget( - struct super_block *sbp, - struct inode **ipp, - fid_t *fidp); int jfs_dm_mount(struct super_block *sp); int jfs_dm_preunmount(struct super_block *sp); void jfs_dm_unmount(struct super_block *sp, int rc); + +#define DMATTR_PREFIXLEN 9 + +/* Do you really want to allow the user to fiddle + * with the HSM's attributes? + */ +#define DMATTR_PREFIXSTRING "user.dmi." + +#define DMATTR_PERS_REGIONS "system.dmi.persistent.regions" + +/* events valid in dm_set_disp() when called with a filesystem handle. */ + +#define DM_VALID_DISP_EVENTS ( \ + (1 << DM_EVENT_PREUNMOUNT) | \ + (1 << DM_EVENT_UNMOUNT) | \ + (1 << DM_EVENT_NOSPACE) | \ + (1 << DM_EVENT_CREATE) | \ + (1 << DM_EVENT_POSTCREATE) | \ + (1 << DM_EVENT_REMOVE) | \ + (1 << DM_EVENT_POSTREMOVE) | \ + (1 << DM_EVENT_RENAME) | \ + (1 << DM_EVENT_POSTRENAME) | \ + (1 << DM_EVENT_LINK) | \ + (1 << DM_EVENT_POSTLINK) | \ + (1 << DM_EVENT_SYMLINK) | \ + (1 << DM_EVENT_POSTSYMLINK) | \ + (1 << DM_EVENT_READ) | \ + (1 << DM_EVENT_WRITE) | \ + (1 << DM_EVENT_TRUNCATE) | \ + (1 << DM_EVENT_ATTRIBUTE) | \ + (1 << DM_EVENT_CLOSE) | \ + (1 << DM_EVENT_DESTROY) ) + +#define DM_JFS_VALID_FS_EVENTS ( \ + (1 << DM_EVENT_PREUNMOUNT) | \ + (1 << DM_EVENT_UNMOUNT) | \ + (1 << DM_EVENT_NOSPACE) | \ + (1 << DM_EVENT_CREATE) | \ + (1 << DM_EVENT_POSTCREATE) | \ + (1 << DM_EVENT_REMOVE) | \ + (1 << DM_EVENT_POSTREMOVE) | \ + (1 << DM_EVENT_RENAME) | \ + (1 << DM_EVENT_POSTRENAME) | \ + (1 << DM_EVENT_LINK) | \ + (1 << DM_EVENT_POSTLINK) | \ + (1 << DM_EVENT_SYMLINK) | \ + (1 << DM_EVENT_POSTSYMLINK) | \ + (1 << DM_EVENT_ATTRIBUTE) | \ + (1 << DM_EVENT_CLOSE) | \ + (1 << DM_EVENT_DESTROY) ) + +/* Events valid in dm_set_eventlist() when called with a file handle for + a regular file or a symlink. These events are persistent. +*/ + +#define DM_JFS_VALID_FILE_EVENTS ( \ + (1 << DM_EVENT_ATTRIBUTE) | \ + (1 << DM_EVENT_CLOSE) | \ + (1 << DM_EVENT_DESTROY) ) + +/* Events valid in dm_set_region(). These events are persistent. +*/ + +#define DM_JFS_VALID_REGION_EVENTS ( \ + (1 << DM_EVENT_READ) | \ + (1 << DM_EVENT_WRITE) | \ + (1 << DM_EVENT_TRUNCATE) ) + +/* Events valid in dm_set_eventlist() when called with a file handle for + a directory. These events are persistent. +*/ + +#define DM_JFS_VALID_DIRECTORY_EVENTS ( \ + (1 << DM_EVENT_CREATE) | \ + (1 << DM_EVENT_POSTCREATE) | \ + (1 << DM_EVENT_REMOVE) | \ + (1 << DM_EVENT_POSTREMOVE) | \ + (1 << DM_EVENT_RENAME) | \ + (1 << DM_EVENT_POSTRENAME) | \ + (1 << DM_EVENT_LINK) | \ + (1 << DM_EVENT_POSTLINK) | \ + (1 << DM_EVENT_SYMLINK) | \ + (1 << DM_EVENT_POSTSYMLINK) | \ + (1 << DM_EVENT_ATTRIBUTE) | \ + (1 << DM_EVENT_CLOSE) | \ + (1 << DM_EVENT_DESTROY) ) + +/* Events supported by the JFS filesystem. */ +#define DM_JFS_SUPPORTED_EVENTS ( \ + (1 << DM_EVENT_MOUNT) | \ + (1 << DM_EVENT_PREUNMOUNT) | \ + (1 << DM_EVENT_UNMOUNT) | \ + (1 << DM_EVENT_NOSPACE) | \ + (1 << DM_EVENT_CREATE) | \ + (1 << DM_EVENT_POSTCREATE) | \ + (1 << DM_EVENT_REMOVE) | \ + (1 << DM_EVENT_POSTREMOVE) | \ + (1 << DM_EVENT_RENAME) | \ + (1 << DM_EVENT_POSTRENAME) | \ + (1 << DM_EVENT_LINK) | \ + (1 << DM_EVENT_POSTLINK) | \ + (1 << DM_EVENT_SYMLINK) | \ + (1 << DM_EVENT_POSTSYMLINK) | \ + (1 << DM_EVENT_READ) | \ + (1 << DM_EVENT_WRITE) | \ + (1 << DM_EVENT_TRUNCATE) | \ + (1 << DM_EVENT_ATTRIBUTE) | \ + (1 << DM_EVENT_CLOSE) | \ + (1 << DM_EVENT_DESTROY) | \ + (1 << DM_EVENT_USER) ) + + #endif Index: 2.6.x-xfs-n/fs/jfs/dmapi/dmapi_kern.h =================================================================== --- 2.6.x-xfs-n.orig/fs/jfs/dmapi/dmapi_kern.h +++ 2.6.x-xfs-n/fs/jfs/dmapi/dmapi_kern.h @@ -1,3 +1,4 @@ +#error NOT HERE /* * Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved. * Index: 2.6.x-xfs-n/fs/jfs/dmapi/dmapi_private.h =================================================================== --- 2.6.x-xfs-n.orig/fs/jfs/dmapi/dmapi_private.h +++ 2.6.x-xfs-n/fs/jfs/dmapi/dmapi_private.h @@ -1,3 +1,4 @@ +#error NOT HERE /* * Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. * Index: 2.6.x-xfs-n/fs/jfs/dmapi/jfsdmapi.h =================================================================== --- 2.6.x-xfs-n.orig/fs/jfs/dmapi/jfsdmapi.h +++ 2.6.x-xfs-n/fs/jfs/dmapi/jfsdmapi.h @@ -1,3 +1,4 @@ +#error NOT HERE /* * Copyright (c) 1995-2003 Silicon Graphics, Inc. All Rights Reserved. * Index: 2.6.x-xfs-n/fs/jfs/dmapi/sv.h =================================================================== --- 2.6.x-xfs-n.orig/fs/jfs/dmapi/sv.h +++ 2.6.x-xfs-n/fs/jfs/dmapi/sv.h @@ -1,3 +1,4 @@ +#error NOT HERE /* * Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved. * Portions Copyright (c) 2002 Christoph Hellwig. All Rights Reserved. Index: 2.6.x-xfs-n/fs/jfs/jfs_dmapi.h =================================================================== --- 2.6.x-xfs-n.orig/fs/jfs/jfs_dmapi.h +++ 2.6.x-xfs-n/fs/jfs/jfs_dmapi.h @@ -32,6 +32,9 @@ #ifndef __JFS_DMAPI_H__ #define __JFS_DMAPI_H__ +#include +#include + /* Values used to define the on-disk version of dm_attrname_t. All * on-disk attribute names start with the 8-byte string "app.dmi.". * @@ -63,18 +66,12 @@ DM_FLAGS_NDELAY : 0) -extern int dmapi_init(void); -extern void dmapi_uninit(void); +extern void jfs_dm_init(struct file_system_type *fstype); +extern void jfs_dm_exit(struct file_system_type *fstype); int jfs_dm_send_data_event(int, struct inode *, dm_off_t, size_t, int, int /*vrwlock_t*/ *); int jfs_dm_send_mmap_event(struct vm_area_struct *, unsigned int); -int dm_send_destroy_event(struct inode *, dm_right_t); -int dm_send_namesp_event(dm_eventtype_t, struct inode *, - dm_right_t, struct inode *, dm_right_t, - char *, char *, mode_t, int, int); -void dm_send_unmount_event(struct super_block *, struct inode *, - dm_right_t, mode_t, int, int); #define JFS_SEND_DATA(ev,ip,off,len,fl,lock) \ jfs_dm_send_data_event(ev,ip,off,len,fl,lock) @@ -83,7 +80,9 @@ #define JFS_SEND_DESTROY(ip,right) \ dm_send_destroy_event(ip,right) #define JFS_SEND_NAMESP(ev,i1,r1,i2,r2,n1,n2,mode,rval,fl) \ - dm_send_namesp_event(ev,i1,r1,i2,r2,n1,n2,mode,rval,fl) + dm_send_namesp_event(ev,NULL,i1,r1,i2,r2,n1,n2,mode,rval,fl) +#define JFS_SEND_PREUNMOUNT(sb,i1,r1,i2,r2,n1,n2,mode,rval,fl) \ + dm_send_namesp_event(DM_EVENT_PREUNMOUNT,sb,i1,r1,i2,r2,n1,n2,mode,rval,fl) #define JFS_SEND_UNMOUNT(sbp,ip,right,mode,rval,fl) \ dm_send_unmount_event(sbp,ip,right,mode,rval,fl) Index: 2.6.x-xfs-n/fs/jfs/jfs_incore.h =================================================================== --- 2.6.x-xfs-n.orig/fs/jfs/jfs_incore.h +++ 2.6.x-xfs-n/fs/jfs/jfs_incore.h @@ -27,7 +27,7 @@ #include "jfs_dtree.h" #ifdef CONFIG_JFS_DMAPI #include "jfs_filsys.h" -#include "dmapi/jfsdmapi.h" /* for dm_region_t */ +#include /* for dm_region_t */ #include "dmapi/dmapi_jfs.h" /* for dm_attrs_t */ #endif Index: 2.6.x-xfs-n/fs/jfs/jfs_xtree.c =================================================================== --- 2.6.x-xfs-n.orig/fs/jfs/jfs_xtree.c +++ 2.6.x-xfs-n/fs/jfs/jfs_xtree.c @@ -27,6 +27,7 @@ #include "jfs_dinode.h" #include "jfs_superblock.h" #include "jfs_debug.h" +#include "dmapi/kmem.h" /* * xtree local flag Index: 2.6.x-xfs-n/fs/jfs/super.c =================================================================== --- 2.6.x-xfs-n.orig/fs/jfs/super.c +++ 2.6.x-xfs-n/fs/jfs/super.c @@ -757,11 +757,7 @@ #endif #ifdef CONFIG_JFS_DMAPI - rc = dmapi_init(); - if (rc) { - jfs_err("init_jfs_fs: dmapi_init failed w/rc = %d", rc); - goto kill_committask; - } + jfs_dm_init(&jfs_fs_type); #endif return register_filesystem(&jfs_fs_type); @@ -803,7 +799,7 @@ jfs_proc_clean(); #endif #ifdef CONFIG_JFS_DMAPI - dmapi_uninit(); + jfs_dm_exit(&jfs_fs_type); #endif unregister_filesystem(&jfs_fs_type); kmem_cache_destroy(jfs_inode_cachep); Index: 2.6.x-xfs-n/fs/Kconfig =================================================================== --- 2.6.x-xfs-n.orig/fs/Kconfig +++ 2.6.x-xfs-n/fs/Kconfig @@ -281,6 +281,7 @@ config JFS_FS tristate "JFS filesystem support" select NLS + select DMAPI if JFS_DMAPI help This is a port of IBM's Journaled Filesystem . More information is available in the file Documentation/filesystems/jfs.txt.