static int __tux3_mknod(struct inode *dir, struct dentry *dentry, struct tux_iattr *iattr, dev_t rdev) { struct inode *inode; int err, is_dir = S_ISDIR(iattr->mode); if (!huge_valid_dev(rdev)) return -EINVAL; if (is_dir && dir->i_nlink >= TUX_LINK_MAX) return -EMLINK; change_begin(tux_sb(dir->i_sb)); inode = tux_new_inode(dir, iattr, rdev); err = PTR_ERR(inode); if (!IS_ERR(inode)) { err = tux_add_dirent(dir, dentry, inode); if (!err) { unlock_new_inode(inode); if (is_dir) inode_inc_link_count(dir); } } change_end(tux_sb(dir->i_sb)); return err; }
static int tux3_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t rdev) { struct inode *inode; int err; if (!huge_valid_dev(rdev)) return -EINVAL; change_begin(tux_sb(dir->i_sb)); inode = tux_create_inode(dir, mode, rdev); err = PTR_ERR(inode); if (!IS_ERR(inode)) { err = tux_add_dirent(dir, dentry, inode); if (!err) { if ((inode->i_mode & S_IFMT) == S_IFDIR) inode_inc_link_count(dir); goto out; } clear_nlink(inode); mark_inode_dirty(inode); iput(inode); } out: change_end(tux_sb(dir->i_sb)); return err; }
static int __tux3_mknod(struct inode *dir, struct dentry *dentry, struct tux_iattr *iattr, dev_t rdev) { if(DEBUG_MODE_K==1) { printf("\t\t\t\t%25s[K] %25s %4d #in\n",__FILE__,__func__,__LINE__); } struct inode *inode; int err, is_dir = S_ISDIR(iattr->mode); if (!huge_valid_dev(rdev)) return -EINVAL; if (is_dir && dir->i_nlink >= TUX_LINK_MAX) return -EMLINK; change_begin(tux_sb(dir->i_sb)); inode = tux_create_inode(dir, iattr, rdev); err = PTR_ERR(inode); if (!IS_ERR(inode)) { err = tux_add_dirent(dir, dentry, inode); if (!err) { unlock_new_inode(inode); if (is_dir) inode_inc_link_count(dir); goto out; } clear_nlink(inode); tux3_mark_inode_dirty(inode); unlock_new_inode(inode); iput(inode); } out: change_end(tux_sb(dir->i_sb)); return err; }