|
|
|
@ -59,8 +59,8 @@ |
|
|
|
|
#include <linux/writeback.h> |
|
|
|
|
#include <linux/kthread.h> |
|
|
|
|
|
|
|
|
|
STATIC struct quotactl_ops linvfs_qops; |
|
|
|
|
STATIC struct super_operations linvfs_sops; |
|
|
|
|
STATIC struct quotactl_ops xfs_quotactl_operations; |
|
|
|
|
STATIC struct super_operations xfs_super_operations; |
|
|
|
|
STATIC kmem_zone_t *xfs_vnode_zone; |
|
|
|
|
STATIC kmem_zone_t *xfs_ioend_zone; |
|
|
|
|
mempool_t *xfs_ioend_pool; |
|
|
|
@ -332,7 +332,7 @@ xfs_blkdev_issue_flush( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC struct inode * |
|
|
|
|
linvfs_alloc_inode( |
|
|
|
|
xfs_fs_alloc_inode( |
|
|
|
|
struct super_block *sb) |
|
|
|
|
{ |
|
|
|
|
vnode_t *vp; |
|
|
|
@ -344,14 +344,14 @@ linvfs_alloc_inode( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC void |
|
|
|
|
linvfs_destroy_inode( |
|
|
|
|
xfs_fs_destroy_inode( |
|
|
|
|
struct inode *inode) |
|
|
|
|
{ |
|
|
|
|
kmem_zone_free(xfs_vnode_zone, LINVFS_GET_VP(inode)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC void |
|
|
|
|
linvfs_inode_init_once( |
|
|
|
|
xfs_fs_inode_init_once( |
|
|
|
|
void *vnode, |
|
|
|
|
kmem_zone_t *zonep, |
|
|
|
|
unsigned long flags) |
|
|
|
@ -367,7 +367,7 @@ xfs_init_zones(void) |
|
|
|
|
xfs_vnode_zone = kmem_zone_init_flags(sizeof(vnode_t), "xfs_vnode_t", |
|
|
|
|
KM_ZONE_HWALIGN | KM_ZONE_RECLAIM | |
|
|
|
|
KM_ZONE_SPREAD, |
|
|
|
|
linvfs_inode_init_once); |
|
|
|
|
xfs_fs_inode_init_once); |
|
|
|
|
if (!xfs_vnode_zone) |
|
|
|
|
goto out; |
|
|
|
|
|
|
|
|
@ -405,7 +405,7 @@ xfs_destroy_zones(void) |
|
|
|
|
* since this is when the inode itself becomes flushable. |
|
|
|
|
*/ |
|
|
|
|
STATIC int |
|
|
|
|
linvfs_write_inode( |
|
|
|
|
xfs_fs_write_inode( |
|
|
|
|
struct inode *inode, |
|
|
|
|
int sync) |
|
|
|
|
{ |
|
|
|
@ -429,13 +429,13 @@ linvfs_write_inode( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC void |
|
|
|
|
linvfs_clear_inode( |
|
|
|
|
xfs_fs_clear_inode( |
|
|
|
|
struct inode *inode) |
|
|
|
|
{ |
|
|
|
|
vnode_t *vp = LINVFS_GET_VP(inode); |
|
|
|
|
int error, cache; |
|
|
|
|
|
|
|
|
|
vn_trace_entry(vp, "clear_inode", (inst_t *)__return_address); |
|
|
|
|
vn_trace_entry(vp, __FUNCTION__, (inst_t *)__return_address); |
|
|
|
|
|
|
|
|
|
XFS_STATS_INC(vn_rele); |
|
|
|
|
XFS_STATS_INC(vn_remove); |
|
|
|
@ -608,7 +608,7 @@ xfssyncd( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC int |
|
|
|
|
linvfs_start_syncd( |
|
|
|
|
xfs_fs_start_syncd( |
|
|
|
|
vfs_t *vfsp) |
|
|
|
|
{ |
|
|
|
|
vfsp->vfs_sync_work.w_syncer = vfs_sync_worker; |
|
|
|
@ -620,20 +620,20 @@ linvfs_start_syncd( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC void |
|
|
|
|
linvfs_stop_syncd( |
|
|
|
|
xfs_fs_stop_syncd( |
|
|
|
|
vfs_t *vfsp) |
|
|
|
|
{ |
|
|
|
|
kthread_stop(vfsp->vfs_sync_task); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC void |
|
|
|
|
linvfs_put_super( |
|
|
|
|
xfs_fs_put_super( |
|
|
|
|
struct super_block *sb) |
|
|
|
|
{ |
|
|
|
|
vfs_t *vfsp = LINVFS_GET_VFS(sb); |
|
|
|
|
int error; |
|
|
|
|
|
|
|
|
|
linvfs_stop_syncd(vfsp); |
|
|
|
|
xfs_fs_stop_syncd(vfsp); |
|
|
|
|
VFS_SYNC(vfsp, SYNC_ATTR|SYNC_DELWRI, NULL, error); |
|
|
|
|
if (!error) |
|
|
|
|
VFS_UNMOUNT(vfsp, 0, NULL, error); |
|
|
|
@ -647,7 +647,7 @@ linvfs_put_super( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC void |
|
|
|
|
linvfs_write_super( |
|
|
|
|
xfs_fs_write_super( |
|
|
|
|
struct super_block *sb) |
|
|
|
|
{ |
|
|
|
|
vfs_t *vfsp = LINVFS_GET_VFS(sb); |
|
|
|
@ -663,7 +663,7 @@ linvfs_write_super( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC int |
|
|
|
|
linvfs_sync_super( |
|
|
|
|
xfs_fs_sync_super( |
|
|
|
|
struct super_block *sb, |
|
|
|
|
int wait) |
|
|
|
|
{ |
|
|
|
@ -702,7 +702,7 @@ linvfs_sync_super( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC int |
|
|
|
|
linvfs_statfs( |
|
|
|
|
xfs_fs_statfs( |
|
|
|
|
struct super_block *sb, |
|
|
|
|
struct kstatfs *statp) |
|
|
|
|
{ |
|
|
|
@ -714,7 +714,7 @@ linvfs_statfs( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC int |
|
|
|
|
linvfs_remount( |
|
|
|
|
xfs_fs_remount( |
|
|
|
|
struct super_block *sb, |
|
|
|
|
int *flags, |
|
|
|
|
char *options) |
|
|
|
@ -731,14 +731,14 @@ linvfs_remount( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC void |
|
|
|
|
linvfs_freeze_fs( |
|
|
|
|
xfs_fs_lockfs( |
|
|
|
|
struct super_block *sb) |
|
|
|
|
{ |
|
|
|
|
VFS_FREEZE(LINVFS_GET_VFS(sb)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC int |
|
|
|
|
linvfs_show_options( |
|
|
|
|
xfs_fs_show_options( |
|
|
|
|
struct seq_file *m, |
|
|
|
|
struct vfsmount *mnt) |
|
|
|
|
{ |
|
|
|
@ -750,7 +750,7 @@ linvfs_show_options( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC int |
|
|
|
|
linvfs_quotasync( |
|
|
|
|
xfs_fs_quotasync( |
|
|
|
|
struct super_block *sb, |
|
|
|
|
int type) |
|
|
|
|
{ |
|
|
|
@ -762,7 +762,7 @@ linvfs_quotasync( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC int |
|
|
|
|
linvfs_getxstate( |
|
|
|
|
xfs_fs_getxstate( |
|
|
|
|
struct super_block *sb, |
|
|
|
|
struct fs_quota_stat *fqs) |
|
|
|
|
{ |
|
|
|
@ -774,7 +774,7 @@ linvfs_getxstate( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC int |
|
|
|
|
linvfs_setxstate( |
|
|
|
|
xfs_fs_setxstate( |
|
|
|
|
struct super_block *sb, |
|
|
|
|
unsigned int flags, |
|
|
|
|
int op) |
|
|
|
@ -787,7 +787,7 @@ linvfs_setxstate( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC int |
|
|
|
|
linvfs_getxquota( |
|
|
|
|
xfs_fs_getxquota( |
|
|
|
|
struct super_block *sb, |
|
|
|
|
int type, |
|
|
|
|
qid_t id, |
|
|
|
@ -803,7 +803,7 @@ linvfs_getxquota( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC int |
|
|
|
|
linvfs_setxquota( |
|
|
|
|
xfs_fs_setxquota( |
|
|
|
|
struct super_block *sb, |
|
|
|
|
int type, |
|
|
|
|
qid_t id, |
|
|
|
@ -819,7 +819,7 @@ linvfs_setxquota( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC int |
|
|
|
|
linvfs_fill_super( |
|
|
|
|
xfs_fs_fill_super( |
|
|
|
|
struct super_block *sb, |
|
|
|
|
void *data, |
|
|
|
|
int silent) |
|
|
|
@ -844,10 +844,10 @@ linvfs_fill_super( |
|
|
|
|
|
|
|
|
|
sb_min_blocksize(sb, BBSIZE); |
|
|
|
|
#ifdef CONFIG_XFS_EXPORT |
|
|
|
|
sb->s_export_op = &linvfs_export_ops; |
|
|
|
|
sb->s_export_op = &xfs_export_operations; |
|
|
|
|
#endif |
|
|
|
|
sb->s_qcop = &linvfs_qops; |
|
|
|
|
sb->s_op = &linvfs_sops; |
|
|
|
|
sb->s_qcop = &xfs_quotactl_operations; |
|
|
|
|
sb->s_op = &xfs_super_operations; |
|
|
|
|
|
|
|
|
|
VFS_MOUNT(vfsp, args, NULL, error); |
|
|
|
|
if (error) { |
|
|
|
@ -880,7 +880,7 @@ linvfs_fill_super( |
|
|
|
|
error = EINVAL; |
|
|
|
|
goto fail_vnrele; |
|
|
|
|
} |
|
|
|
|
if ((error = linvfs_start_syncd(vfsp))) |
|
|
|
|
if ((error = xfs_fs_start_syncd(vfsp))) |
|
|
|
|
goto fail_vnrele; |
|
|
|
|
vn_trace_exit(rootvp, __FUNCTION__, (inst_t *)__return_address); |
|
|
|
|
|
|
|
|
@ -905,41 +905,41 @@ fail_vfsop: |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC struct super_block * |
|
|
|
|
linvfs_get_sb( |
|
|
|
|
xfs_fs_get_sb( |
|
|
|
|
struct file_system_type *fs_type, |
|
|
|
|
int flags, |
|
|
|
|
const char *dev_name, |
|
|
|
|
void *data) |
|
|
|
|
{ |
|
|
|
|
return get_sb_bdev(fs_type, flags, dev_name, data, linvfs_fill_super); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC struct super_operations linvfs_sops = { |
|
|
|
|
.alloc_inode = linvfs_alloc_inode, |
|
|
|
|
.destroy_inode = linvfs_destroy_inode, |
|
|
|
|
.write_inode = linvfs_write_inode, |
|
|
|
|
.clear_inode = linvfs_clear_inode, |
|
|
|
|
.put_super = linvfs_put_super, |
|
|
|
|
.write_super = linvfs_write_super, |
|
|
|
|
.sync_fs = linvfs_sync_super, |
|
|
|
|
.write_super_lockfs = linvfs_freeze_fs, |
|
|
|
|
.statfs = linvfs_statfs, |
|
|
|
|
.remount_fs = linvfs_remount, |
|
|
|
|
.show_options = linvfs_show_options, |
|
|
|
|
return get_sb_bdev(fs_type, flags, dev_name, data, xfs_fs_fill_super); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
STATIC struct super_operations xfs_super_operations = { |
|
|
|
|
.alloc_inode = xfs_fs_alloc_inode, |
|
|
|
|
.destroy_inode = xfs_fs_destroy_inode, |
|
|
|
|
.write_inode = xfs_fs_write_inode, |
|
|
|
|
.clear_inode = xfs_fs_clear_inode, |
|
|
|
|
.put_super = xfs_fs_put_super, |
|
|
|
|
.write_super = xfs_fs_write_super, |
|
|
|
|
.sync_fs = xfs_fs_sync_super, |
|
|
|
|
.write_super_lockfs = xfs_fs_lockfs, |
|
|
|
|
.statfs = xfs_fs_statfs, |
|
|
|
|
.remount_fs = xfs_fs_remount, |
|
|
|
|
.show_options = xfs_fs_show_options, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
STATIC struct quotactl_ops linvfs_qops = { |
|
|
|
|
.quota_sync = linvfs_quotasync, |
|
|
|
|
.get_xstate = linvfs_getxstate, |
|
|
|
|
.set_xstate = linvfs_setxstate, |
|
|
|
|
.get_xquota = linvfs_getxquota, |
|
|
|
|
.set_xquota = linvfs_setxquota, |
|
|
|
|
STATIC struct quotactl_ops xfs_quotactl_operations = { |
|
|
|
|
.quota_sync = xfs_fs_quotasync, |
|
|
|
|
.get_xstate = xfs_fs_getxstate, |
|
|
|
|
.set_xstate = xfs_fs_setxstate, |
|
|
|
|
.get_xquota = xfs_fs_getxquota, |
|
|
|
|
.set_xquota = xfs_fs_setxquota, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
STATIC struct file_system_type xfs_fs_type = { |
|
|
|
|
.owner = THIS_MODULE, |
|
|
|
|
.name = "xfs", |
|
|
|
|
.get_sb = linvfs_get_sb, |
|
|
|
|
.get_sb = xfs_fs_get_sb, |
|
|
|
|
.kill_sb = kill_block_super, |
|
|
|
|
.fs_flags = FS_REQUIRES_DEV, |
|
|
|
|
}; |
|
|
|
|