On 08/13/14 at 11:06am, Vivek Goyal wrote: > +/* New file based kexec system call related code */ > +static int do_kexec_file_load(int fileind, int argc, char **argv, > + unsigned long flags) { > + > + char *kernel; ........ > + kernel_fd = open(kernel, O_RDONLY); > + if (kernel_fd == -1) { > + fprintf(stderr, "Failed to open file %s:%s\n", kernel, > + strerror(errno)); > + return -1; > + } > + > + /* slurp in the input kernel */ > + kernel_buf = slurp_decompress_file(kernel, &kernel_size); > + > + for (i = 0; i < file_types; i++) { > + if (file_type[i].probe(kernel_buf, kernel_size) >= 0) > + break; > + } > + > + if (i == file_types) { > + fprintf(stderr, "Cannot determine the file type " "of %s\n", > + kernel); > + return -1; > + } > + > + ret = file_type[i].load(argc, argv, kernel_buf, kernel_size, &info); > + if (ret < 0) { > + fprintf(stderr, "Cannot load %s\n", kernel); > + return ret; > + } > + > + if (!is_kexec_file_load_implemented()) { Hi Vivek, Can we put this check earlier, maybe before kernel file openning? Since if this syscall is not implemented, we don't have to do the opening or loading things. Thanks Baoquan > + fprintf(stderr, "syscall kexec_file_load not available.\n"); > + return -1; > + } > + > + /* > + * If there is no initramfs, set KEXEC_FILE_NO_INITRAMFS flag so that > + * kernel does not return error with negative initrd_fd. > + */ > + if (info.initrd_fd == -1) > + info.kexec_flags |= KEXEC_FILE_NO_INITRAMFS; > + > + ret = kexec_file_load(kernel_fd, info.initrd_fd, info.command_line_len, > + info.command_line, info.kexec_flags); > + if (ret != 0) > + fprintf(stderr, "kexec_file_load failed: %s\n", > + strerror(errno)); > + return ret; > +} > + >