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 -