diff options
| -rw-r--r-- | fs/xfs/xfs_vnodeops.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 4fbc3e1cac00..1a6782eaf5d4 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c | |||
| @@ -2366,10 +2366,15 @@ xfs_remove( | |||
| 2366 | 2366 | ||
| 2367 | namelen = VNAMELEN(dentry); | 2367 | namelen = VNAMELEN(dentry); |
| 2368 | 2368 | ||
| 2369 | if (!xfs_get_dir_entry(dentry, &ip)) { | ||
| 2370 | dm_di_mode = ip->i_d.di_mode; | ||
| 2371 | IRELE(ip); | ||
| 2372 | } | ||
| 2373 | |||
| 2369 | if (DM_EVENT_ENABLED(dir_vp->v_vfsp, dp, DM_EVENT_REMOVE)) { | 2374 | if (DM_EVENT_ENABLED(dir_vp->v_vfsp, dp, DM_EVENT_REMOVE)) { |
| 2370 | error = XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dir_vp, | 2375 | error = XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, dir_vp, |
| 2371 | DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, | 2376 | DM_RIGHT_NULL, NULL, DM_RIGHT_NULL, |
| 2372 | name, NULL, 0, 0, 0); | 2377 | name, NULL, dm_di_mode, 0, 0); |
| 2373 | if (error) | 2378 | if (error) |
| 2374 | return error; | 2379 | return error; |
| 2375 | } | 2380 | } |
| @@ -2995,7 +3000,7 @@ xfs_rmdir( | |||
| 2995 | int cancel_flags; | 3000 | int cancel_flags; |
| 2996 | int committed; | 3001 | int committed; |
| 2997 | bhv_vnode_t *dir_vp; | 3002 | bhv_vnode_t *dir_vp; |
| 2998 | int dm_di_mode = 0; | 3003 | int dm_di_mode = S_IFDIR; |
| 2999 | int last_cdp_link; | 3004 | int last_cdp_link; |
| 3000 | int namelen; | 3005 | int namelen; |
| 3001 | uint resblks; | 3006 | uint resblks; |
| @@ -3010,11 +3015,16 @@ xfs_rmdir( | |||
| 3010 | return XFS_ERROR(EIO); | 3015 | return XFS_ERROR(EIO); |
| 3011 | namelen = VNAMELEN(dentry); | 3016 | namelen = VNAMELEN(dentry); |
| 3012 | 3017 | ||
| 3018 | if (!xfs_get_dir_entry(dentry, &cdp)) { | ||
| 3019 | dm_di_mode = cdp->i_d.di_mode; | ||
| 3020 | IRELE(cdp); | ||
| 3021 | } | ||
| 3022 | |||
| 3013 | if (DM_EVENT_ENABLED(dir_vp->v_vfsp, dp, DM_EVENT_REMOVE)) { | 3023 | if (DM_EVENT_ENABLED(dir_vp->v_vfsp, dp, DM_EVENT_REMOVE)) { |
| 3014 | error = XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, | 3024 | error = XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, |
| 3015 | dir_vp, DM_RIGHT_NULL, | 3025 | dir_vp, DM_RIGHT_NULL, |
| 3016 | NULL, DM_RIGHT_NULL, | 3026 | NULL, DM_RIGHT_NULL, |
| 3017 | name, NULL, 0, 0, 0); | 3027 | name, NULL, dm_di_mode, 0, 0); |
| 3018 | if (error) | 3028 | if (error) |
| 3019 | return XFS_ERROR(error); | 3029 | return XFS_ERROR(error); |
| 3020 | } | 3030 | } |
