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