From: adilger Date: Fri, 5 Jul 2002 10:17:21 +0000 (+0000) Subject: Add statfs fixups to head. X-Git-Tag: 0.5.0~29 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=397349900e890008fd323435bacc5b49affdedb0;p=fs%2Flustre-release.git Add statfs fixups to head. --- diff --git a/lustre/include/linux/lustre_mds.h b/lustre/include/linux/lustre_mds.h index 90f3e50..8e8a59f 100644 --- a/lustre/include/linux/lustre_mds.h +++ b/lustre/include/linux/lustre_mds.h @@ -198,6 +198,7 @@ struct mds_fs_operations { void (* cl_delete_inode)(struct inode *inode); int (* fs_journal_data)(struct file *file); int (* fs_set_last_rcvd)(struct mds_obd *mds, void *handle); + int (* fs_statfs)(struct super_block *sb, struct statfs *sfs); }; extern int mds_register_fs_type(struct mds_fs_operations *op, const char *name); @@ -263,6 +264,14 @@ static inline ssize_t mds_fs_journal_data(struct mds_obd *mds, return mds->mds_fsops->fs_journal_data(file); } +static inline int mds_fs_statfs(struct mds_obd *mds, struct statfs *sfs) +{ + if (mds->mds_fsops->fs_statfs) + return mds->mds_fsops->fs_statfs(mds->mds_sb, sfs); + + return vfs_statfs(mds->mds_sb, sfs); +} + #define MDS_FSOP_UNLINK 1 #define MDS_FSOP_RMDIR 2 #define MDS_FSOP_RENAME 3 diff --git a/lustre/llite/super.c b/lustre/llite/super.c index f1d007e..a2825fa 100644 --- a/lustre/llite/super.c +++ b/lustre/llite/super.c @@ -347,7 +347,6 @@ int ll_setattr(struct dentry *de, struct iattr *attr) static int ll_statfs(struct super_block *sb, struct statfs *sfs) { struct ptlrpc_request *request = NULL; - struct statfs obd_sfs; struct ll_sb_info *sbi = ll_s2sbi(sb); int rc; ENTRY; @@ -355,25 +354,32 @@ static int ll_statfs(struct super_block *sb, struct statfs *sfs) memset(sfs, 0, sizeof(*sfs)); rc = mdc_statfs(&sbi->ll_mdc_conn, sfs, &request); ptlrpc_req_finished(request); - if (rc) { + if (rc) CERROR("obd_statfs fails: rc = %d\n", rc); - GOTO(out, rc); - } - CDEBUG(D_SUPER, "statfs returns blocks %ld/%ld objects %ld/%ld\n", - sfs->f_bavail, sfs->f_blocks, sfs->f_files,sfs->f_ffree); + else + CDEBUG(D_SUPER, "statfs shows blocks %ld/%ld objects %ld/%ld\n", + sfs->f_bavail, sfs->f_blocks, sfs->f_files,sfs->f_ffree); /* temporary until mds_statfs returns statfs info for all OSTs */ - rc = obd_statfs(&sbi->ll_osc_conn, &obd_sfs); - if (rc) { - CERROR("obd_statfs fails: rc = %d\n", rc); - GOTO(out, rc); - } - CDEBUG(D_SUPER, "obd_statfs returns blocks %ld/%ld\n", - obd_sfs.f_bavail, obd_sfs.f_blocks); + if (!rc) { + struct statfs obd_sfs; - sfs->f_bfree = obd_sfs.f_bfree; - sfs->f_bavail = obd_sfs.f_bavail; - sfs->f_blocks = obd_sfs.f_blocks; + rc = obd_statfs(&sbi->ll_osc_conn, &obd_sfs); + if (rc) { + CERROR("obd_statfs fails: rc = %d\n", rc); + GOTO(out, rc); + } + CDEBUG(D_SUPER, "obd_statfs returns blocks %ld/%ld, " + "objects %ld/%ld\n", + obd_sfs.f_bavail, obd_sfs.f_blocks, + obd_sfs.f_ffree, obd_sfs.f_files); + + sfs->f_bfree = obd_sfs.f_bfree; + sfs->f_bavail = obd_sfs.f_bavail; + sfs->f_blocks = obd_sfs.f_blocks; + if (obd_sfs.f_ffree < sfs->f_ffree) + sfs->f_ffree = obd_sfs.f_ffree; + } out: RETURN(rc); @@ -478,7 +484,7 @@ struct file_system_type lustre_lite_fs_type = { static int __init init_lustre_lite(void) { - printk(KERN_INFO "Lustre Lite 0.0.1, braam@clusterfs.com\n"); + printk(KERN_INFO "Lustre Lite 0.0.1, info@clusterfs.com\n"); ll_file_data_slab = kmem_cache_create("ll_file_data", sizeof(struct ll_file_data), 0, SLAB_HWCACHE_ALIGN, NULL, NULL); @@ -493,7 +499,7 @@ static void __exit exit_lustre_lite(void) kmem_cache_destroy(ll_file_data_slab); } -MODULE_AUTHOR("Peter J. Braam "); +MODULE_AUTHOR("Cluster File Systems, Inc. "); MODULE_DESCRIPTION("Lustre Lite Client File System v1.0"); MODULE_LICENSE("GPL"); diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c index 77cf635..00d6a39 100644 --- a/lustre/mdc/mdc_request.c +++ b/lustre/mdc/mdc_request.c @@ -159,10 +159,10 @@ static int mdc_lock_callback(struct lustre_handle *lockh, RETURN(0); } -int mdc_enqueue(struct lustre_handle *conn, int lock_type, struct lookup_intent *it, - int lock_mode, struct inode *dir, struct dentry *de, - struct lustre_handle *lockh, __u64 id, char *tgt, int tgtlen, - void *data, int datalen) +int mdc_enqueue(struct lustre_handle *conn, int lock_type, + struct lookup_intent *it, int lock_mode, struct inode *dir, + struct dentry *de, struct lustre_handle *lockh, __u64 id, + char *tgt, int tgtlen, void *data, int datalen) { struct ptlrpc_request *req; struct obd_device *obddev = class_conn2obd(conn); diff --git a/lustre/mds/mds_extN.c b/lustre/mds/mds_extN.c index 55ce734..fc8da8b 100644 --- a/lustre/mds/mds_extN.c +++ b/lustre/mds/mds_extN.c @@ -279,6 +279,23 @@ static int mds_extN_journal_data(struct file *filp) return 0; } +/* + * We need to hack the return value for the free inode counts because + * the current EA code requires one filesystem block per inode with EAs, + * so it is possible to run out of blocks before we run out of inodes. + * + * This can be removed when the extN EA code is fixed. + */ +static int mds_extN_statfs(struct super_block *sb, struct statfs *sfs) +{ + int rc = vfs_statfs(sb, sfs); + + if (!rc && sfs->f_bfree < sfs->f_ffree) + sfs->f_ffree = sfs->f_bfree; + + return rc; +} + static struct mds_fs_operations mds_extN_fs_ops = { fs_start: mds_extN_start, fs_commit: mds_extN_commit, @@ -290,6 +307,7 @@ static struct mds_fs_operations mds_extN_fs_ops = { cl_delete_inode: clear_inode, fs_journal_data: mds_extN_journal_data, fs_set_last_rcvd: mds_extN_set_last_rcvd, + fs_statfs: mds_extN_statfs, }; static int __init mds_extN_init(void) @@ -327,7 +345,7 @@ static void __exit mds_extN_exit(void) //rc = extN_xattr_unregister(); } -MODULE_AUTHOR("Cluster File Systems, Inc. "); +MODULE_AUTHOR("Cluster File Systems, Inc. "); MODULE_DESCRIPTION("Lustre MDS extN Filesystem Helper v0.1"); MODULE_LICENSE("GPL"); diff --git a/lustre/obdfs/dir.c b/lustre/obdfs/dir.c index f0a542d..80ccd2e 100644 --- a/lustre/obdfs/dir.c +++ b/lustre/obdfs/dir.c @@ -387,7 +387,7 @@ ino_t obdfs_inode_by_name(struct inode * dir, struct dentry *dentry, int *type) ino_t res = 0; struct ext2_dir_entry_2 * de; struct page *page; - + de = ext2_find_entry (dir, dentry, &page); if (de) { res = le32_to_cpu(de->inode); diff --git a/lustre/ost/ost_handler.c b/lustre/ost/ost_handler.c index 4f72272..207691f 100644 --- a/lustre/ost/ost_handler.c +++ b/lustre/ost/ost_handler.c @@ -443,11 +443,6 @@ static int ost_handle(struct ptlrpc_request *req) OBD_FAIL_RETURN(OBD_FAIL_OST_DISCONNECT_NET, 0); rc = target_handle_disconnect(req); break; - case OST_GET_INFO: - CDEBUG(D_INODE, "get_info\n"); - OBD_FAIL_RETURN(OBD_FAIL_OST_GET_INFO_NET, 0); - rc = ost_get_info(req); - break; case OST_CREATE: CDEBUG(D_INODE, "create\n"); OBD_FAIL_RETURN(OBD_FAIL_OST_CREATE_NET, 0); @@ -611,7 +606,7 @@ static void __exit ost_exit(void) class_unregister_type(LUSTRE_OST_NAME); } -MODULE_AUTHOR("Peter J. Braam "); +MODULE_AUTHOR("Cluster File Systems, Inc. "); MODULE_DESCRIPTION("Lustre Object Storage Target (OST) v0.01"); MODULE_LICENSE("GPL");