file.c (585a78c1f77be305b1f6adad392f16047fb66ffd) | file.c (39c1ce8eafc0ff64fb9e28536ccc7df6a8e2999d) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. 4 */ 5 6#include <linux/slab.h> 7#include <linux/compat.h> 8#include <linux/cred.h> --- 195 unchanged lines hidden (view full) --- 204 exfat_fs_error(sb, "tried to truncate zeroed cluster."); 205 goto write_size; 206 } 207 208 err = __exfat_truncate(inode); 209 if (err) 210 goto write_size; 211 | 1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd. 4 */ 5 6#include <linux/slab.h> 7#include <linux/compat.h> 8#include <linux/cred.h> --- 195 unchanged lines hidden (view full) --- 204 exfat_fs_error(sb, "tried to truncate zeroed cluster."); 205 goto write_size; 206 } 207 208 err = __exfat_truncate(inode); 209 if (err) 210 goto write_size; 211 |
212 inode->i_blocks = round_up(i_size_read(inode), sbi->cluster_size) >> 213 inode->i_blkbits; | 212 inode->i_blocks = round_up(i_size_read(inode), sbi->cluster_size) >> 9; |
214write_size: 215 aligned_size = i_size_read(inode); 216 if (aligned_size & (blocksize - 1)) { 217 aligned_size |= (blocksize - 1); 218 aligned_size++; 219 } 220 221 if (ei->i_size_ondisk > i_size_read(inode)) 222 ei->i_size_ondisk = aligned_size; 223 224 if (ei->i_size_aligned > i_size_read(inode)) 225 ei->i_size_aligned = aligned_size; 226 mutex_unlock(&sbi->s_lock); 227} 228 | 213write_size: 214 aligned_size = i_size_read(inode); 215 if (aligned_size & (blocksize - 1)) { 216 aligned_size |= (blocksize - 1); 217 aligned_size++; 218 } 219 220 if (ei->i_size_ondisk > i_size_read(inode)) 221 ei->i_size_ondisk = aligned_size; 222 223 if (ei->i_size_aligned > i_size_read(inode)) 224 ei->i_size_aligned = aligned_size; 225 mutex_unlock(&sbi->s_lock); 226} 227 |
229int exfat_getattr(struct mnt_idmap *idmap, const struct path *path, | 228int exfat_getattr(struct user_namespace *mnt_uerns, const struct path *path, |
230 struct kstat *stat, unsigned int request_mask, 231 unsigned int query_flags) 232{ 233 struct inode *inode = d_backing_inode(path->dentry); 234 struct exfat_inode_info *ei = EXFAT_I(inode); 235 | 229 struct kstat *stat, unsigned int request_mask, 230 unsigned int query_flags) 231{ 232 struct inode *inode = d_backing_inode(path->dentry); 233 struct exfat_inode_info *ei = EXFAT_I(inode); 234 |
236 generic_fillattr(&nop_mnt_idmap, inode, stat); | 235 generic_fillattr(&init_user_ns, inode, stat); |
237 exfat_truncate_atime(&stat->atime); 238 stat->result_mask |= STATX_BTIME; 239 stat->btime.tv_sec = ei->i_crtime.tv_sec; 240 stat->btime.tv_nsec = ei->i_crtime.tv_nsec; 241 stat->blksize = EXFAT_SB(inode->i_sb)->cluster_size; 242 return 0; 243} 244 | 236 exfat_truncate_atime(&stat->atime); 237 stat->result_mask |= STATX_BTIME; 238 stat->btime.tv_sec = ei->i_crtime.tv_sec; 239 stat->btime.tv_nsec = ei->i_crtime.tv_nsec; 240 stat->blksize = EXFAT_SB(inode->i_sb)->cluster_size; 241 return 0; 242} 243 |
245int exfat_setattr(struct mnt_idmap *idmap, struct dentry *dentry, | 244int exfat_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, |
246 struct iattr *attr) 247{ 248 struct exfat_sb_info *sbi = EXFAT_SB(dentry->d_sb); 249 struct inode *inode = dentry->d_inode; 250 unsigned int ia_valid; 251 int error; 252 253 if ((attr->ia_valid & ATTR_SIZE) && --- 7 unchanged lines hidden (view full) --- 261 /* Check for setting the inode time. */ 262 ia_valid = attr->ia_valid; 263 if ((ia_valid & (ATTR_MTIME_SET | ATTR_ATIME_SET | ATTR_TIMES_SET)) && 264 exfat_allow_set_time(sbi, inode)) { 265 attr->ia_valid &= ~(ATTR_MTIME_SET | ATTR_ATIME_SET | 266 ATTR_TIMES_SET); 267 } 268 | 245 struct iattr *attr) 246{ 247 struct exfat_sb_info *sbi = EXFAT_SB(dentry->d_sb); 248 struct inode *inode = dentry->d_inode; 249 unsigned int ia_valid; 250 int error; 251 252 if ((attr->ia_valid & ATTR_SIZE) && --- 7 unchanged lines hidden (view full) --- 260 /* Check for setting the inode time. */ 261 ia_valid = attr->ia_valid; 262 if ((ia_valid & (ATTR_MTIME_SET | ATTR_ATIME_SET | ATTR_TIMES_SET)) && 263 exfat_allow_set_time(sbi, inode)) { 264 attr->ia_valid &= ~(ATTR_MTIME_SET | ATTR_ATIME_SET | 265 ATTR_TIMES_SET); 266 } 267 |
269 error = setattr_prepare(&nop_mnt_idmap, dentry, attr); | 268 error = setattr_prepare(&init_user_ns, dentry, attr); |
270 attr->ia_valid = ia_valid; 271 if (error) 272 goto out; 273 274 if (((attr->ia_valid & ATTR_UID) && 275 !uid_eq(attr->ia_uid, sbi->options.fs_uid)) || 276 ((attr->ia_valid & ATTR_GID) && 277 !gid_eq(attr->ia_gid, sbi->options.fs_gid)) || --- 10 unchanged lines hidden (view full) --- 288 if (attr->ia_valid & ATTR_MODE) { 289 if (exfat_sanitize_mode(sbi, inode, &attr->ia_mode) < 0) 290 attr->ia_valid &= ~ATTR_MODE; 291 } 292 293 if (attr->ia_valid & ATTR_SIZE) 294 inode->i_mtime = inode->i_ctime = current_time(inode); 295 | 269 attr->ia_valid = ia_valid; 270 if (error) 271 goto out; 272 273 if (((attr->ia_valid & ATTR_UID) && 274 !uid_eq(attr->ia_uid, sbi->options.fs_uid)) || 275 ((attr->ia_valid & ATTR_GID) && 276 !gid_eq(attr->ia_gid, sbi->options.fs_gid)) || --- 10 unchanged lines hidden (view full) --- 287 if (attr->ia_valid & ATTR_MODE) { 288 if (exfat_sanitize_mode(sbi, inode, &attr->ia_mode) < 0) 289 attr->ia_valid &= ~ATTR_MODE; 290 } 291 292 if (attr->ia_valid & ATTR_SIZE) 293 inode->i_mtime = inode->i_ctime = current_time(inode); 294 |
296 setattr_copy(&nop_mnt_idmap, inode, attr); | 295 setattr_copy(&init_user_ns, inode, attr); |
297 exfat_truncate_atime(&inode->i_atime); 298 299 if (attr->ia_valid & ATTR_SIZE) { 300 error = exfat_block_truncate_page(inode, attr->ia_size); 301 if (error) 302 goto out; 303 304 down_write(&EXFAT_I(inode)->truncate_lock); --- 96 unchanged lines hidden --- | 296 exfat_truncate_atime(&inode->i_atime); 297 298 if (attr->ia_valid & ATTR_SIZE) { 299 error = exfat_block_truncate_page(inode, attr->ia_size); 300 if (error) 301 goto out; 302 303 down_write(&EXFAT_I(inode)->truncate_lock); --- 96 unchanged lines hidden --- |