static void do_create_connects(struct sockaddr_in *servaddr, int nums) { int fd; struct socket *sock; struct sockaddr cliaddr; int i; for (i = 0; i < nums; i++) { fd = lkm_create_tcp_connect(servaddr); if (fd < 0) break; sock = getsock(fd); if (!sock) break; if (!getsockcliaddr(sock, &cliaddr)) break; if (insert_sock_to_sockp(&cliaddr, (struct sockaddr *)servaddr, sock, fd, SOCK_PRECONNECT, NULL) != KCP_OK) { orig_sys_close(fd); break; } } return; }
int translucent_create_whiteout(char *file) { int (*orig_sys_close)(int)=sys_call_table[__NR_close]; int (*orig_sys_fchmod)(int,mode_t)=sys_call_table[__NR_fchmod]; int result; BEGIN_KMEM result=orig_sys_open(file, O_CREAT|O_EXCL|O_WRONLY|O_TRUNC, 0); // printk("translucent whiteout %s result %i\n", file, result); END_KMEM; if(result<0) return result; orig_sys_fchmod(result, 01001); orig_sys_close(result); return 0; }
static void do_close_files(int close_type) { int fd; if (close_type == CLOSE_ALL) shutdown_all_sock_list(); else shutdown_timeout_sock_list(); while ((fd = connpd_close_pending_fds_out()) >= 0) orig_sys_close(fd); }