|
|
| version 1.701, 2007/06/29 06:13:25 | version 1.702, 2007/07/09 06:12:03 |
|---|---|
| Line 51 | Line 51 |
| #include "xfs_refcache.h" | #include "xfs_refcache.h" |
| #include "xfs_trans_space.h" | #include "xfs_trans_space.h" |
| #include "xfs_log_priv.h" | #include "xfs_log_priv.h" |
| #include "xfs_filestream.h" | |
| STATIC int | STATIC int |
| xfs_open( | xfs_open( |
| Line 783 xfs_setattr( | Line 784 xfs_setattr( |
| di_flags |= XFS_DIFLAG_PROJINHERIT; | di_flags |= XFS_DIFLAG_PROJINHERIT; |
| if (vap->va_xflags & XFS_XFLAG_NODEFRAG) | if (vap->va_xflags & XFS_XFLAG_NODEFRAG) |
| di_flags |= XFS_DIFLAG_NODEFRAG; | di_flags |= XFS_DIFLAG_NODEFRAG; |
| if (vap->va_xflags & XFS_XFLAG_FILESTREAM) | |
| di_flags |= XFS_DIFLAG_FILESTREAM; | |
| if ((ip->i_d.di_mode & S_IFMT) == S_IFDIR) { | if ((ip->i_d.di_mode & S_IFMT) == S_IFDIR) { |
| if (vap->va_xflags & XFS_XFLAG_RTINHERIT) | if (vap->va_xflags & XFS_XFLAG_RTINHERIT) |
| di_flags |= XFS_DIFLAG_RTINHERIT; | di_flags |= XFS_DIFLAG_RTINHERIT; |
| Line 1536 xfs_release( | Line 1539 xfs_release( |
| if (vp->v_vfsp->vfs_flag & VFS_RDONLY) | if (vp->v_vfsp->vfs_flag & VFS_RDONLY) |
| return 0; | return 0; |
| if (!XFS_FORCED_SHUTDOWN(ip->i_mount)) { | if (!XFS_FORCED_SHUTDOWN(mp)) { |
| /* | |
| * If we are using filestreams, and we have an unlinked | |
| * file that we are processing the last close on, then nothing | |
| * will be able to reopen and write to this file. Purge this | |
| * inode from the filestreams cache so that it doesn't delay | |
| * teardown of the inode. | |
| */ | |
| if ((ip->i_d.di_nlink == 0) && xfs_inode_is_filestream(ip)) | |
| xfs_filestream_deassociate(ip); | |
| /* | /* |
| * If we previously truncated this file and removed old data | * If we previously truncated this file and removed old data |
| * in the process, we want to initiate "early" writeout on | * in the process, we want to initiate "early" writeout on |
| Line 1551 xfs_release( | Line 1564 xfs_release( |
| bhv_vop_flush_pages(vp, 0, -1, XFS_B_ASYNC, FI_NONE); | bhv_vop_flush_pages(vp, 0, -1, XFS_B_ASYNC, FI_NONE); |
| } | } |
| #ifdef HAVE_REFCACHE | #ifdef HAVE_REFCACHE |
| /* If we are in the NFS reference cache then don't do this now */ | /* If we are in the NFS reference cache then don't do this now */ |
| if (ip->i_refcache) | if (ip->i_refcache) |
| Line 2541 xfs_remove( | Line 2553 xfs_remove( |
| */ | */ |
| xfs_refcache_purge_ip(ip); | xfs_refcache_purge_ip(ip); |
| /* | |
| * If we are using filestreams, kill the stream association. | |
| * If the file is still open it may get a new one but that | |
| * will get killed on last close in xfs_close() so we don't | |
| * have to worry about that. | |
| */ | |
| if (link_zero && xfs_inode_is_filestream(ip)) | |
| xfs_filestream_deassociate(ip); | |
| vn_trace_exit(XFS_ITOV(ip), __FUNCTION__, (inst_t *)__return_address); | vn_trace_exit(XFS_ITOV(ip), __FUNCTION__, (inst_t *)__return_address); |
| /* | /* |