1 /* 2 * JFFS2 -- Journalling Flash File System, Version 2. 3 * 4 * Copyright © 2001-2007 Red Hat, Inc. 5 * Copyright © 2004-2010 David Woodhouse <dwmw2@infradead.org> 6 * 7 * Created by David Woodhouse <dwmw2@infradead.org> 8 * 9 * For licensing information, see the file 'LICENCE' in this directory. 10 * 11 */ 12 13 #include <linux/kernel.h> 14 #include <linux/slab.h> 15 #include <linux/fs.h> 16 #include <linux/crc32.h> 17 #include <linux/jffs2.h> 18 #include "jffs2_fs_i.h" 19 #include "jffs2_fs_sb.h" 20 #include <linux/time.h> 21 #include "nodelist.h" 22 23 static int jffs2_readdir (struct file *, void *, filldir_t); 24 25 static int jffs2_create (struct inode *,struct dentry *,int, 26 struct nameidata *); 27 static struct dentry *jffs2_lookup (struct inode *,struct dentry *, 28 struct nameidata *); 29 static int jffs2_link (struct dentry *,struct inode *,struct dentry *); 30 static int jffs2_unlink (struct inode *,struct dentry *); 31 static int jffs2_symlink (struct inode *,struct dentry *,const char *); 32 static int jffs2_mkdir (struct inode *,struct dentry *,int); 33 static int jffs2_rmdir (struct inode *,struct dentry *); 34 static int jffs2_mknod (struct inode *,struct dentry *,int,dev_t); 35 static int jffs2_rename (struct inode *, struct dentry *, 36 struct inode *, struct dentry *); 37 38 const struct file_operations jffs2_dir_operations = 39 { 40 .read = generic_read_dir, 41 .readdir = jffs2_readdir, 42 .unlocked_ioctl=jffs2_ioctl, 43 .fsync = jffs2_fsync, 44 .llseek = generic_file_llseek, 45 }; 46 47 48 const struct inode_operations jffs2_dir_inode_operations = 49 { 50 .create = jffs2_create, 51 .lookup = jffs2_lookup, 52 .link = jffs2_link, 53 .unlink = jffs2_unlink, 54 .symlink = jffs2_symlink, 55 .mkdir = jffs2_mkdir, 56 .rmdir = jffs2_rmdir, 57 .mknod = jffs2_mknod, 58 .rename = jffs2_rename, 59 .get_acl = jffs2_get_acl, 60 .setattr = jffs2_setattr, 61 .setxattr = jffs2_setxattr, 62 .getxattr = jffs2_getxattr, 63 .listxattr = jffs2_listxattr, 64 .removexattr = jffs2_removexattr 65 }; 66 67 /***********************************************************************/ 68 69 70 /* We keep the dirent list sorted in increasing order of name hash, 71 and we use the same hash function as the dentries. Makes this 72 nice and simple 73 */ 74 static struct dentry *jffs2_lookup(struct inode *dir_i, struct dentry *target, 75 struct nameidata *nd) 76 { 77 struct jffs2_inode_info *dir_f; 78 struct jffs2_full_dirent *fd = NULL, *fd_list; 79 uint32_t ino = 0; 80 struct inode *inode = NULL; 81 82 D1(printk(KERN_DEBUG "jffs2_lookup()\n")); 83 84 if (target->d_name.len > JFFS2_MAX_NAME_LEN) 85 return ERR_PTR(-ENAMETOOLONG); 86 87 dir_f = JFFS2_INODE_INFO(dir_i); 88 89 mutex_lock(&dir_f->sem); 90 91 /* NB: The 2.2 backport will need to explicitly check for '.' and '..' here */ 92 for (fd_list = dir_f->dents; fd_list && fd_list->nhash <= target->d_name.hash; fd_list = fd_list->next) { 93 if (fd_list->nhash == target->d_name.hash && 94 (!fd || fd_list->version > fd->version) && 95 strlen(fd_list->name) == target->d_name.len && 96 !strncmp(fd_list->name, target->d_name.name, target->d_name.len)) { 97 fd = fd_list; 98 } 99 } 100 if (fd) 101 ino = fd->ino; 102 mutex_unlock(&dir_f->sem); 103 if (ino) { 104 inode = jffs2_iget(dir_i->i_sb, ino); 105 if (IS_ERR(inode)) 106 printk(KERN_WARNING "iget() failed for ino #%u\n", ino); 107 } 108 109 return d_splice_alias(inode, target); 110 } 111 112 /***********************************************************************/ 113 114 115 static int jffs2_readdir(struct file *filp, void *dirent, filldir_t filldir) 116 { 117 struct jffs2_inode_info *f; 118 struct inode *inode = filp->f_path.dentry->d_inode; 119 struct jffs2_full_dirent *fd; 120 unsigned long offset, curofs; 121 122 D1(printk(KERN_DEBUG "jffs2_readdir() for dir_i #%lu\n", filp->f_path.dentry->d_inode->i_ino)); 123 124 f = JFFS2_INODE_INFO(inode); 125 126 offset = filp->f_pos; 127 128 if (offset == 0) { 129 D1(printk(KERN_DEBUG "Dirent 0: \".\", ino #%lu\n", inode->i_ino)); 130 if (filldir(dirent, ".", 1, 0, inode->i_ino, DT_DIR) < 0) 131 goto out; 132 offset++; 133 } 134 if (offset == 1) { 135 unsigned long pino = parent_ino(filp->f_path.dentry); 136 D1(printk(KERN_DEBUG "Dirent 1: \"..\", ino #%lu\n", pino)); 137 if (filldir(dirent, "..", 2, 1, pino, DT_DIR) < 0) 138 goto out; 139 offset++; 140 } 141 142 curofs=1; 143 mutex_lock(&f->sem); 144 for (fd = f->dents; fd; fd = fd->next) { 145 146 curofs++; 147 /* First loop: curofs = 2; offset = 2 */ 148 if (curofs < offset) { 149 D2(printk(KERN_DEBUG "Skipping dirent: \"%s\", ino #%u, type %d, because curofs %ld < offset %ld\n", 150 fd->name, fd->ino, fd->type, curofs, offset)); 151 continue; 152 } 153 if (!fd->ino) { 154 D2(printk(KERN_DEBUG "Skipping deletion dirent \"%s\"\n", fd->name)); 155 offset++; 156 continue; 157 } 158 D2(printk(KERN_DEBUG "Dirent %ld: \"%s\", ino #%u, type %d\n", offset, fd->name, fd->ino, fd->type)); 159 if (filldir(dirent, fd->name, strlen(fd->name), offset, fd->ino, fd->type) < 0) 160 break; 161 offset++; 162 } 163 mutex_unlock(&f->sem); 164 out: 165 filp->f_pos = offset; 166 return 0; 167 } 168 169 /***********************************************************************/ 170 171 172 static int jffs2_create(struct inode *dir_i, struct dentry *dentry, int mode, 173 struct nameidata *nd) 174 { 175 struct jffs2_raw_inode *ri; 176 struct jffs2_inode_info *f, *dir_f; 177 struct jffs2_sb_info *c; 178 struct inode *inode; 179 int ret; 180 181 ri = jffs2_alloc_raw_inode(); 182 if (!ri) 183 return -ENOMEM; 184 185 c = JFFS2_SB_INFO(dir_i->i_sb); 186 187 D1(printk(KERN_DEBUG "jffs2_create()\n")); 188 189 inode = jffs2_new_inode(dir_i, mode, ri); 190 191 if (IS_ERR(inode)) { 192 D1(printk(KERN_DEBUG "jffs2_new_inode() failed\n")); 193 jffs2_free_raw_inode(ri); 194 return PTR_ERR(inode); 195 } 196 197 inode->i_op = &jffs2_file_inode_operations; 198 inode->i_fop = &jffs2_file_operations; 199 inode->i_mapping->a_ops = &jffs2_file_address_operations; 200 inode->i_mapping->nrpages = 0; 201 202 f = JFFS2_INODE_INFO(inode); 203 dir_f = JFFS2_INODE_INFO(dir_i); 204 205 /* jffs2_do_create() will want to lock it, _after_ reserving 206 space and taking c-alloc_sem. If we keep it locked here, 207 lockdep gets unhappy (although it's a false positive; 208 nothing else will be looking at this inode yet so there's 209 no chance of AB-BA deadlock involving its f->sem). */ 210 mutex_unlock(&f->sem); 211 212 ret = jffs2_do_create(c, dir_f, f, ri, &dentry->d_name); 213 if (ret) 214 goto fail; 215 216 dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(ri->ctime)); 217 218 jffs2_free_raw_inode(ri); 219 220 D1(printk(KERN_DEBUG "jffs2_create: Created ino #%lu with mode %o, nlink %d(%d). nrpages %ld\n", 221 inode->i_ino, inode->i_mode, inode->i_nlink, 222 f->inocache->pino_nlink, inode->i_mapping->nrpages)); 223 224 d_instantiate(dentry, inode); 225 unlock_new_inode(inode); 226 return 0; 227 228 fail: 229 iget_failed(inode); 230 jffs2_free_raw_inode(ri); 231 return ret; 232 } 233 234 /***********************************************************************/ 235 236 237 static int jffs2_unlink(struct inode *dir_i, struct dentry *dentry) 238 { 239 struct jffs2_sb_info *c = JFFS2_SB_INFO(dir_i->i_sb); 240 struct jffs2_inode_info *dir_f = JFFS2_INODE_INFO(dir_i); 241 struct jffs2_inode_info *dead_f = JFFS2_INODE_INFO(dentry->d_inode); 242 int ret; 243 uint32_t now = get_seconds(); 244 245 ret = jffs2_do_unlink(c, dir_f, dentry->d_name.name, 246 dentry->d_name.len, dead_f, now); 247 if (dead_f->inocache) 248 dentry->d_inode->i_nlink = dead_f->inocache->pino_nlink; 249 if (!ret) 250 dir_i->i_mtime = dir_i->i_ctime = ITIME(now); 251 return ret; 252 } 253 /***********************************************************************/ 254 255 256 static int jffs2_link (struct dentry *old_dentry, struct inode *dir_i, struct dentry *dentry) 257 { 258 struct jffs2_sb_info *c = JFFS2_SB_INFO(old_dentry->d_inode->i_sb); 259 struct jffs2_inode_info *f = JFFS2_INODE_INFO(old_dentry->d_inode); 260 struct jffs2_inode_info *dir_f = JFFS2_INODE_INFO(dir_i); 261 int ret; 262 uint8_t type; 263 uint32_t now; 264 265 /* Don't let people make hard links to bad inodes. */ 266 if (!f->inocache) 267 return -EIO; 268 269 if (S_ISDIR(old_dentry->d_inode->i_mode)) 270 return -EPERM; 271 272 /* XXX: This is ugly */ 273 type = (old_dentry->d_inode->i_mode & S_IFMT) >> 12; 274 if (!type) type = DT_REG; 275 276 now = get_seconds(); 277 ret = jffs2_do_link(c, dir_f, f->inocache->ino, type, dentry->d_name.name, dentry->d_name.len, now); 278 279 if (!ret) { 280 mutex_lock(&f->sem); 281 old_dentry->d_inode->i_nlink = ++f->inocache->pino_nlink; 282 mutex_unlock(&f->sem); 283 d_instantiate(dentry, old_dentry->d_inode); 284 dir_i->i_mtime = dir_i->i_ctime = ITIME(now); 285 ihold(old_dentry->d_inode); 286 } 287 return ret; 288 } 289 290 /***********************************************************************/ 291 292 static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char *target) 293 { 294 struct jffs2_inode_info *f, *dir_f; 295 struct jffs2_sb_info *c; 296 struct inode *inode; 297 struct jffs2_raw_inode *ri; 298 struct jffs2_raw_dirent *rd; 299 struct jffs2_full_dnode *fn; 300 struct jffs2_full_dirent *fd; 301 int namelen; 302 uint32_t alloclen; 303 int ret, targetlen = strlen(target); 304 305 /* FIXME: If you care. We'd need to use frags for the target 306 if it grows much more than this */ 307 if (targetlen > 254) 308 return -ENAMETOOLONG; 309 310 ri = jffs2_alloc_raw_inode(); 311 312 if (!ri) 313 return -ENOMEM; 314 315 c = JFFS2_SB_INFO(dir_i->i_sb); 316 317 /* Try to reserve enough space for both node and dirent. 318 * Just the node will do for now, though 319 */ 320 namelen = dentry->d_name.len; 321 ret = jffs2_reserve_space(c, sizeof(*ri) + targetlen, &alloclen, 322 ALLOC_NORMAL, JFFS2_SUMMARY_INODE_SIZE); 323 324 if (ret) { 325 jffs2_free_raw_inode(ri); 326 return ret; 327 } 328 329 inode = jffs2_new_inode(dir_i, S_IFLNK | S_IRWXUGO, ri); 330 331 if (IS_ERR(inode)) { 332 jffs2_free_raw_inode(ri); 333 jffs2_complete_reservation(c); 334 return PTR_ERR(inode); 335 } 336 337 inode->i_op = &jffs2_symlink_inode_operations; 338 339 f = JFFS2_INODE_INFO(inode); 340 341 inode->i_size = targetlen; 342 ri->isize = ri->dsize = ri->csize = cpu_to_je32(inode->i_size); 343 ri->totlen = cpu_to_je32(sizeof(*ri) + inode->i_size); 344 ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4)); 345 346 ri->compr = JFFS2_COMPR_NONE; 347 ri->data_crc = cpu_to_je32(crc32(0, target, targetlen)); 348 ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8)); 349 350 fn = jffs2_write_dnode(c, f, ri, target, targetlen, ALLOC_NORMAL); 351 352 jffs2_free_raw_inode(ri); 353 354 if (IS_ERR(fn)) { 355 /* Eeek. Wave bye bye */ 356 mutex_unlock(&f->sem); 357 jffs2_complete_reservation(c); 358 ret = PTR_ERR(fn); 359 goto fail; 360 } 361 362 /* We use f->target field to store the target path. */ 363 f->target = kmemdup(target, targetlen + 1, GFP_KERNEL); 364 if (!f->target) { 365 printk(KERN_WARNING "Can't allocate %d bytes of memory\n", targetlen + 1); 366 mutex_unlock(&f->sem); 367 jffs2_complete_reservation(c); 368 ret = -ENOMEM; 369 goto fail; 370 } 371 372 D1(printk(KERN_DEBUG "jffs2_symlink: symlink's target '%s' cached\n", (char *)f->target)); 373 374 /* No data here. Only a metadata node, which will be 375 obsoleted by the first data write 376 */ 377 f->metadata = fn; 378 mutex_unlock(&f->sem); 379 380 jffs2_complete_reservation(c); 381 382 ret = jffs2_init_security(inode, dir_i, &dentry->d_name); 383 if (ret) 384 goto fail; 385 386 ret = jffs2_init_acl_post(inode); 387 if (ret) 388 goto fail; 389 390 ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen, 391 ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen)); 392 if (ret) 393 goto fail; 394 395 rd = jffs2_alloc_raw_dirent(); 396 if (!rd) { 397 /* Argh. Now we treat it like a normal delete */ 398 jffs2_complete_reservation(c); 399 ret = -ENOMEM; 400 goto fail; 401 } 402 403 dir_f = JFFS2_INODE_INFO(dir_i); 404 mutex_lock(&dir_f->sem); 405 406 rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); 407 rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT); 408 rd->totlen = cpu_to_je32(sizeof(*rd) + namelen); 409 rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4)); 410 411 rd->pino = cpu_to_je32(dir_i->i_ino); 412 rd->version = cpu_to_je32(++dir_f->highest_version); 413 rd->ino = cpu_to_je32(inode->i_ino); 414 rd->mctime = cpu_to_je32(get_seconds()); 415 rd->nsize = namelen; 416 rd->type = DT_LNK; 417 rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8)); 418 rd->name_crc = cpu_to_je32(crc32(0, dentry->d_name.name, namelen)); 419 420 fd = jffs2_write_dirent(c, dir_f, rd, dentry->d_name.name, namelen, ALLOC_NORMAL); 421 422 if (IS_ERR(fd)) { 423 /* dirent failed to write. Delete the inode normally 424 as if it were the final unlink() */ 425 jffs2_complete_reservation(c); 426 jffs2_free_raw_dirent(rd); 427 mutex_unlock(&dir_f->sem); 428 ret = PTR_ERR(fd); 429 goto fail; 430 } 431 432 dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime)); 433 434 jffs2_free_raw_dirent(rd); 435 436 /* Link the fd into the inode's list, obsoleting an old 437 one if necessary. */ 438 jffs2_add_fd_to_list(c, fd, &dir_f->dents); 439 440 mutex_unlock(&dir_f->sem); 441 jffs2_complete_reservation(c); 442 443 d_instantiate(dentry, inode); 444 unlock_new_inode(inode); 445 return 0; 446 447 fail: 448 iget_failed(inode); 449 return ret; 450 } 451 452 453 static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode) 454 { 455 struct jffs2_inode_info *f, *dir_f; 456 struct jffs2_sb_info *c; 457 struct inode *inode; 458 struct jffs2_raw_inode *ri; 459 struct jffs2_raw_dirent *rd; 460 struct jffs2_full_dnode *fn; 461 struct jffs2_full_dirent *fd; 462 int namelen; 463 uint32_t alloclen; 464 int ret; 465 466 mode |= S_IFDIR; 467 468 ri = jffs2_alloc_raw_inode(); 469 if (!ri) 470 return -ENOMEM; 471 472 c = JFFS2_SB_INFO(dir_i->i_sb); 473 474 /* Try to reserve enough space for both node and dirent. 475 * Just the node will do for now, though 476 */ 477 namelen = dentry->d_name.len; 478 ret = jffs2_reserve_space(c, sizeof(*ri), &alloclen, ALLOC_NORMAL, 479 JFFS2_SUMMARY_INODE_SIZE); 480 481 if (ret) { 482 jffs2_free_raw_inode(ri); 483 return ret; 484 } 485 486 inode = jffs2_new_inode(dir_i, mode, ri); 487 488 if (IS_ERR(inode)) { 489 jffs2_free_raw_inode(ri); 490 jffs2_complete_reservation(c); 491 return PTR_ERR(inode); 492 } 493 494 inode->i_op = &jffs2_dir_inode_operations; 495 inode->i_fop = &jffs2_dir_operations; 496 497 f = JFFS2_INODE_INFO(inode); 498 499 /* Directories get nlink 2 at start */ 500 inode->i_nlink = 2; 501 /* but ic->pino_nlink is the parent ino# */ 502 f->inocache->pino_nlink = dir_i->i_ino; 503 504 ri->data_crc = cpu_to_je32(0); 505 ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8)); 506 507 fn = jffs2_write_dnode(c, f, ri, NULL, 0, ALLOC_NORMAL); 508 509 jffs2_free_raw_inode(ri); 510 511 if (IS_ERR(fn)) { 512 /* Eeek. Wave bye bye */ 513 mutex_unlock(&f->sem); 514 jffs2_complete_reservation(c); 515 ret = PTR_ERR(fn); 516 goto fail; 517 } 518 /* No data here. Only a metadata node, which will be 519 obsoleted by the first data write 520 */ 521 f->metadata = fn; 522 mutex_unlock(&f->sem); 523 524 jffs2_complete_reservation(c); 525 526 ret = jffs2_init_security(inode, dir_i, &dentry->d_name); 527 if (ret) 528 goto fail; 529 530 ret = jffs2_init_acl_post(inode); 531 if (ret) 532 goto fail; 533 534 ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen, 535 ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen)); 536 if (ret) 537 goto fail; 538 539 rd = jffs2_alloc_raw_dirent(); 540 if (!rd) { 541 /* Argh. Now we treat it like a normal delete */ 542 jffs2_complete_reservation(c); 543 ret = -ENOMEM; 544 goto fail; 545 } 546 547 dir_f = JFFS2_INODE_INFO(dir_i); 548 mutex_lock(&dir_f->sem); 549 550 rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); 551 rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT); 552 rd->totlen = cpu_to_je32(sizeof(*rd) + namelen); 553 rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4)); 554 555 rd->pino = cpu_to_je32(dir_i->i_ino); 556 rd->version = cpu_to_je32(++dir_f->highest_version); 557 rd->ino = cpu_to_je32(inode->i_ino); 558 rd->mctime = cpu_to_je32(get_seconds()); 559 rd->nsize = namelen; 560 rd->type = DT_DIR; 561 rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8)); 562 rd->name_crc = cpu_to_je32(crc32(0, dentry->d_name.name, namelen)); 563 564 fd = jffs2_write_dirent(c, dir_f, rd, dentry->d_name.name, namelen, ALLOC_NORMAL); 565 566 if (IS_ERR(fd)) { 567 /* dirent failed to write. Delete the inode normally 568 as if it were the final unlink() */ 569 jffs2_complete_reservation(c); 570 jffs2_free_raw_dirent(rd); 571 mutex_unlock(&dir_f->sem); 572 ret = PTR_ERR(fd); 573 goto fail; 574 } 575 576 dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime)); 577 inc_nlink(dir_i); 578 579 jffs2_free_raw_dirent(rd); 580 581 /* Link the fd into the inode's list, obsoleting an old 582 one if necessary. */ 583 jffs2_add_fd_to_list(c, fd, &dir_f->dents); 584 585 mutex_unlock(&dir_f->sem); 586 jffs2_complete_reservation(c); 587 588 d_instantiate(dentry, inode); 589 unlock_new_inode(inode); 590 return 0; 591 592 fail: 593 iget_failed(inode); 594 return ret; 595 } 596 597 static int jffs2_rmdir (struct inode *dir_i, struct dentry *dentry) 598 { 599 struct jffs2_sb_info *c = JFFS2_SB_INFO(dir_i->i_sb); 600 struct jffs2_inode_info *dir_f = JFFS2_INODE_INFO(dir_i); 601 struct jffs2_inode_info *f = JFFS2_INODE_INFO(dentry->d_inode); 602 struct jffs2_full_dirent *fd; 603 int ret; 604 uint32_t now = get_seconds(); 605 606 for (fd = f->dents ; fd; fd = fd->next) { 607 if (fd->ino) 608 return -ENOTEMPTY; 609 } 610 611 ret = jffs2_do_unlink(c, dir_f, dentry->d_name.name, 612 dentry->d_name.len, f, now); 613 if (!ret) { 614 dir_i->i_mtime = dir_i->i_ctime = ITIME(now); 615 clear_nlink(dentry->d_inode); 616 drop_nlink(dir_i); 617 } 618 return ret; 619 } 620 621 static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, dev_t rdev) 622 { 623 struct jffs2_inode_info *f, *dir_f; 624 struct jffs2_sb_info *c; 625 struct inode *inode; 626 struct jffs2_raw_inode *ri; 627 struct jffs2_raw_dirent *rd; 628 struct jffs2_full_dnode *fn; 629 struct jffs2_full_dirent *fd; 630 int namelen; 631 union jffs2_device_node dev; 632 int devlen = 0; 633 uint32_t alloclen; 634 int ret; 635 636 if (!new_valid_dev(rdev)) 637 return -EINVAL; 638 639 ri = jffs2_alloc_raw_inode(); 640 if (!ri) 641 return -ENOMEM; 642 643 c = JFFS2_SB_INFO(dir_i->i_sb); 644 645 if (S_ISBLK(mode) || S_ISCHR(mode)) 646 devlen = jffs2_encode_dev(&dev, rdev); 647 648 /* Try to reserve enough space for both node and dirent. 649 * Just the node will do for now, though 650 */ 651 namelen = dentry->d_name.len; 652 ret = jffs2_reserve_space(c, sizeof(*ri) + devlen, &alloclen, 653 ALLOC_NORMAL, JFFS2_SUMMARY_INODE_SIZE); 654 655 if (ret) { 656 jffs2_free_raw_inode(ri); 657 return ret; 658 } 659 660 inode = jffs2_new_inode(dir_i, mode, ri); 661 662 if (IS_ERR(inode)) { 663 jffs2_free_raw_inode(ri); 664 jffs2_complete_reservation(c); 665 return PTR_ERR(inode); 666 } 667 inode->i_op = &jffs2_file_inode_operations; 668 init_special_inode(inode, inode->i_mode, rdev); 669 670 f = JFFS2_INODE_INFO(inode); 671 672 ri->dsize = ri->csize = cpu_to_je32(devlen); 673 ri->totlen = cpu_to_je32(sizeof(*ri) + devlen); 674 ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4)); 675 676 ri->compr = JFFS2_COMPR_NONE; 677 ri->data_crc = cpu_to_je32(crc32(0, &dev, devlen)); 678 ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8)); 679 680 fn = jffs2_write_dnode(c, f, ri, (char *)&dev, devlen, ALLOC_NORMAL); 681 682 jffs2_free_raw_inode(ri); 683 684 if (IS_ERR(fn)) { 685 /* Eeek. Wave bye bye */ 686 mutex_unlock(&f->sem); 687 jffs2_complete_reservation(c); 688 ret = PTR_ERR(fn); 689 goto fail; 690 } 691 /* No data here. Only a metadata node, which will be 692 obsoleted by the first data write 693 */ 694 f->metadata = fn; 695 mutex_unlock(&f->sem); 696 697 jffs2_complete_reservation(c); 698 699 ret = jffs2_init_security(inode, dir_i, &dentry->d_name); 700 if (ret) 701 goto fail; 702 703 ret = jffs2_init_acl_post(inode); 704 if (ret) 705 goto fail; 706 707 ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen, 708 ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen)); 709 if (ret) 710 goto fail; 711 712 rd = jffs2_alloc_raw_dirent(); 713 if (!rd) { 714 /* Argh. Now we treat it like a normal delete */ 715 jffs2_complete_reservation(c); 716 ret = -ENOMEM; 717 goto fail; 718 } 719 720 dir_f = JFFS2_INODE_INFO(dir_i); 721 mutex_lock(&dir_f->sem); 722 723 rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); 724 rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT); 725 rd->totlen = cpu_to_je32(sizeof(*rd) + namelen); 726 rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4)); 727 728 rd->pino = cpu_to_je32(dir_i->i_ino); 729 rd->version = cpu_to_je32(++dir_f->highest_version); 730 rd->ino = cpu_to_je32(inode->i_ino); 731 rd->mctime = cpu_to_je32(get_seconds()); 732 rd->nsize = namelen; 733 734 /* XXX: This is ugly. */ 735 rd->type = (mode & S_IFMT) >> 12; 736 737 rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8)); 738 rd->name_crc = cpu_to_je32(crc32(0, dentry->d_name.name, namelen)); 739 740 fd = jffs2_write_dirent(c, dir_f, rd, dentry->d_name.name, namelen, ALLOC_NORMAL); 741 742 if (IS_ERR(fd)) { 743 /* dirent failed to write. Delete the inode normally 744 as if it were the final unlink() */ 745 jffs2_complete_reservation(c); 746 jffs2_free_raw_dirent(rd); 747 mutex_unlock(&dir_f->sem); 748 ret = PTR_ERR(fd); 749 goto fail; 750 } 751 752 dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime)); 753 754 jffs2_free_raw_dirent(rd); 755 756 /* Link the fd into the inode's list, obsoleting an old 757 one if necessary. */ 758 jffs2_add_fd_to_list(c, fd, &dir_f->dents); 759 760 mutex_unlock(&dir_f->sem); 761 jffs2_complete_reservation(c); 762 763 d_instantiate(dentry, inode); 764 unlock_new_inode(inode); 765 return 0; 766 767 fail: 768 iget_failed(inode); 769 return ret; 770 } 771 772 static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry, 773 struct inode *new_dir_i, struct dentry *new_dentry) 774 { 775 int ret; 776 struct jffs2_sb_info *c = JFFS2_SB_INFO(old_dir_i->i_sb); 777 struct jffs2_inode_info *victim_f = NULL; 778 uint8_t type; 779 uint32_t now; 780 781 /* The VFS will check for us and prevent trying to rename a 782 * file over a directory and vice versa, but if it's a directory, 783 * the VFS can't check whether the victim is empty. The filesystem 784 * needs to do that for itself. 785 */ 786 if (new_dentry->d_inode) { 787 victim_f = JFFS2_INODE_INFO(new_dentry->d_inode); 788 if (S_ISDIR(new_dentry->d_inode->i_mode)) { 789 struct jffs2_full_dirent *fd; 790 791 mutex_lock(&victim_f->sem); 792 for (fd = victim_f->dents; fd; fd = fd->next) { 793 if (fd->ino) { 794 mutex_unlock(&victim_f->sem); 795 return -ENOTEMPTY; 796 } 797 } 798 mutex_unlock(&victim_f->sem); 799 } 800 } 801 802 /* XXX: We probably ought to alloc enough space for 803 both nodes at the same time. Writing the new link, 804 then getting -ENOSPC, is quite bad :) 805 */ 806 807 /* Make a hard link */ 808 809 /* XXX: This is ugly */ 810 type = (old_dentry->d_inode->i_mode & S_IFMT) >> 12; 811 if (!type) type = DT_REG; 812 813 now = get_seconds(); 814 ret = jffs2_do_link(c, JFFS2_INODE_INFO(new_dir_i), 815 old_dentry->d_inode->i_ino, type, 816 new_dentry->d_name.name, new_dentry->d_name.len, now); 817 818 if (ret) 819 return ret; 820 821 if (victim_f) { 822 /* There was a victim. Kill it off nicely */ 823 if (S_ISDIR(new_dentry->d_inode->i_mode)) 824 clear_nlink(new_dentry->d_inode); 825 else 826 drop_nlink(new_dentry->d_inode); 827 /* Don't oops if the victim was a dirent pointing to an 828 inode which didn't exist. */ 829 if (victim_f->inocache) { 830 mutex_lock(&victim_f->sem); 831 if (S_ISDIR(new_dentry->d_inode->i_mode)) 832 victim_f->inocache->pino_nlink = 0; 833 else 834 victim_f->inocache->pino_nlink--; 835 mutex_unlock(&victim_f->sem); 836 } 837 } 838 839 /* If it was a directory we moved, and there was no victim, 840 increase i_nlink on its new parent */ 841 if (S_ISDIR(old_dentry->d_inode->i_mode) && !victim_f) 842 inc_nlink(new_dir_i); 843 844 /* Unlink the original */ 845 ret = jffs2_do_unlink(c, JFFS2_INODE_INFO(old_dir_i), 846 old_dentry->d_name.name, old_dentry->d_name.len, NULL, now); 847 848 /* We don't touch inode->i_nlink */ 849 850 if (ret) { 851 /* Oh shit. We really ought to make a single node which can do both atomically */ 852 struct jffs2_inode_info *f = JFFS2_INODE_INFO(old_dentry->d_inode); 853 mutex_lock(&f->sem); 854 inc_nlink(old_dentry->d_inode); 855 if (f->inocache && !S_ISDIR(old_dentry->d_inode->i_mode)) 856 f->inocache->pino_nlink++; 857 mutex_unlock(&f->sem); 858 859 printk(KERN_NOTICE "jffs2_rename(): Link succeeded, unlink failed (err %d). You now have a hard link\n", ret); 860 /* Might as well let the VFS know */ 861 d_instantiate(new_dentry, old_dentry->d_inode); 862 ihold(old_dentry->d_inode); 863 new_dir_i->i_mtime = new_dir_i->i_ctime = ITIME(now); 864 return ret; 865 } 866 867 if (S_ISDIR(old_dentry->d_inode->i_mode)) 868 drop_nlink(old_dir_i); 869 870 new_dir_i->i_mtime = new_dir_i->i_ctime = old_dir_i->i_mtime = old_dir_i->i_ctime = ITIME(now); 871 872 return 0; 873 } 874 875