diff options
| -rw-r--r-- | fs/ntfs/ChangeLog | 1 | ||||
| -rw-r--r-- | fs/ntfs/attrib.c | 2 | ||||
| -rw-r--r-- | fs/ntfs/file.c | 23 |
3 files changed, 10 insertions, 16 deletions
diff --git a/fs/ntfs/ChangeLog b/fs/ntfs/ChangeLog index 2a76b1fbbfc0..dea742405161 100644 --- a/fs/ntfs/ChangeLog +++ b/fs/ntfs/ChangeLog | |||
| @@ -77,6 +77,7 @@ ToDo/Notes: | |||
| 77 | EOPNOTSUPP is returned. | 77 | EOPNOTSUPP is returned. |
| 78 | - $EA attributes can be both resident and non-resident. | 78 | - $EA attributes can be both resident and non-resident. |
| 79 | - Use %z for size_t to fix compilation warnings. (Andrew Morton) | 79 | - Use %z for size_t to fix compilation warnings. (Andrew Morton) |
| 80 | - Fix compilation warnings with gcc-4.0.2 on SUSE 10.0. | ||
| 80 | 81 | ||
| 81 | 2.1.24 - Lots of bug fixes and support more clean journal states. | 82 | 2.1.24 - Lots of bug fixes and support more clean journal states. |
| 82 | 83 | ||
diff --git a/fs/ntfs/attrib.c b/fs/ntfs/attrib.c index df2e2091f936..eda056bac256 100644 --- a/fs/ntfs/attrib.c +++ b/fs/ntfs/attrib.c | |||
| @@ -91,7 +91,7 @@ int ntfs_map_runlist_nolock(ntfs_inode *ni, VCN vcn, ntfs_attr_search_ctx *ctx) | |||
| 91 | struct page *put_this_page = NULL; | 91 | struct page *put_this_page = NULL; |
| 92 | int err = 0; | 92 | int err = 0; |
| 93 | BOOL ctx_is_temporary, ctx_needs_reset; | 93 | BOOL ctx_is_temporary, ctx_needs_reset; |
| 94 | ntfs_attr_search_ctx old_ctx; | 94 | ntfs_attr_search_ctx old_ctx = { NULL, }; |
| 95 | 95 | ||
| 96 | ntfs_debug("Mapping runlist part containing vcn 0x%llx.", | 96 | ntfs_debug("Mapping runlist part containing vcn 0x%llx.", |
| 97 | (unsigned long long)vcn); | 97 | (unsigned long long)vcn); |
diff --git a/fs/ntfs/file.c b/fs/ntfs/file.c index cdedc84e1372..cf3e6ced2d01 100644 --- a/fs/ntfs/file.c +++ b/fs/ntfs/file.c | |||
| @@ -78,12 +78,8 @@ static int ntfs_file_open(struct inode *vi, struct file *filp) | |||
| 78 | * Extend the initialized size of an attribute described by the ntfs inode @ni | 78 | * Extend the initialized size of an attribute described by the ntfs inode @ni |
| 79 | * to @new_init_size bytes. This involves zeroing any non-sparse space between | 79 | * to @new_init_size bytes. This involves zeroing any non-sparse space between |
| 80 | * the old initialized size and @new_init_size both in the page cache and on | 80 | * the old initialized size and @new_init_size both in the page cache and on |
| 81 | * disk (if relevant complete pages are zeroed in the page cache then these may | 81 | * disk (if relevant complete pages are already uptodate in the page cache then |
| 82 | * simply be marked dirty for later writeout). There is one caveat and that is | 82 | * these are simply marked dirty). |
| 83 | * that if any uptodate page cache pages between the old initialized size and | ||
| 84 | * the smaller of @new_init_size and the file size (vfs inode->i_size) are in | ||
| 85 | * memory, these need to be marked dirty without being zeroed since they could | ||
| 86 | * be non-zero due to mmap() based writes. | ||
| 87 | * | 83 | * |
| 88 | * As a side-effect, the file size (vfs inode->i_size) may be incremented as, | 84 | * As a side-effect, the file size (vfs inode->i_size) may be incremented as, |
| 89 | * in the resident attribute case, it is tied to the initialized size and, in | 85 | * in the resident attribute case, it is tied to the initialized size and, in |
| @@ -98,10 +94,10 @@ static int ntfs_file_open(struct inode *vi, struct file *filp) | |||
| 98 | * with new data via mmap() based writes, so we cannot just zero it. And since | 94 | * with new data via mmap() based writes, so we cannot just zero it. And since |
| 99 | * POSIX specifies that the behaviour of resizing a file whilst it is mmap()ped | 95 | * POSIX specifies that the behaviour of resizing a file whilst it is mmap()ped |
| 100 | * is unspecified, we choose not to do zeroing and thus we do not need to touch | 96 | * is unspecified, we choose not to do zeroing and thus we do not need to touch |
| 101 | * the page at all. For a more detailed explanation see ntfs_truncate() which | 97 | * the page at all. For a more detailed explanation see ntfs_truncate() in |
| 102 | * is in fs/ntfs/inode.c. | 98 | * fs/ntfs/inode.c. |
| 103 | * | 99 | * |
| 104 | * @cached_page and @lru_pvec are just optimisations for dealing with multiple | 100 | * @cached_page and @lru_pvec are just optimizations for dealing with multiple |
| 105 | * pages. | 101 | * pages. |
| 106 | * | 102 | * |
| 107 | * Return 0 on success and -errno on error. In the case that an error is | 103 | * Return 0 on success and -errno on error. In the case that an error is |
| @@ -110,9 +106,8 @@ static int ntfs_file_open(struct inode *vi, struct file *filp) | |||
| 110 | * this is the case, the necessary zeroing will also have happened and that all | 106 | * this is the case, the necessary zeroing will also have happened and that all |
| 111 | * metadata is self-consistent. | 107 | * metadata is self-consistent. |
| 112 | * | 108 | * |
| 113 | * Locking: This function locks the mft record of the base ntfs inode and | 109 | * Locking: i_sem on the vfs inode corrseponsind to the ntfs inode @ni must be |
| 114 | * maintains the lock throughout execution of the function. This is required | 110 | * held by the caller. |
| 115 | * so that the initialized size of the attribute can be modified safely. | ||
| 116 | */ | 111 | */ |
| 117 | static int ntfs_attr_extend_initialized(ntfs_inode *ni, const s64 new_init_size, | 112 | static int ntfs_attr_extend_initialized(ntfs_inode *ni, const s64 new_init_size, |
| 118 | struct page **cached_page, struct pagevec *lru_pvec) | 113 | struct page **cached_page, struct pagevec *lru_pvec) |
| @@ -1836,7 +1831,7 @@ static ssize_t ntfs_file_buffered_write(struct kiocb *iocb, | |||
| 1836 | VCN last_vcn; | 1831 | VCN last_vcn; |
| 1837 | LCN lcn; | 1832 | LCN lcn; |
| 1838 | unsigned long flags; | 1833 | unsigned long flags; |
| 1839 | size_t bytes, iov_ofs; | 1834 | size_t bytes, iov_ofs = 0; /* Offset in the current iovec. */ |
| 1840 | ssize_t status, written; | 1835 | ssize_t status, written; |
| 1841 | unsigned nr_pages; | 1836 | unsigned nr_pages; |
| 1842 | int err; | 1837 | int err; |
| @@ -1988,8 +1983,6 @@ static ssize_t ntfs_file_buffered_write(struct kiocb *iocb, | |||
| 1988 | last_vcn = -1; | 1983 | last_vcn = -1; |
| 1989 | if (likely(nr_segs == 1)) | 1984 | if (likely(nr_segs == 1)) |
| 1990 | buf = iov->iov_base; | 1985 | buf = iov->iov_base; |
| 1991 | else | ||
| 1992 | iov_ofs = 0; /* Offset in the current iovec. */ | ||
| 1993 | do { | 1986 | do { |
| 1994 | VCN vcn; | 1987 | VCN vcn; |
| 1995 | pgoff_t idx, start_idx; | 1988 | pgoff_t idx, start_idx; |
