diff options
Diffstat (limited to 'fs/orangefs/inode.c')
-rw-r--r-- | fs/orangefs/inode.c | 26 |
1 files changed, 6 insertions, 20 deletions
diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c index 2382e267b49e..85640e955cde 100644 --- a/fs/orangefs/inode.c +++ b/fs/orangefs/inode.c | |||
@@ -18,8 +18,8 @@ static int read_one_page(struct page *page) | |||
18 | int max_block; | 18 | int max_block; |
19 | ssize_t bytes_read = 0; | 19 | ssize_t bytes_read = 0; |
20 | struct inode *inode = page->mapping->host; | 20 | struct inode *inode = page->mapping->host; |
21 | const __u32 blocksize = PAGE_CACHE_SIZE; /* inode->i_blksize */ | 21 | const __u32 blocksize = PAGE_SIZE; /* inode->i_blksize */ |
22 | const __u32 blockbits = PAGE_CACHE_SHIFT; /* inode->i_blkbits */ | 22 | const __u32 blockbits = PAGE_SHIFT; /* inode->i_blkbits */ |
23 | struct iov_iter to; | 23 | struct iov_iter to; |
24 | struct bio_vec bv = {.bv_page = page, .bv_len = PAGE_SIZE}; | 24 | struct bio_vec bv = {.bv_page = page, .bv_len = PAGE_SIZE}; |
25 | 25 | ||
@@ -86,7 +86,7 @@ static int orangefs_readpages(struct file *file, | |||
86 | "failure adding page to cache, read_one_page returned: %d\n", | 86 | "failure adding page to cache, read_one_page returned: %d\n", |
87 | ret); | 87 | ret); |
88 | } else { | 88 | } else { |
89 | page_cache_release(page); | 89 | put_page(page); |
90 | } | 90 | } |
91 | } | 91 | } |
92 | BUG_ON(!list_empty(pages)); | 92 | BUG_ON(!list_empty(pages)); |
@@ -204,22 +204,8 @@ static int orangefs_setattr_size(struct inode *inode, struct iattr *iattr) | |||
204 | if (ret != 0) | 204 | if (ret != 0) |
205 | return ret; | 205 | return ret; |
206 | 206 | ||
207 | /* | 207 | if (orig_size != i_size_read(inode)) |
208 | * Only change the c/mtime if we are changing the size or we are | ||
209 | * explicitly asked to change it. This handles the semantic difference | ||
210 | * between truncate() and ftruncate() as implemented in the VFS. | ||
211 | * | ||
212 | * The regular truncate() case without ATTR_CTIME and ATTR_MTIME is a | ||
213 | * special case where we need to update the times despite not having | ||
214 | * these flags set. For all other operations the VFS set these flags | ||
215 | * explicitly if it wants a timestamp update. | ||
216 | */ | ||
217 | if (orig_size != i_size_read(inode) && | ||
218 | !(iattr->ia_valid & (ATTR_CTIME | ATTR_MTIME))) { | ||
219 | iattr->ia_ctime = iattr->ia_mtime = | ||
220 | current_fs_time(inode->i_sb); | ||
221 | iattr->ia_valid |= ATTR_CTIME | ATTR_MTIME; | 208 | iattr->ia_valid |= ATTR_CTIME | ATTR_MTIME; |
222 | } | ||
223 | 209 | ||
224 | return ret; | 210 | return ret; |
225 | } | 211 | } |
@@ -328,7 +314,7 @@ static int orangefs_init_iops(struct inode *inode) | |||
328 | case S_IFREG: | 314 | case S_IFREG: |
329 | inode->i_op = &orangefs_file_inode_operations; | 315 | inode->i_op = &orangefs_file_inode_operations; |
330 | inode->i_fop = &orangefs_file_operations; | 316 | inode->i_fop = &orangefs_file_operations; |
331 | inode->i_blkbits = PAGE_CACHE_SHIFT; | 317 | inode->i_blkbits = PAGE_SHIFT; |
332 | break; | 318 | break; |
333 | case S_IFLNK: | 319 | case S_IFLNK: |
334 | inode->i_op = &orangefs_symlink_inode_operations; | 320 | inode->i_op = &orangefs_symlink_inode_operations; |
@@ -456,7 +442,7 @@ struct inode *orangefs_new_inode(struct super_block *sb, struct inode *dir, | |||
456 | inode->i_uid = current_fsuid(); | 442 | inode->i_uid = current_fsuid(); |
457 | inode->i_gid = current_fsgid(); | 443 | inode->i_gid = current_fsgid(); |
458 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 444 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
459 | inode->i_size = PAGE_CACHE_SIZE; | 445 | inode->i_size = PAGE_SIZE; |
460 | inode->i_rdev = dev; | 446 | inode->i_rdev = dev; |
461 | 447 | ||
462 | error = insert_inode_locked4(inode, hash, orangefs_test_inode, ref); | 448 | error = insert_inode_locked4(inode, hash, orangefs_test_inode, ref); |