Re: top stack (l)users for 2.5.67
Peter Braam <[email protected]> Tue, 15 Apr 2003 09:38:49 -0600
| Newsgroups | gmane.linux.kernel,gmane.comp.file-systems.intermezzo.devel |
|---|---|
| Message-ID | <[email protected]> |
Yes please update the email/contact to [email protected]. Chen Yang is maintaining the code and he can give nods of approval when required. - Peter - On Mon, Apr 14, 2003 at 09:40:24PM +0200, Jörn Engel wrote: > On Mon, 14 April 2003 13:18:52 -0600, Andreas Dilger wrote: > > > > I've CC'd the InterMezzo mailing list (which is where the maintainers of > > this code live). Could someone please post a copy of the original patch > > to the [email protected] mailing list? > > Attached. (Yes, this is a duplicate for lkml, but it's not that big) > > > Actually, my recollection is that there was previously a patch posted > > for fixing this large stack usage the last time this came up. > > Yup, I already tried this once before and got some feedback. Just none > from [email protected], who is the contact according to MAINTAINERS. > Should I update that file to [email protected]? > > Jörn > > -- > With a PC, I always felt limited by the software available. On Unix, > I am limited only by my knowledge. > -- Peter J. Schoenster > > --- linux-2.5.64/fs/intermezzo/journal.c Mon Feb 24 20:05:05 2003 > +++ linux-2.5.64-i2o/fs/intermezzo/journal.c Fri Mar 14 17:37:18 2003 > @@ -1239,12 +1239,15 @@ > return izo_rcvd_write(fset, &rec); > } > > +/* FIXME: should the below go into some header file? */ > +#define PRESTO_COPY_KML_TAIL_BUFSIZE 4096 > struct file * presto_copy_kml_tail(struct presto_file_set *fset, > unsigned long int start) > { > struct file *f; > int len; > loff_t read_off, write_off, bytes; > + char *buf; > > ENTRY; > > @@ -1255,15 +1258,18 @@ > return f; > } > > + buf = kmalloc(PRESTO_COPY_KML_TAIL_BUFSIZE, GFP_KERNEL); > + if (!buf) > + return ERR_PTR(-ENOMEM); > + > write_off = 0; > read_off = start; > bytes = fset->fset_kml.fd_offset - start; > while (bytes > 0) { > - char buf[4096]; > int toread; > > - if (bytes > sizeof(buf)) > - toread = sizeof(buf); > + if (bytes > PRESTO_COPY_KML_TAIL_BUFSIZE) > + toread = PRESTO_COPY_KML_TAIL_BUFSIZE; > else > toread = bytes; > > @@ -1274,6 +1280,7 @@ > > if (presto_fwrite(f, buf, len, &write_off) != len) { > filp_close(f, NULL); > + kfree(buf); > EXIT; > return ERR_PTR(-EIO); > } > @@ -1281,6 +1288,7 @@ > bytes -= len; > } > > + kfree(buf); > EXIT; > return f; > } > @@ -1584,12 +1592,14 @@ > return error; > } > > +/* FIXME: should the below go into some header file? */ > +#define PRESTO_GET_FILEID_BUFSIZE 4096 > int presto_get_fileid(int minor, struct presto_file_set *fset, > struct dentry *dentry) > { > int opcode = KML_OPCODE_GET_FILEID; > struct rec_info rec; > - char *buffer, *path, *logrecord, record[4096]; /*include path*/ > + char *buffer, *path, *logrecord, *record; /*include path*/ > struct dentry *root; > __u32 uid, gid, pathlen; > int error, size; > @@ -1597,6 +1607,10 @@ > > ENTRY; > > + record = kmalloc(PRESTO_GET_FILEID_BUFSIZE, GFP_KERNEL); > + if (!record) > + return -ENOMEM; > + > root = fset->fset_dentry; > > uid = cpu_to_le32(dentry->d_inode->i_uid); > @@ -1610,7 +1624,7 @@ > sizeof(struct kml_suffix); > > CDEBUG(D_FILE, "kml size: %d\n", size); > - if ( size > sizeof(record) ) > + if ( size > PRESTO_GET_FILEID_BUFSIZE ) > CERROR("InterMezzo: BUFFER OVERFLOW in %s!\n", __FUNCTION__); > > memset(&rec, 0, sizeof(rec)); > @@ -1633,6 +1647,7 @@ > fset->fset_name); > > BUFF_FREE(buffer); > + kfree(record); > EXIT; > return error; > } > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > intermezzo-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/intermezzo-devel - Peter -