From: yury Date: Mon, 22 Nov 2004 12:23:12 +0000 (+0000) Subject: - mdc_op_data should not be allocated on stack. X-Git-Tag: 1.3.4~292 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=7d6e21d13707837e24b7fc6a38209d1a911b4316;p=fs%2Flustre-release.git - mdc_op_data should not be allocated on stack. --- diff --git a/lustre/smfs/mds_kml.c b/lustre/smfs/mds_kml.c index 7b9de0f..2c46eed 100644 --- a/lustre/smfs/mds_kml.c +++ b/lustre/smfs/mds_kml.c @@ -44,11 +44,15 @@ static int mds_rec_link_pack(char *buffer, struct dentry *dentry, struct dentry *tgt = (struct dentry *)data2; struct mds_kml_pack_info *mkpi; struct lustre_msg *msg = NULL; - struct mdc_op_data op_data; + struct mdc_op_data *op_data; void *tmp = NULL; int rc = 0; - mdc_prepare_mdc_data(&op_data, src->d_inode, dir, + OBD_ALLOC(op_data, sizeof(*op_data)); + if (op_data == NULL) + return -ENOMEM; + + mdc_prepare_mdc_data(op_data, src->d_inode, dir, tgt->d_name.name, tgt->d_name.len, 0); PACK_KML_REC_INIT(buffer, MDS_REINT); @@ -56,13 +60,14 @@ static int mds_rec_link_pack(char *buffer, struct dentry *dentry, mkpi->mpi_bufcount = 2; mkpi->mpi_size[0] = sizeof(struct mds_rec_link); - mkpi->mpi_size[1] = op_data.namelen + 1; + mkpi->mpi_size[1] = op_data->namelen + 1; /* the mds reint log format is: opcode + mkpi + request */ msg = (struct lustre_msg *)(buffer + sizeof(*mkpi)); lustre_init_msg(msg, mkpi->mpi_bufcount, mkpi->mpi_size, NULL); - tmp = mdc_link_pack(msg, 0, &op_data); + tmp = mdc_link_pack(msg, 0, op_data); + OBD_FREE(op_data, sizeof(*op_data)); mkpi->mpi_total_size = tmp - (void *)msg; rc = mkpi->mpi_total_size + sizeof(*mkpi) + sizeof(int); return rc; @@ -76,12 +81,15 @@ static int mds_rec_setattr_pack(char *buffer, struct dentry *dentry, struct mds_rec_setattr *rec = NULL; struct mds_kml_pack_info *mkpi; struct lustre_msg *msg = NULL; - struct mdc_op_data op_data; + struct mdc_op_data *op_data; int rc = 0, ealen = 0; char *ea = NULL; void *tmp = NULL; - mdc_prepare_mdc_data(&op_data, dir, NULL, NULL, 0, 0); + OBD_ALLOC(op_data, sizeof(*op_data)); + if (op_data == NULL) + return -ENOMEM; + mdc_prepare_mdc_data(op_data, dir, NULL, NULL, 0, 0); PACK_KML_REC_INIT(buffer, MDS_REINT); mkpi = (struct mds_kml_pack_info*)buffer; @@ -98,7 +106,8 @@ static int mds_rec_setattr_pack(char *buffer, struct dentry *dentry, msg = (struct lustre_msg *)(buffer + sizeof(*mkpi)); lustre_init_msg(msg, mkpi->mpi_bufcount, mkpi->mpi_size, NULL); - tmp = mdc_setattr_pack(msg, 0, &op_data, iattr, ea, ealen, NULL, 0); + tmp = mdc_setattr_pack(msg, 0, op_data, iattr, ea, ealen, NULL, 0); + OBD_FREE(op_data, sizeof(*op_data)); /* FIXME-WANGDI: there are maybe some better ways to set the time * attr. */ @@ -122,12 +131,15 @@ static int mds_rec_create_pack(char *buffer, struct dentry *dentry, { struct mds_kml_pack_info *mkpi; struct lustre_msg *msg = NULL; - struct mdc_op_data op_data; + struct mdc_op_data *op_data; struct mds_rec_create *rec; int rc = 0, tgt_len = 0; void *tmp = NULL; - mdc_prepare_mdc_data(&op_data, dir, dentry->d_inode, + OBD_ALLOC(op_data, sizeof(*op_data)); + if (op_data == NULL) + return -ENOMEM; + mdc_prepare_mdc_data(op_data, dir, dentry->d_inode, dentry->d_name.name, dentry->d_name.len, 0); PACK_KML_REC_INIT(buffer, MDS_REINT); @@ -135,7 +147,7 @@ static int mds_rec_create_pack(char *buffer, struct dentry *dentry, mkpi->mpi_bufcount = 2; mkpi->mpi_size[0] = sizeof(struct mds_rec_create); - mkpi->mpi_size[1] = op_data.namelen + 1; + mkpi->mpi_size[1] = op_data->namelen + 1; if (data1 && data2) { mkpi->mpi_size[2] = *(int *)data2; @@ -149,15 +161,16 @@ static int mds_rec_create_pack(char *buffer, struct dentry *dentry, msg = (struct lustre_msg *)(buffer + sizeof(*mkpi)); lustre_init_msg(msg, mkpi->mpi_bufcount, mkpi->mpi_size, NULL); - tmp = mdc_create_pack(msg, 0, &op_data, dentry->d_inode->i_mode, + tmp = mdc_create_pack(msg, 0, op_data, dentry->d_inode->i_mode, dentry->d_inode->i_mode, data1, tgt_len); rec = (struct mds_rec_create *)lustre_msg_buf(msg, 0, 0); - rec->cr_replayid = op_data.id2; + rec->cr_replayid = op_data->id2; rec->cr_flags |= REC_REINT_CREATE; mkpi->mpi_total_size = tmp - (void *)msg; rc = mkpi->mpi_total_size + sizeof(*mkpi) + sizeof(int); - + OBD_FREE(op_data, sizeof(*op_data)); + return rc; } @@ -167,12 +180,15 @@ static int mds_rec_unlink_pack(char *buffer, struct dentry *dentry, { struct lustre_msg *msg = NULL; struct mds_kml_pack_info *mkpi; - struct mdc_op_data op_data; + struct mdc_op_data *op_data; int mode = *(int*)data1; void *tmp = NULL; int rc = 0; - mdc_prepare_mdc_data(&op_data, dir, NULL, + OBD_ALLOC(op_data, sizeof(*op_data)); + if (op_data == NULL) + return -ENOMEM; + mdc_prepare_mdc_data(op_data, dir, NULL, dentry->d_name.name, dentry->d_name.len, mode); @@ -181,15 +197,16 @@ static int mds_rec_unlink_pack(char *buffer, struct dentry *dentry, mkpi->mpi_bufcount = 2; mkpi->mpi_size[0] = sizeof(struct mds_rec_unlink); - mkpi->mpi_size[1] = op_data.namelen + 1; + mkpi->mpi_size[1] = op_data->namelen + 1; msg = (struct lustre_msg *)(buffer + sizeof(*mkpi)); lustre_init_msg(msg, mkpi->mpi_bufcount, mkpi->mpi_size, NULL); - tmp = mdc_unlink_pack(msg, 0, &op_data); + tmp = mdc_unlink_pack(msg, 0, op_data); mkpi->mpi_total_size = tmp - (void*)msg; rc = mkpi->mpi_total_size + sizeof(*mkpi) + sizeof(int); + OBD_FREE(op_data, sizeof(*op_data)); return rc; } @@ -201,12 +218,15 @@ static int mds_rec_rename_pack(char *buffer, struct dentry *dentry, struct inode *new_dir = (struct inode *)data1; struct mds_kml_pack_info *mkpi; struct lustre_msg *msg = NULL; - struct mdc_op_data op_data; + struct mdc_op_data *op_data; struct mds_rec_rename *rec; void *tmp = NULL; int rc = 0; - mdc_prepare_mdc_data(&op_data, dir, new_dir, NULL, 0, 0); + OBD_ALLOC(op_data, sizeof(*op_data)); + if (op_data == NULL) + return -ENOMEM; + mdc_prepare_mdc_data(op_data, dir, new_dir, NULL, 0, 0); PACK_KML_REC_INIT(buffer, MDS_REINT); mkpi = (struct mds_kml_pack_info*)buffer; @@ -222,12 +242,13 @@ static int mds_rec_rename_pack(char *buffer, struct dentry *dentry, msg = (struct lustre_msg *)(buffer + sizeof(*mkpi)); lustre_init_msg(msg, mkpi->mpi_bufcount, mkpi->mpi_size, NULL); - tmp = mdc_rename_pack(msg, 0, &op_data, dentry->d_name.name, + tmp = mdc_rename_pack(msg, 0, op_data, dentry->d_name.name, dentry->d_name.len, new_dentry->d_name.name, new_dentry->d_name.len); mkpi->mpi_total_size = tmp - (void*)msg; rc = mkpi->mpi_total_size + sizeof(*mkpi) + sizeof(int); + OBD_FREE(op_data, sizeof(*op_data)); return rc; } diff --git a/lustre/smfs/smfs_cow.c b/lustre/smfs/smfs_cow.c index 425eb0e..9fe77a6 100644 --- a/lustre/smfs/smfs_cow.c +++ b/lustre/smfs/smfs_cow.c @@ -642,12 +642,11 @@ static struct dentry *smfs_find_snap_root(struct super_block *sb, { struct dentry *dentry = NULL; struct nameidata nd; - int error; ENTRY; #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) if (path_init(path_name, LOOKUP_FOLLOW, &nd)) { - error = path_walk(path_name, &nd); + int error = path_walk(path_name, &nd); if (error) { path_release(&nd); RETURN(NULL); @@ -658,12 +657,12 @@ static struct dentry *smfs_find_snap_root(struct super_block *sb, #else if (path_lookup(path_name, LOOKUP_FOLLOW, &nd)) RETURN(NULL); - #endif dentry = dget(nd.dentry); path_release(&nd); RETURN(dentry); } + static int snap_add_item(struct smfs_super_info *smb, struct snap_info *snap_info, char *name) diff --git a/lustre/smfs/smfs_lib.c b/lustre/smfs/smfs_lib.c index f47f869..55662ae 100644 --- a/lustre/smfs/smfs_lib.c +++ b/lustre/smfs/smfs_lib.c @@ -319,9 +319,10 @@ int smfs_fill_super(struct super_block *sb, void *data, int silent) init_option(data); cache_data = smfs_options(data, &devstr, &typestr, opts, &smb->smsi_flags); - if (*cache_data) + if (*cache_data) { CWARN("smfs_fill_super(): options parsing stoped at " "option %s\n", cache_data); + } if (!typestr || !devstr) { CERROR("mount options name and dev are mandatory\n"); diff --git a/lustre/smfs/super.c b/lustre/smfs/super.c index 0f03e0f..f2ab435 100644 --- a/lustre/smfs/super.c +++ b/lustre/smfs/super.c @@ -64,20 +64,22 @@ static struct file_system_type smfs_type = { .read_super = smfs_read_super, }; #else -struct super_block *smfs_get_sb(struct file_system_type *fs_type, int flags, - const char *dev_name, void *data) +struct super_block *smfs_get_super(struct file_system_type *fs_type, + int flags, const char *dev_name, + void *data) { return get_sb_nodev(fs_type, flags, data, smfs_fill_super); } + void smfs_kill_super(struct super_block *sb) { - smfs_cleanup_hooks(S2SMI(sb)); kill_anon_super(sb); } + static struct file_system_type smfs_type = { .owner = THIS_MODULE, .name = "smfs", - .get_sb = smfs_get_sb, + .get_sb = smfs_get_super, .kill_sb = smfs_kill_super, }; #endif @@ -91,6 +93,7 @@ static int cleanup_smfs(void) CERROR("unregister_filesystem() failed, rc = %d\n", err); return 0; } + static int init_smfs(void) { int err; @@ -100,6 +103,7 @@ static int init_smfs(void) CERROR("register_filesystem() failed, rc = %d\n", err); return err; } + static int __init smfs_init(void) { int err;