dir.c (40de9a7cebc4e0b23cd6863c84c2279f0ccadebb) dir.c (f6089ff87d309a8ddb7b0d4dd92a570f1b0f689b)
1/*
2 * linux/fs/hfsplus/dir.c
3 *
4 * Copyright (C) 2001
5 * Brad Boyer (flar@allandria.com)
6 * (C) 2003 Ardis Technologies <roman@ardistech.com>
7 *
8 * Handling of directories

--- 88 unchanged lines hidden (view full) ---

97 err = -EIO;
98 goto fail;
99 }
100 hfs_find_exit(&fd);
101 inode = hfsplus_iget(dir->i_sb, cnid);
102 if (IS_ERR(inode))
103 return ERR_CAST(inode);
104 if (S_ISREG(inode->i_mode))
1/*
2 * linux/fs/hfsplus/dir.c
3 *
4 * Copyright (C) 2001
5 * Brad Boyer (flar@allandria.com)
6 * (C) 2003 Ardis Technologies <roman@ardistech.com>
7 *
8 * Handling of directories

--- 88 unchanged lines hidden (view full) ---

97 err = -EIO;
98 goto fail;
99 }
100 hfs_find_exit(&fd);
101 inode = hfsplus_iget(dir->i_sb, cnid);
102 if (IS_ERR(inode))
103 return ERR_CAST(inode);
104 if (S_ISREG(inode->i_mode))
105 HFSPLUS_I(inode)->dev = linkid;
105 HFSPLUS_I(inode)->linkid = linkid;
106out:
107 d_add(dentry, inode);
108 return NULL;
109fail:
110 hfs_find_exit(&fd);
111 return ERR_PTR(err);
112}
113

--- 133 unchanged lines hidden (view full) ---

247 struct inode *src_dir = src_dentry->d_parent->d_inode;
248 struct qstr str;
249 char name[32];
250 u32 cnid, id;
251 int res;
252
253 if (HFSPLUS_IS_RSRC(inode))
254 return -EPERM;
106out:
107 d_add(dentry, inode);
108 return NULL;
109fail:
110 hfs_find_exit(&fd);
111 return ERR_PTR(err);
112}
113

--- 133 unchanged lines hidden (view full) ---

247 struct inode *src_dir = src_dentry->d_parent->d_inode;
248 struct qstr str;
249 char name[32];
250 u32 cnid, id;
251 int res;
252
253 if (HFSPLUS_IS_RSRC(inode))
254 return -EPERM;
255 if (!S_ISREG(inode->i_mode))
256 return -EPERM;
255
256 mutex_lock(&sbi->vh_mutex);
257 if (inode->i_ino == (u32)(unsigned long)src_dentry->d_fsdata) {
258 for (;;) {
259 get_random_bytes(&id, sizeof(cnid));
260 id &= 0x3fffffff;
261 str.name = name;
262 str.len = sprintf(name, "iNode%d", id);
263 res = hfsplus_rename_cat(inode->i_ino,
264 src_dir, &src_dentry->d_name,
265 sbi->hidden_dir, &str);
266 if (!res)
267 break;
268 if (res != -EEXIST)
269 goto out;
270 }
257
258 mutex_lock(&sbi->vh_mutex);
259 if (inode->i_ino == (u32)(unsigned long)src_dentry->d_fsdata) {
260 for (;;) {
261 get_random_bytes(&id, sizeof(cnid));
262 id &= 0x3fffffff;
263 str.name = name;
264 str.len = sprintf(name, "iNode%d", id);
265 res = hfsplus_rename_cat(inode->i_ino,
266 src_dir, &src_dentry->d_name,
267 sbi->hidden_dir, &str);
268 if (!res)
269 break;
270 if (res != -EEXIST)
271 goto out;
272 }
271 HFSPLUS_I(inode)->dev = id;
273 HFSPLUS_I(inode)->linkid = id;
272 cnid = sbi->next_cnid++;
273 src_dentry->d_fsdata = (void *)(unsigned long)cnid;
274 res = hfsplus_create_cat(cnid, src_dir, &src_dentry->d_name, inode);
275 if (res)
276 /* panic? */
277 goto out;
278 sbi->file_count++;
279 }

--- 210 unchanged lines hidden ---
274 cnid = sbi->next_cnid++;
275 src_dentry->d_fsdata = (void *)(unsigned long)cnid;
276 res = hfsplus_create_cat(cnid, src_dir, &src_dentry->d_name, inode);
277 if (res)
278 /* panic? */
279 goto out;
280 sbi->file_count++;
281 }

--- 210 unchanged lines hidden ---