On 10/28/15 at 10:57am, Michael Holzheu wrote:
> On Wed, 28 Oct 2015 14:46:23 +0800
> Dave Young <[email protected]> wrote:
> 
> > Hi, Michael
> > 
> > > @@ -552,11 +563,18 @@ char *slurp_file(const char *filename, o
> > >           if (err < 0)
> > >                   die("Can not seek to the begin of file %s: %s\n",
> > >                                   filename, strerror(errno));
> > > +         buf = slurp_fd(fd, filename, size, &nread, use_mmap);
> > >   } else {
> > >           size = stats.st_size;
> > > +         if (use_mmap) {
> > > +                 buf = mmap(NULL, size, PROT_READ | PROT_WRITE,
> > > +                            MAP_PRIVATE, fd, 0);
> > > +                 nread = stats.st_size;
> > > +         } else {
> > > +                 buf = slurp_fd(fd, filename, size, &nread, 0);
> > > +         }
> > >   }
> > 
> > Drop above changes and replace below lines with an extra use_mmap argument
> > should be enough?
> > 
> > -   buf = slurp_fd(fd, filename, size, &nread);
> > [snip]
> 
> Hmm, I don't think so.
> 
> In case of non-character devices I either mmap the file directly 
> (use_mmap=true)
> or use "slurp_fd()" (use_mmap=false). So I can't unconditionaly use 
> slurp_fd().

How about handle these in slurp_fd only? Directly return mmapped buf in case
use_mmap=1 there. I do not understand why use_mmap=1 but you still call read
syscall to read data into the mmapped buffer..

Thanks
Dave

_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to