[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Bug#190732: [PATCH] hurd/libdiskfs/dir-renamed.c
From: |
Marco Gerards |
Subject: |
Bug#190732: [PATCH] hurd/libdiskfs/dir-renamed.c |
Date: |
16 Jul 2003 20:17:28 +0200 |
User-agent: |
Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 |
Marco Gerards <metgerards@student.han.nl> writes:
> I have a look at this patch tommorrow to check if it has the same
> problem with my patch and send in a new patch or I'll say what the
> problem is.
The patch worked perfectly for me!
As I've promissed, I've included my version with this mail. Perhaps it
can be useful.
Thanks,
Marco
2003-07-16 Marco Gerards <metgerards@student.han.nl>
* dir-renamed.c (diskfs_rename_dir): Move the diskfs_lookup for
REMOVE up to correctly check for access rights. Move the assertion
to after the error check.
Common subdirectories: /home/marco/src/hurdcvs/hurd/libdiskfs/CVS and
libdiskfs/CVS
diff -up /home/marco/src/hurdcvs/hurd/libdiskfs/dir-renamed.c
libdiskfs/dir-renamed.c
--- /home/marco/src/hurdcvs/hurd/libdiskfs/dir-renamed.c 2001-10-12
04:49:17.000000000 +0200
+++ libdiskfs/dir-renamed.c 2003-07-16 21:41:57.000000000 +0200
@@ -76,6 +76,7 @@ diskfs_rename_dir (struct node *fdp, str
void *buf = alloca (diskfs_dirstat_size);
struct dirstat *ds;
struct dirstat *tmpds;
+ struct dirstat *remds = 0;
mutex_lock (&tdp->lock);
diskfs_nref (tdp); /* reference and lock will get consumed by
@@ -120,6 +121,17 @@ diskfs_rename_dir (struct node *fdp, str
if (err && err != ENOENT)
goto out;
+ ds = buf;
+ mutex_unlock (&fnp->lock);
+ remds = alloca (diskfs_dirstat_size);
+ err = diskfs_lookup (fdp, fromname, REMOVE, &tmpnp, remds, fromcred);
+
+ if (err)
+ goto out;
+
+ assert (tmpnp == fnp);
+ diskfs_nrele (tmpnp);
+
/* 2: Set our .. to point to the new parent */
if (fdp != tdp)
{
@@ -196,15 +208,9 @@ diskfs_rename_dir (struct node *fdp, str
goto out;
/* 4: Remove the entry in fdp. */
- ds = buf;
- mutex_unlock (&fnp->lock);
- err = diskfs_lookup (fdp, fromname, REMOVE, &tmpnp, ds, fromcred);
- assert (tmpnp == fnp);
- diskfs_nrele (tmpnp);
- if (err)
- goto out;
- diskfs_dirremove (fdp, fnp, fromname, ds);
+ diskfs_dirremove (fdp, fnp, fromname, remds);
+ remds = 0;
ds = 0;
fnp->dn_stat.st_nlink--;
fnp->dn_set_ctime = 1;
@@ -225,5 +231,7 @@ diskfs_rename_dir (struct node *fdp, str
mutex_unlock (&fnp->lock);
if (ds)
diskfs_drop_dirstat (tdp, ds);
+ if (remds)
+ diskfs_drop_dirstat (fdp, remds);
return err;
}
- Bug#190732: [PATCH] hurd/libdiskfs/dir-renamed.c, Marcus Brinkmann, 2003/07/15
- Bug#190732: [PATCH] hurd/libdiskfs/dir-renamed.c, Ognyan Kulev, 2003/07/15
- Bug#190732: [PATCH] hurd/libdiskfs/dir-renamed.c, Marco Gerards, 2003/07/15
- Bug#190732: [PATCH] hurd/libdiskfs/dir-renamed.c,
Marco Gerards <=
- Bug#190732: [PATCH] hurd/libdiskfs/dir-renamed.c, Ognyan Kulev, 2003/07/17
- Bug#190732: [PATCH] hurd/libdiskfs/dir-renamed.c, Marco Gerards, 2003/07/18
- Bug#190732: [PATCH] hurd/libdiskfs/dir-renamed.c, Ognyan Kulev, 2003/07/21
- Bug#190732: [PATCH] hurd/libdiskfs/dir-renamed.c, Ognyan Kulev, 2003/07/21
- Bug#190732: [PATCH] hurd/libdiskfs/dir-renamed.c, Marco Gerards, 2003/07/21
- Bug#190732: [PATCH] hurd/libdiskfs/dir-renamed.c, Ognyan Kulev, 2003/07/27
- Message not available
- Bug#190732: [PATCH] hurd/libdiskfs/dir-renamed.c, Ognyan Kulev, 2003/07/28
- Bug#190732: [PATCH] hurd/libdiskfs/dir-renamed.c, Ognyan Kulev, 2003/07/29