From 4ab5ed8a492a469af189f4dbafa70674d3f2f8d7 Mon Sep 17 00:00:00 2001 From: szaka Date: Sun, 18 Nov 2007 22:37:04 +0000 Subject: [PATCH] fix: successful file/directory removal may reported "Input/Output error" --- libntfs-3g/dir.c | 8 ++++++-- src/ntfs-3g.c | 16 ++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/libntfs-3g/dir.c b/libntfs-3g/dir.c index b8a16877..b82885d3 100644 --- a/libntfs-3g/dir.c +++ b/libntfs-3g/dir.c @@ -1488,7 +1488,7 @@ search: */ if (ni->mrec->link_count) { ntfs_inode_update_times(ni, NTFS_UPDATE_CTIME); - goto out; + goto ok; } ntfs_attr_reinit_search_ctx(actx); while (!ntfs_attrs_walk(actx)) { @@ -1530,12 +1530,16 @@ search: "Leaving inconsistent metadata.\n"); } ni = NULL; +ok: + ntfs_inode_update_times(dir_ni, NTFS_UPDATE_MCTIME); out: if (actx) ntfs_attr_put_search_ctx(actx); if (ictx) ntfs_index_ctx_put(ictx); - if (ni && ntfs_inode_close(ni) && !err) + if (ntfs_inode_close(dir_ni) && !err) + err = errno; + if (ntfs_inode_close(ni) && !err) err = errno; if (err) { errno = err; diff --git a/src/ntfs-3g.c b/src/ntfs-3g.c index f0be4709..1f4dc4f3 100644 --- a/src/ntfs-3g.c +++ b/src/ntfs-3g.c @@ -1020,21 +1020,17 @@ static int ntfs_fuse_rm(const char *org_path) res = -errno; goto exit; } - /* Delete object. */ - if (ntfs_delete(ni, dir_ni, uname, uname_len)) { + + if (ntfs_delete(ni, dir_ni, uname, uname_len)) res = -errno; - } else { - /* Inode ctime is updated in ntfs_delete() for hard links. */ - ntfs_fuse_update_times(dir_ni, NTFS_UPDATE_MCTIME); - } - /* ntfs_delete() always closes ni */ - ni = NULL; + /* ntfs_delete() always closes ni and dir_ni */ + ni = dir_ni = NULL; exit: + if (ntfs_inode_close(dir_ni)) + set_fuse_error(&res); if (ntfs_inode_close(ni)) set_fuse_error(&res); free(uname); - if (ntfs_inode_close(dir_ni)) - set_fuse_error(&res); free(path); return res; }