5 * Daniel Pirkl <daniel.pirkl@email.cz>
6 * Charles University, Faculty of Mathematics and Physics
10 * linux/fs/ext2/namei.c
12 * Copyright (C) 1992, 1993, 1994, 1995
13 * Remy Card (card@masi.ibp.fr)
14 * Laboratoire MASI - Institut Blaise Pascal
15 * Universite Pierre et Marie Curie (Paris VI)
19 * linux/fs/minix/namei.c
21 * Copyright (C) 1991, 1992 Linus Torvalds
23 * Big-endian to little-endian byte-swapping/bitmaps by
24 * David S. Miller (davem@caip.rutgers.edu), 1995
27 #include <asm/uaccess.h>
29 #include <linux/errno.h>
31 #include <linux/ufs_fs.h>
32 #include <linux/fcntl.h>
33 #include <linux/sched.h>
34 #include <linux/stat.h>
35 #include <linux/string.h>
36 #include <linux/locks.h>
37 #include <linux/quotaops.h>
42 #undef UFS_NAMEI_DEBUG
44 #ifdef UFS_NAMEI_DEBUG
45 #define UFSD(x) printk("(%s, %d), %s: ", __FILE__, __LINE__, __FUNCTION__); printk x;
51 * define how far ahead to read directories while searching them.
53 #define NAMEI_RA_CHUNKS 2
54 #define NAMEI_RA_BLOCKS 4
55 #define NAMEI_RA_SIZE (NAMEI_RA_CHUNKS * NAMEI_RA_BLOCKS)
56 #define NAMEI_RA_INDEX(c,b) (((c) * NAMEI_RA_BLOCKS) + (b))
59 * NOTE! unlike strncmp, ufs_match returns 1 for success, 0 for failure.
61 * len <= UFS_MAXNAMLEN and de != NULL are guaranteed by caller.
63 static inline int ufs_match (int len
, const char * const name
,
64 struct ufs_dir_entry
* de
, unsigned flags
, unsigned swab
)
66 if (len
!= ufs_get_de_namlen(de
))
70 return !memcmp(name
, de
->d_name
, len
);
76 * finds an entry in the specified directory with the wanted name. It
77 * returns the cache buffer in which the entry was found, and the entry
78 * itself (as a parameter - res_dir). It does NOT read the inode of the
79 * entry - you'll have to do that yourself if you want to.
81 static struct buffer_head
* ufs_find_entry (struct inode
* dir
,
82 const char * const name
, int namelen
, struct ufs_dir_entry
** res_dir
)
84 struct super_block
* sb
;
85 struct buffer_head
* bh_use
[NAMEI_RA_SIZE
];
86 struct buffer_head
* bh_read
[NAMEI_RA_SIZE
];
88 int block
, toread
, i
, err
;
91 UFSD(("ENTER, dir_ino %lu, name %s, namlen %u\n", dir
->i_ino
, name
, namelen
))
98 flags
= sb
->u
.ufs_sb
.s_flags
;
99 swab
= sb
->u
.ufs_sb
.s_swab
;
101 if (namelen
> UFS_MAXNAMLEN
)
104 memset (bh_use
, 0, sizeof (bh_use
));
106 for (block
= 0; block
< NAMEI_RA_SIZE
; ++block
) {
107 struct buffer_head
* bh
;
109 if ((block
<< sb
->s_blocksize_bits
) >= dir
->i_size
)
111 bh
= ufs_getfrag (dir
, block
, 0, &err
);
113 if (bh
&& !buffer_uptodate(bh
))
114 bh_read
[toread
++] = bh
;
117 for (block
= 0, offset
= 0; offset
< dir
->i_size
; block
++) {
118 struct buffer_head
* bh
;
119 struct ufs_dir_entry
* de
;
122 if ((block
% NAMEI_RA_BLOCKS
) == 0 && toread
) {
123 ll_rw_block (READ
, toread
, bh_read
);
126 bh
= bh_use
[block
% NAMEI_RA_SIZE
];
128 ufs_error (sb
, "ufs_find_entry",
129 "directory #%lu contains a hole at offset %lu",
131 offset
+= sb
->s_blocksize
;
135 if (!buffer_uptodate(bh
)) {
137 * read error: all bets are off
142 de
= (struct ufs_dir_entry
*) bh
->b_data
;
143 dlimit
= bh
->b_data
+ sb
->s_blocksize
;
144 while ((char *) de
< dlimit
&& offset
< dir
->i_size
) {
145 /* this code is executed quadratically often */
146 /* do minimal checking by hand */
149 if ((char *) de
+ namelen
<= dlimit
&&
150 ufs_match (namelen
, name
, de
, flags
, swab
)) {
152 just to be sure, do a full check */
153 if (!ufs_check_dir_entry("ufs_find_entry",
154 dir
, de
, bh
, offset
))
156 for (i
= 0; i
< NAMEI_RA_SIZE
; ++i
) {
163 /* prevent looping on a bad block */
164 de_len
= SWAB16(de
->d_reclen
);
168 de
= (struct ufs_dir_entry
*) ((char *) de
+ de_len
);
172 if (((block
+ NAMEI_RA_SIZE
) << sb
->s_blocksize_bits
) >=
176 bh
= ufs_getfrag (dir
, block
+ NAMEI_RA_SIZE
, 0, &err
);
177 bh_use
[block
% NAMEI_RA_SIZE
] = bh
;
178 if (bh
&& !buffer_uptodate(bh
))
179 bh_read
[toread
++] = bh
;
183 for (i
= 0; i
< NAMEI_RA_SIZE
; ++i
) brelse (bh_use
[i
]);
188 int ufs_lookup(struct inode
* dir
, struct dentry
*dentry
)
190 struct super_block
* sb
;
191 struct inode
* inode
;
192 struct ufs_dir_entry
* de
;
193 struct buffer_head
* bh
;
199 swab
= sb
->u
.ufs_sb
.s_swab
;
201 if (dentry
->d_name
.len
> UFS_MAXNAMLEN
)
202 return -ENAMETOOLONG
;
204 bh
= ufs_find_entry (dir
, dentry
->d_name
.name
, dentry
->d_name
.len
, &de
);
207 unsigned long ino
= SWAB32(de
->d_ino
);
209 inode
= iget(sb
, ino
);
213 d_add(dentry
, inode
);
221 * adds a file entry to the specified directory, using the same
222 * semantics as ufs_find_entry(). It returns NULL if it failed.
224 * NOTE!! The inode part of 'de' is left at 0 - which means you
225 * may not sleep between calling this and putting something into
226 * the entry, as someone else might have used it while you slept.
228 static struct buffer_head
* ufs_add_entry (struct inode
* dir
,
229 const char * name
, int namelen
, struct ufs_dir_entry
** res_dir
,
232 struct super_block
* sb
;
233 struct ufs_sb_private_info
* uspi
;
234 unsigned long offset
;
236 unsigned short rec_len
;
237 struct buffer_head
* bh
;
238 struct ufs_dir_entry
* de
, * de1
;
239 unsigned flags
, swab
;
241 UFSD(("ENTER, name %s, namelen %u\n", name
, namelen
))
245 if (!dir
|| !dir
->i_nlink
)
249 flags
= sb
->u
.ufs_sb
.s_flags
;
250 swab
= sb
->u
.ufs_sb
.s_swab
;
251 uspi
= sb
->u
.ufs_sb
.s_uspi
;
253 if (namelen
> UFS_MAXNAMLEN
)
255 *err
= -ENAMETOOLONG
;
262 * Is this a busy deleted directory? Can't create new files if so
264 if (dir
->i_size
== 0)
269 bh
= ufs_bread (dir
, 0, 0, err
);
272 rec_len
= UFS_DIR_REC_LEN(namelen
);
274 de
= (struct ufs_dir_entry
*) bh
->b_data
;
277 if ((char *)de
>= UFS_SECTOR_SIZE
+ bh
->b_data
) {
278 fragoff
= offset
& ~uspi
->s_fmask
;
279 if (fragoff
!= 0 && fragoff
!= UFS_SECTOR_SIZE
)
280 ufs_error (sb
, "ufs_add_entry", "internal error"
281 " fragoff %u", fragoff
);
285 bh
= ufs_bread (dir
, offset
>> sb
->s_blocksize_bits
, 1, err
);
289 if (dir
->i_size
<= offset
) {
290 if (dir
->i_size
== 0) {
294 de
= (struct ufs_dir_entry
*) (bh
->b_data
+ fragoff
);
295 de
->d_ino
= SWAB32(0);
296 de
->d_reclen
= SWAB16(UFS_SECTOR_SIZE
);
297 ufs_set_de_namlen(de
,0);
298 dir
->i_size
= offset
+ UFS_SECTOR_SIZE
;
299 mark_inode_dirty(dir
);
301 de
= (struct ufs_dir_entry
*) bh
->b_data
;
304 if (!ufs_check_dir_entry ("ufs_add_entry", dir
, de
, bh
, offset
)) {
309 if (ufs_match (namelen
, name
, de
, flags
, swab
)) {
314 if ((SWAB32(de
->d_ino
) == 0 && SWAB16(de
->d_reclen
) >= rec_len
) ||
315 (SWAB16(de
->d_reclen
) >= UFS_DIR_REC_LEN(ufs_get_de_namlen(de
)) + rec_len
)) {
316 offset
+= SWAB16(de
->d_reclen
);
317 if (SWAB32(de
->d_ino
)) {
318 de1
= (struct ufs_dir_entry
*) ((char *) de
+
319 UFS_DIR_REC_LEN(ufs_get_de_namlen(de
)));
320 de1
->d_reclen
= SWAB16(SWAB16(de
->d_reclen
) -
321 UFS_DIR_REC_LEN(ufs_get_de_namlen(de
)));
322 de
->d_reclen
= SWAB16(UFS_DIR_REC_LEN(ufs_get_de_namlen(de
)));
325 de
->d_ino
= SWAB32(0);
326 ufs_set_de_namlen(de
, namelen
);
327 memcpy (de
->d_name
, name
, namelen
+ 1);
329 * XXX shouldn't update any times until successful
330 * completion of syscall, but too many callers depend
333 * XXX similarly, too many callers depend on
334 * ufs_new_inode() setting the times, but error
335 * recovery deletes the inode, so the worst that can
336 * happen is that the times are slightly out of date
337 * and/or different from the directory change time.
339 dir
->i_mtime
= dir
->i_ctime
= CURRENT_TIME
;
340 mark_inode_dirty(dir
);
341 dir
->i_version
= ++event
;
342 mark_buffer_dirty(bh
, 1);
349 offset
+= SWAB16(de
->d_reclen
);
350 de
= (struct ufs_dir_entry
*) ((char *) de
+ SWAB16(de
->d_reclen
));
353 UFSD(("EXIT (FAILED)\n"))
358 * ufs_delete_entry deletes a directory entry by merging it with the
361 static int ufs_delete_entry (struct inode
* inode
, struct ufs_dir_entry
* dir
,
362 struct buffer_head
* bh
)
365 struct super_block
* sb
;
366 struct ufs_dir_entry
* de
, * pde
;
368 unsigned flags
, swab
;
373 flags
= sb
->u
.ufs_sb
.s_flags
;
374 swab
= sb
->u
.ufs_sb
.s_swab
;
377 de
= (struct ufs_dir_entry
*) bh
->b_data
;
379 UFSD(("ino %u, reclen %u, namlen %u, name %s\n", SWAB32(de
->d_ino
),
380 SWAB16(de
->d_reclen
), ufs_get_de_namlen(de
), de
->d_name
))
382 while (i
< bh
->b_size
) {
383 if (!ufs_check_dir_entry ("ufs_delete_entry", inode
, de
, bh
, i
))
388 SWAB16(SWAB16(pde
->d_reclen
) +
389 SWAB16(dir
->d_reclen
));
390 dir
->d_ino
= SWAB32(0);
394 i
+= SWAB16(de
->d_reclen
);
395 if (i
== UFS_SECTOR_SIZE
) pde
= NULL
;
397 de
= (struct ufs_dir_entry
*)
398 ((char *) de
+ SWAB16(de
->d_reclen
));
399 if (i
== UFS_SECTOR_SIZE
&& SWAB16(de
->d_reclen
) == 0)
407 * By the time this is called, we already have created
408 * the directory cache entry for the new file, but it
409 * is so far negative - it has no inode.
411 * If the create succeeds, we fill in the inode information
412 * with d_instantiate().
414 int ufs_create (struct inode
* dir
, struct dentry
* dentry
, int mode
)
416 struct super_block
* sb
;
417 struct inode
* inode
;
418 struct buffer_head
* bh
;
419 struct ufs_dir_entry
* de
;
421 unsigned flags
, swab
;
424 swab
= sb
->u
.ufs_sb
.s_swab
;
425 flags
= sb
->u
.ufs_sb
.s_flags
;
427 * N.B. Several error exits in ufs_new_inode don't set err.
431 inode
= ufs_new_inode (dir
, mode
, &err
);
434 inode
->i_op
= &ufs_file_inode_operations
;
435 inode
->i_mode
= mode
;
436 mark_inode_dirty(inode
);
437 bh
= ufs_add_entry (dir
, dentry
->d_name
.name
, dentry
->d_name
.len
, &de
, &err
);
440 mark_inode_dirty(inode
);
444 de
->d_ino
= SWAB32(inode
->i_ino
);
445 ufs_set_de_type (de
, inode
->i_mode
);
446 dir
->i_version
= ++event
;
447 mark_buffer_dirty(bh
, 1);
449 ll_rw_block (WRITE
, 1, &bh
);
453 d_instantiate(dentry
, inode
);
460 int ufs_mknod (struct inode
* dir
, struct dentry
*dentry
, int mode
, int rdev
)
462 struct super_block
* sb
;
463 struct inode
* inode
;
464 struct buffer_head
* bh
;
465 struct ufs_dir_entry
* de
;
467 unsigned flags
, swab
;
470 flags
= sb
->u
.ufs_sb
.s_flags
;
471 swab
= sb
->u
.ufs_sb
.s_swab
;
474 if (dentry
->d_name
.len
> UFS_MAXNAMLEN
)
477 inode
= ufs_new_inode (dir
, mode
, &err
);
481 inode
->i_uid
= current
->fsuid
;
482 inode
->i_mode
= mode
;
484 if (S_ISREG(inode
->i_mode
))
485 inode
->i_op
= &ufs_file_inode_operations
;
486 else if (S_ISCHR(inode
->i_mode
))
487 inode
->i_op
= &chrdev_inode_operations
;
488 else if (S_ISBLK(inode
->i_mode
))
489 inode
->i_op
= &blkdev_inode_operations
;
490 else if (S_ISFIFO(inode
->i_mode
))
492 if (S_ISBLK(mode
) || S_ISCHR(mode
))
493 inode
->i_rdev
= to_kdev_t(rdev
);
494 mark_inode_dirty(inode
);
495 bh
= ufs_add_entry (dir
, dentry
->d_name
.name
, dentry
->d_name
.len
, &de
, &err
);
498 de
->d_ino
= SWAB32(inode
->i_ino
);
499 ufs_set_de_type (de
, inode
->i_mode
);
500 dir
->i_version
= ++event
;
501 mark_buffer_dirty(bh
, 1);
503 ll_rw_block (WRITE
, 1, &bh
);
506 d_instantiate(dentry
, inode
);
514 mark_inode_dirty(inode
);
519 int ufs_mkdir(struct inode
* dir
, struct dentry
* dentry
, int mode
)
521 struct super_block
* sb
;
522 struct inode
* inode
;
523 struct buffer_head
* bh
, * dir_block
;
524 struct ufs_dir_entry
* de
;
526 unsigned flags
, swab
;
529 flags
= sb
->u
.ufs_sb
.s_flags
;
530 swab
= sb
->u
.ufs_sb
.s_swab
;
533 if (dentry
->d_name
.len
> UFS_MAXNAMLEN
)
537 if (dir
->i_nlink
>= UFS_LINK_MAX
)
540 inode
= ufs_new_inode (dir
, S_IFDIR
, &err
);
544 inode
->i_op
= &ufs_dir_inode_operations
;
545 inode
->i_size
= UFS_SECTOR_SIZE
;
546 dir_block
= ufs_bread (inode
, 0, 1, &err
);
548 inode
->i_nlink
--; /* is this nlink == 0? */
549 mark_inode_dirty(inode
);
553 inode
->i_blocks
= sb
->s_blocksize
/ UFS_SECTOR_SIZE
;
554 de
= (struct ufs_dir_entry
*) dir_block
->b_data
;
555 de
->d_ino
= SWAB32(inode
->i_ino
);
556 ufs_set_de_type (de
, inode
->i_mode
);
557 ufs_set_de_namlen(de
,1);
558 de
->d_reclen
= SWAB16(UFS_DIR_REC_LEN(1));
559 strcpy (de
->d_name
, ".");
560 de
= (struct ufs_dir_entry
*) ((char *) de
+ SWAB16(de
->d_reclen
));
561 de
->d_ino
= SWAB32(dir
->i_ino
);
562 ufs_set_de_type (de
, dir
->i_mode
);
563 de
->d_reclen
= SWAB16(UFS_SECTOR_SIZE
- UFS_DIR_REC_LEN(1));
564 ufs_set_de_namlen(de
,2);
565 strcpy (de
->d_name
, "..");
567 mark_buffer_dirty(dir_block
, 1);
569 inode
->i_mode
= S_IFDIR
| (mode
& (S_IRWXUGO
|S_ISVTX
) & ~current
->fs
->umask
);
570 if (dir
->i_mode
& S_ISGID
)
571 inode
->i_mode
|= S_ISGID
;
572 mark_inode_dirty(inode
);
573 bh
= ufs_add_entry (dir
, dentry
->d_name
.name
, dentry
->d_name
.len
, &de
, &err
);
576 de
->d_ino
= SWAB32(inode
->i_ino
);
577 ufs_set_de_type (de
, inode
->i_mode
);
578 dir
->i_version
= ++event
;
579 mark_buffer_dirty(bh
, 1);
581 ll_rw_block (WRITE
, 1, &bh
);
585 mark_inode_dirty(dir
);
586 d_instantiate(dentry
, inode
);
594 mark_inode_dirty(inode
);
600 * routine to check that the specified directory is empty (for rmdir)
602 static int ufs_empty_dir (struct inode
* inode
)
604 struct super_block
* sb
;
605 unsigned long offset
;
606 struct buffer_head
* bh
;
607 struct ufs_dir_entry
* de
, * de1
;
612 swab
= sb
->u
.ufs_sb
.s_swab
;
614 if (inode
->i_size
< UFS_DIR_REC_LEN(1) + UFS_DIR_REC_LEN(2) ||
615 !(bh
= ufs_bread (inode
, 0, 0, &err
))) {
616 ufs_warning (inode
->i_sb
, "empty_dir",
617 "bad directory (dir #%lu) - no data block",
621 de
= (struct ufs_dir_entry
*) bh
->b_data
;
622 de1
= (struct ufs_dir_entry
*) ((char *) de
+ SWAB16(de
->d_reclen
));
623 if (SWAB32(de
->d_ino
) != inode
->i_ino
|| !SWAB32(de1
->d_ino
) ||
624 strcmp (".", de
->d_name
) || strcmp ("..", de1
->d_name
)) {
625 ufs_warning (inode
->i_sb
, "empty_dir",
626 "bad directory (dir #%lu) - no `.' or `..'",
630 offset
= SWAB16(de
->d_reclen
) + SWAB16(de1
->d_reclen
);
631 de
= (struct ufs_dir_entry
*) ((char *) de1
+ SWAB16(de1
->d_reclen
));
632 while (offset
< inode
->i_size
) {
633 if (!bh
|| (void *) de
>= (void *) (bh
->b_data
+ sb
->s_blocksize
)) {
635 bh
= ufs_bread (inode
, offset
>> sb
->s_blocksize_bits
, 1, &err
);
637 ufs_error (sb
, "empty_dir",
638 "directory #%lu contains a hole at offset %lu",
639 inode
->i_ino
, offset
);
640 offset
+= sb
->s_blocksize
;
643 de
= (struct ufs_dir_entry
*) bh
->b_data
;
645 if (!ufs_check_dir_entry ("empty_dir", inode
, de
, bh
, offset
)) {
649 if (SWAB32(de
->d_ino
)) {
653 offset
+= SWAB16(de
->d_reclen
);
654 de
= (struct ufs_dir_entry
*) ((char *) de
+ SWAB16(de
->d_reclen
));
660 int ufs_rmdir (struct inode
* dir
, struct dentry
*dentry
)
662 struct super_block
*sb
;
664 struct inode
* inode
;
665 struct buffer_head
* bh
;
666 struct ufs_dir_entry
* de
;
670 swab
= sb
->u
.ufs_sb
.s_swab
;
674 retval
= -ENAMETOOLONG
;
675 if (dentry
->d_name
.len
> UFS_MAXNAMLEN
)
679 bh
= ufs_find_entry (dir
, dentry
->d_name
.name
, dentry
->d_name
.len
, &de
);
683 inode
= dentry
->d_inode
;
687 if (SWAB32(de
->d_ino
) != inode
->i_ino
)
690 if (!ufs_empty_dir (inode
))
692 else if (SWAB32(de
->d_ino
) != inode
->i_ino
)
695 retval
= ufs_delete_entry (dir
, de
, bh
);
696 dir
->i_version
= ++event
;
700 mark_buffer_dirty(bh
, 1);
702 ll_rw_block (WRITE
, 1, &bh
);
705 if (inode
->i_nlink
!= 2)
706 ufs_warning (inode
->i_sb
, "ufs_rmdir",
707 "empty directory has nlink!=2 (%d)",
709 inode
->i_version
= ++event
;
712 mark_inode_dirty(inode
);
714 inode
->i_ctime
= dir
->i_ctime
= dir
->i_mtime
= CURRENT_TIME
;
715 mark_inode_dirty(dir
);
726 int ufs_unlink(struct inode
* dir
, struct dentry
*dentry
)
728 struct super_block
* sb
;
730 struct inode
* inode
;
731 struct buffer_head
* bh
;
732 struct ufs_dir_entry
* de
;
733 unsigned flags
, swab
;
736 flags
= sb
->u
.ufs_sb
.s_flags
;
737 swab
= sb
->u
.ufs_sb
.s_swab
;
739 retval
= -ENAMETOOLONG
;
740 if (dentry
->d_name
.len
> UFS_MAXNAMLEN
)
744 bh
= ufs_find_entry (dir
, dentry
->d_name
.name
, dentry
->d_name
.len
, &de
);
745 UFSD(("de: ino %u, reclen %u, namelen %u, name %s\n", SWAB32(de
->d_ino
),
746 SWAB16(de
->d_reclen
), ufs_get_de_namlen(de
), de
->d_name
))
750 inode
= dentry
->d_inode
;
754 if (SWAB32(de
->d_ino
) != inode
->i_ino
)
757 if (!inode
->i_nlink
) {
758 ufs_warning (inode
->i_sb
, "ufs_unlink",
759 "Deleting nonexistent file (%lu), %d",
760 inode
->i_ino
, inode
->i_nlink
);
763 retval
= ufs_delete_entry (dir
, de
, bh
);
766 dir
->i_version
= ++event
;
767 mark_buffer_dirty(bh
, 1);
769 ll_rw_block (WRITE
, 1, &bh
);
772 dir
->i_ctime
= dir
->i_mtime
= CURRENT_TIME
;
773 mark_inode_dirty(dir
);
775 mark_inode_dirty(inode
);
776 inode
->i_ctime
= dir
->i_ctime
;
778 d_delete(dentry
); /* This also frees the inode */
788 * Create symbolic link. We use only slow symlinks at this time.
790 int ufs_symlink (struct inode
* dir
, struct dentry
* dentry
,
791 const char * symname
)
793 struct super_block
* sb
;
794 struct ufs_dir_entry
* de
;
795 struct inode
* inode
;
796 struct buffer_head
* bh
, * name_block
;
806 swab
= sb
->u
.ufs_sb
.s_swab
;
807 bh
= name_block
= NULL
;
810 if (!(inode
= ufs_new_inode (dir
, S_IFLNK
, &err
))) {
813 inode
->i_mode
= S_IFLNK
| S_IRWXUGO
;
814 inode
->i_op
= &ufs_symlink_inode_operations
;
815 for (l
= 0; l
< sb
->s_blocksize
- 1 && symname
[l
]; l
++);
817 /***if (l >= sizeof (inode->u.ufs_i.i_data)) {***/
820 name_block
= ufs_bread (inode
, 0, 1, &err
);
823 mark_inode_dirty(inode
);
827 link
= name_block
->b_data
;
831 link
= (char *) inode
->u
.ufs_i
.i_u1
.i_data
;
834 while (i
< sb
->s_blocksize
- 1 && (c
= *(symname
++)))
838 mark_buffer_dirty(name_block
, 1);
842 mark_inode_dirty(inode
);
844 bh
= ufs_add_entry (dir
, dentry
->d_name
.name
, dentry
->d_name
.len
, &de
, &err
);
847 de
->d_ino
= SWAB32(inode
->i_ino
);
848 dir
->i_version
= ++event
;
849 mark_buffer_dirty(bh
, 1);
851 ll_rw_block (WRITE
, 1, &bh
);
855 d_instantiate(dentry
, inode
);
862 mark_inode_dirty(inode
);
867 int ufs_link (struct dentry
* old_dentry
, struct inode
* dir
,
868 struct dentry
*dentry
)
870 struct super_block
* sb
;
871 struct inode
*inode
= old_dentry
->d_inode
;
872 struct ufs_dir_entry
* de
;
873 struct buffer_head
* bh
;
877 inode
= old_dentry
->d_inode
;
879 swab
= sb
->u
.ufs_sb
.s_swab
;
881 if (S_ISDIR(inode
->i_mode
))
884 if (IS_APPEND(inode
) || IS_IMMUTABLE(inode
))
887 if (inode
->i_nlink
>= UFS_LINK_MAX
)
890 bh
= ufs_add_entry (dir
, dentry
->d_name
.name
, dentry
->d_name
.len
, &de
, &err
);
894 de
->d_ino
= SWAB32(inode
->i_ino
);
895 dir
->i_version
= ++event
;
896 mark_buffer_dirty(bh
, 1);
898 ll_rw_block (WRITE
, 1, &bh
);
903 inode
->i_ctime
= CURRENT_TIME
;
904 mark_inode_dirty(inode
);
906 d_instantiate(dentry
, inode
);
911 #define PARENT_INO(buffer) \
912 ((struct ufs_dir_entry *) ((char *) buffer + \
913 SWAB16(((struct ufs_dir_entry *) buffer)->d_reclen)))->d_ino
915 * rename uses retrying to avoid race-conditions: at least they should be
917 * it tries to allocate all the blocks, then sanity-checks, and if the sanity-
918 * checks fail, it tries to restart itself again. Very practical - no changes
919 * are done until we know everything works ok.. and then all the changes can be
920 * done in one fell swoop when we have claimed all the buffers needed.
922 * Anybody can rename anything with this: the permission checks are left to the
923 * higher-level routines.
925 static int do_ufs_rename (struct inode
* old_dir
, struct dentry
* old_dentry
,
926 struct inode
* new_dir
, struct dentry
* new_dentry
)
928 struct super_block
* sb
;
929 struct inode
* old_inode
, * new_inode
;
930 struct buffer_head
* old_bh
, * new_bh
, * dir_bh
;
931 struct ufs_dir_entry
* old_de
, * new_de
;
933 unsigned flags
, swab
;
936 flags
= sb
->u
.ufs_sb
.s_flags
;
937 swab
= sb
->u
.ufs_sb
.s_swab
;
941 old_inode
= new_inode
= NULL
;
942 old_bh
= new_bh
= dir_bh
= NULL
;
944 retval
= -ENAMETOOLONG
;
945 if (old_dentry
->d_name
.len
> UFS_MAXNAMLEN
)
948 old_bh
= ufs_find_entry (old_dir
, old_dentry
->d_name
.name
, old_dentry
->d_name
.len
, &old_de
);
950 * Check for inode number is _not_ due to possible IO errors.
951 * We might rmdir the source, keep it as pwd of some process
952 * and merrily kill the link to whatever was created under the
953 * same name. Goodbye sticky bit ;-<
956 old_inode
= old_dentry
->d_inode
;
957 if (!old_bh
|| SWAB32(old_de
->d_ino
) != old_inode
->i_ino
)
960 new_inode
= new_dentry
->d_inode
;
961 new_bh
= ufs_find_entry (new_dir
, new_dentry
->d_name
.name
, new_dentry
->d_name
.len
, &new_de
);
967 DQUOT_INIT(new_inode
);
971 if (new_inode
== old_inode
)
973 if (S_ISDIR(old_inode
->i_mode
)) {
975 if (is_subdir(new_dentry
, old_dentry
))
978 /* Prune any children before testing for busy */
979 if (new_dentry
->d_count
> 1)
980 shrink_dcache_parent(new_dentry
);
982 if (new_dentry
->d_count
> 1)
985 if (!ufs_empty_dir (new_inode
))
989 dir_bh
= ufs_bread (old_inode
, 0, 0, &retval
);
992 if (SWAB32(PARENT_INO(dir_bh
->b_data
)) != old_dir
->i_ino
)
995 if (!new_inode
&& new_dir
->i_nlink
>= UFS_LINK_MAX
)
1000 new_bh
= ufs_add_entry (new_dir
, new_dentry
->d_name
.name
, new_dentry
->d_name
.len
, &new_de
,
1004 new_dir
->i_version
= ++event
;
1009 new_de
->d_ino
= SWAB32(old_inode
->i_ino
);
1010 ufs_delete_entry (old_dir
, old_de
, old_bh
);
1012 old_dir
->i_version
= ++event
;
1014 new_inode
->i_nlink
--;
1015 new_inode
->i_ctime
= CURRENT_TIME
;
1016 mark_inode_dirty(new_inode
);
1018 old_dir
->i_ctime
= old_dir
->i_mtime
= CURRENT_TIME
;
1019 mark_inode_dirty(old_dir
);
1021 PARENT_INO(dir_bh
->b_data
) = SWAB32(new_dir
->i_ino
);
1022 mark_buffer_dirty(dir_bh
, 1);
1024 mark_inode_dirty(old_dir
);
1026 new_inode
->i_nlink
--;
1027 mark_inode_dirty(new_inode
);
1030 mark_inode_dirty(new_dir
);
1033 mark_buffer_dirty(old_bh
, 1);
1034 if (IS_SYNC(old_dir
)) {
1035 ll_rw_block (WRITE
, 1, &old_bh
);
1036 wait_on_buffer (old_bh
);
1039 mark_buffer_dirty(new_bh
, 1);
1040 if (IS_SYNC(new_dir
)) {
1041 ll_rw_block (WRITE
, 1, &new_bh
);
1042 wait_on_buffer (new_bh
);
1045 /* Update the dcache */
1046 d_move(old_dentry
, new_dentry
);
1059 * Ok, rename also locks out other renames, as they can change the parent of
1060 * a directory, and we don't want any races. Other races are checked for by
1061 * "do_rename()", which restarts if there are inconsistencies.
1063 * Note that there is no race between different filesystems: it's only within
1064 * the same device that races occur: many renames can happen at once, as long
1065 * as they are on different partitions.
1067 * In the second extended file system, we use a lock flag stored in the memory
1068 * super-block. This way, we really lock other renames only if they occur
1069 * on the same file system
1071 int ufs_rename (struct inode
* old_dir
, struct dentry
*old_dentry
,
1072 struct inode
* new_dir
, struct dentry
*new_dentry
)
1078 while (old_dir
->i_sb
->u
.ufs_sb
.s_rename_lock
)
1079 sleep_on (&old_dir
->i_sb
->u
.ufs_sb
.s_rename_wait
);
1080 old_dir
->i_sb
->u
.ufs_sb
.s_rename_lock
= 1;
1081 result
= do_ufs_rename (old_dir
, old_dentry
, new_dir
, new_dentry
);
1082 old_dir
->i_sb
->u
.ufs_sb
.s_rename_lock
= 0;
1083 wake_up (&old_dir
->i_sb
->u
.ufs_sb
.s_rename_wait
);