--- linux/fs/minix/namei.c 2018/04/24 18:07:16 1.1.1.3 +++ linux/fs/minix/namei.c 2018/04/24 18:12:32 1.1.1.6 @@ -1,19 +1,20 @@ /* * linux/fs/minix/namei.c * - * (C) 1991 Linus Torvalds + * Copyright (C) 1991, 1992 Linus Torvalds */ #include #include #include +#include +#include +#include +#include + #include -#include -#include -#include #include -#include /* * comment out this line if you want names > MINIX_NAME_LEN chars to be @@ -77,7 +78,7 @@ static struct buffer_head * minix_find_e entries = dir->i_size / (sizeof (struct minix_dir_entry)); if (!(block = dir->i_data[0])) return NULL; - if (!(bh = bread(dir->i_dev,block))) + if (!(bh = bread(dir->i_dev, block, BLOCK_SIZE))) return NULL; i = 0; de = (struct minix_dir_entry *) bh->b_data; @@ -86,7 +87,7 @@ static struct buffer_head * minix_find_e brelse(bh); bh = NULL; if (!(block = minix_bmap(dir,i/MINIX_DIR_ENTRIES_PER_BLOCK)) || - !(bh = bread(dir->i_dev,block))) { + !(bh = bread(dir->i_dev, block, BLOCK_SIZE))) { i += MINIX_DIR_ENTRIES_PER_BLOCK; continue; } @@ -162,7 +163,7 @@ static struct buffer_head * minix_add_en return NULL; if (!(block = dir->i_data[0])) return NULL; - if (!(bh = bread(dir->i_dev,block))) + if (!(bh = bread(dir->i_dev, block, BLOCK_SIZE))) return NULL; i = 0; de = (struct minix_dir_entry *) bh->b_data; @@ -173,7 +174,7 @@ static struct buffer_head * minix_add_en block = minix_create_block(dir,i/MINIX_DIR_ENTRIES_PER_BLOCK); if (!block) return NULL; - if (!(bh = bread(dir->i_dev,block))) { + if (!(bh = bread(dir->i_dev, block, BLOCK_SIZE))) { i += MINIX_DIR_ENTRIES_PER_BLOCK; continue; } @@ -266,6 +267,13 @@ int minix_mknod(struct inode * dir, cons inode->i_op = &minix_chrdev_inode_operations; else if (S_ISBLK(inode->i_mode)) inode->i_op = &minix_blkdev_inode_operations; + else if (S_ISFIFO(inode->i_mode)) { + inode->i_op = &minix_fifo_inode_operations; + inode->i_size = 0; + inode->i_pipe = 1; + PIPE_HEAD(*inode) = PIPE_TAIL(*inode) = 0; + PIPE_READERS(*inode) = PIPE_WRITERS(*inode) = 0; + } if (S_ISBLK(mode) || S_ISCHR(mode)) inode->i_rdev = rdev; inode->i_mtime = inode->i_atime = CURRENT_TIME; @@ -314,7 +322,7 @@ int minix_mkdir(struct inode * dir, cons return -ENOSPC; } inode->i_dirt = 1; - if (!(dir_block = bread(inode->i_dev,inode->i_data[0]))) { + if (!(dir_block = bread(inode->i_dev, inode->i_data[0], BLOCK_SIZE))) { iput(dir); inode->i_nlink--; inode->i_dirt = 1; @@ -361,7 +369,7 @@ static int empty_dir(struct inode * inod len = inode->i_size / sizeof (struct minix_dir_entry); if (len<2 || !inode->i_data[0] || - !(bh=bread(inode->i_dev,inode->i_data[0]))) { + !(bh=bread(inode->i_dev, inode->i_data[0], BLOCK_SIZE))) { printk("warning - bad directory on dev %04x\n",inode->i_dev); return 0; } @@ -381,7 +389,7 @@ static int empty_dir(struct inode * inod nr += MINIX_DIR_ENTRIES_PER_BLOCK; continue; } - if (!(bh=bread(inode->i_dev,block))) + if (!(bh=bread(inode->i_dev, block, BLOCK_SIZE))) return 0; de = (struct minix_dir_entry *) bh->b_data; } @@ -508,7 +516,7 @@ int minix_symlink(struct inode * dir, co return -ENOSPC; } inode->i_dirt = 1; - if (!(name_block = bread(inode->i_dev,inode->i_data[0]))) { + if (!(name_block = bread(inode->i_dev, inode->i_data[0], BLOCK_SIZE))) { iput(dir); inode->i_nlink--; inode->i_dirt = 1; @@ -669,6 +677,10 @@ start_up: retval = 0; goto end_rename; } + if (S_ISDIR(new_inode->i_mode)) { + retval = -EEXIST; + goto end_rename; + } if (S_ISDIR(old_inode->i_mode)) { retval = -EEXIST; if (new_bh) @@ -682,7 +694,7 @@ start_up: retval = -EIO; if (!old_inode->i_data[0]) goto end_rename; - if (!(dir_bh = bread(old_inode->i_dev, old_inode->i_data[0]))) + if (!(dir_bh = bread(old_inode->i_dev, old_inode->i_data[0], BLOCK_SIZE))) goto end_rename; if (PARENT_INO(dir_bh->b_data) != old_dir->i_ino) goto end_rename; @@ -740,7 +752,7 @@ end_rename: int minix_rename(struct inode * old_dir, const char * old_name, int old_len, struct inode * new_dir, const char * new_name, int new_len) { - static struct task_struct * wait = NULL; + static struct wait_queue * wait = NULL; static int lock = 0; int result;