inode.c (0d72b92883c651a11059d93335f33d65c6eb653b) | inode.c (5de75970c9fd7220e394b76e6d20fbafa1369b5a) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * fs/kernfs/inode.c - kernfs inode implementation 4 * 5 * Copyright (c) 2001-3 Patrick Mochel 6 * Copyright (c) 2007 SUSE Linux Products GmbH 7 * Copyright (c) 2007, 2013 Tejun Heo <tj@kernel.org> 8 */ --- 137 unchanged lines hidden (view full) --- 146 return -ENOMEM; 147 148 return simple_xattr_list(d_inode(dentry), &attrs->xattrs, buf, size); 149} 150 151static inline void set_default_inode_attr(struct inode *inode, umode_t mode) 152{ 153 inode->i_mode = mode; | 1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * fs/kernfs/inode.c - kernfs inode implementation 4 * 5 * Copyright (c) 2001-3 Patrick Mochel 6 * Copyright (c) 2007 SUSE Linux Products GmbH 7 * Copyright (c) 2007, 2013 Tejun Heo <tj@kernel.org> 8 */ --- 137 unchanged lines hidden (view full) --- 146 return -ENOMEM; 147 148 return simple_xattr_list(d_inode(dentry), &attrs->xattrs, buf, size); 149} 150 151static inline void set_default_inode_attr(struct inode *inode, umode_t mode) 152{ 153 inode->i_mode = mode; |
154 inode->i_atime = inode->i_mtime = inode_set_ctime_current(inode); | 154 inode->i_atime = inode->i_mtime = 155 inode->i_ctime = current_time(inode); |
155} 156 157static inline void set_inode_attr(struct inode *inode, 158 struct kernfs_iattrs *attrs) 159{ 160 inode->i_uid = attrs->ia_uid; 161 inode->i_gid = attrs->ia_gid; 162 inode->i_atime = attrs->ia_atime; 163 inode->i_mtime = attrs->ia_mtime; | 156} 157 158static inline void set_inode_attr(struct inode *inode, 159 struct kernfs_iattrs *attrs) 160{ 161 inode->i_uid = attrs->ia_uid; 162 inode->i_gid = attrs->ia_gid; 163 inode->i_atime = attrs->ia_atime; 164 inode->i_mtime = attrs->ia_mtime; |
164 inode_set_ctime_to_ts(inode, attrs->ia_ctime); | 165 inode->i_ctime = attrs->ia_ctime; |
165} 166 167static void kernfs_refresh_inode(struct kernfs_node *kn, struct inode *inode) 168{ 169 struct kernfs_iattrs *attrs = kn->iattr; 170 171 inode->i_mode = kn->mode; 172 if (attrs) --- 12 unchanged lines hidden (view full) --- 185 u32 request_mask, unsigned int query_flags) 186{ 187 struct inode *inode = d_inode(path->dentry); 188 struct kernfs_node *kn = inode->i_private; 189 struct kernfs_root *root = kernfs_root(kn); 190 191 down_read(&root->kernfs_iattr_rwsem); 192 kernfs_refresh_inode(kn, inode); | 166} 167 168static void kernfs_refresh_inode(struct kernfs_node *kn, struct inode *inode) 169{ 170 struct kernfs_iattrs *attrs = kn->iattr; 171 172 inode->i_mode = kn->mode; 173 if (attrs) --- 12 unchanged lines hidden (view full) --- 186 u32 request_mask, unsigned int query_flags) 187{ 188 struct inode *inode = d_inode(path->dentry); 189 struct kernfs_node *kn = inode->i_private; 190 struct kernfs_root *root = kernfs_root(kn); 191 192 down_read(&root->kernfs_iattr_rwsem); 193 kernfs_refresh_inode(kn, inode); |
193 generic_fillattr(&nop_mnt_idmap, request_mask, inode, stat); | 194 generic_fillattr(&nop_mnt_idmap, inode, stat); |
194 up_read(&root->kernfs_iattr_rwsem); 195 196 return 0; 197} 198 199static void kernfs_init_inode(struct kernfs_node *kn, struct inode *inode) 200{ 201 kernfs_get(kn); --- 98 unchanged lines hidden (view full) --- 300 return -ENODATA; 301 302 return simple_xattr_get(&attrs->xattrs, name, value, size); 303} 304 305int kernfs_xattr_set(struct kernfs_node *kn, const char *name, 306 const void *value, size_t size, int flags) 307{ | 195 up_read(&root->kernfs_iattr_rwsem); 196 197 return 0; 198} 199 200static void kernfs_init_inode(struct kernfs_node *kn, struct inode *inode) 201{ 202 kernfs_get(kn); --- 98 unchanged lines hidden (view full) --- 301 return -ENODATA; 302 303 return simple_xattr_get(&attrs->xattrs, name, value, size); 304} 305 306int kernfs_xattr_set(struct kernfs_node *kn, const char *name, 307 const void *value, size_t size, int flags) 308{ |
309 struct simple_xattr *old_xattr; |
|
308 struct kernfs_iattrs *attrs = kernfs_iattrs(kn); 309 if (!attrs) 310 return -ENOMEM; 311 | 310 struct kernfs_iattrs *attrs = kernfs_iattrs(kn); 311 if (!attrs) 312 return -ENOMEM; 313 |
312 return simple_xattr_set(&attrs->xattrs, name, value, size, flags, NULL); | 314 old_xattr = simple_xattr_set(&attrs->xattrs, name, value, size, flags); 315 if (IS_ERR(old_xattr)) 316 return PTR_ERR(old_xattr); 317 318 simple_xattr_free(old_xattr); 319 return 0; |
313} 314 315static int kernfs_vfs_xattr_get(const struct xattr_handler *handler, 316 struct dentry *unused, struct inode *inode, 317 const char *suffix, void *value, size_t size) 318{ 319 const char *name = xattr_full_name(handler, suffix); 320 struct kernfs_node *kn = inode->i_private; --- 15 unchanged lines hidden (view full) --- 336 337static int kernfs_vfs_user_xattr_add(struct kernfs_node *kn, 338 const char *full_name, 339 struct simple_xattrs *xattrs, 340 const void *value, size_t size, int flags) 341{ 342 atomic_t *sz = &kn->iattr->user_xattr_size; 343 atomic_t *nr = &kn->iattr->nr_user_xattrs; | 320} 321 322static int kernfs_vfs_xattr_get(const struct xattr_handler *handler, 323 struct dentry *unused, struct inode *inode, 324 const char *suffix, void *value, size_t size) 325{ 326 const char *name = xattr_full_name(handler, suffix); 327 struct kernfs_node *kn = inode->i_private; --- 15 unchanged lines hidden (view full) --- 343 344static int kernfs_vfs_user_xattr_add(struct kernfs_node *kn, 345 const char *full_name, 346 struct simple_xattrs *xattrs, 347 const void *value, size_t size, int flags) 348{ 349 atomic_t *sz = &kn->iattr->user_xattr_size; 350 atomic_t *nr = &kn->iattr->nr_user_xattrs; |
344 ssize_t removed_size; | 351 struct simple_xattr *old_xattr; |
345 int ret; 346 347 if (atomic_inc_return(nr) > KERNFS_MAX_USER_XATTRS) { 348 ret = -ENOSPC; 349 goto dec_count_out; 350 } 351 352 if (atomic_add_return(size, sz) > KERNFS_USER_XATTR_SIZE_LIMIT) { 353 ret = -ENOSPC; 354 goto dec_size_out; 355 } 356 | 352 int ret; 353 354 if (atomic_inc_return(nr) > KERNFS_MAX_USER_XATTRS) { 355 ret = -ENOSPC; 356 goto dec_count_out; 357 } 358 359 if (atomic_add_return(size, sz) > KERNFS_USER_XATTR_SIZE_LIMIT) { 360 ret = -ENOSPC; 361 goto dec_size_out; 362 } 363 |
357 ret = simple_xattr_set(xattrs, full_name, value, size, flags, 358 &removed_size); 359 360 if (!ret && removed_size >= 0) 361 size = removed_size; 362 else if (!ret) | 364 old_xattr = simple_xattr_set(xattrs, full_name, value, size, flags); 365 if (!old_xattr) |
363 return 0; | 366 return 0; |
367 368 if (IS_ERR(old_xattr)) { 369 ret = PTR_ERR(old_xattr); 370 goto dec_size_out; 371 } 372 373 ret = 0; 374 size = old_xattr->size; 375 simple_xattr_free(old_xattr); |
|
364dec_size_out: 365 atomic_sub(size, sz); 366dec_count_out: 367 atomic_dec(nr); 368 return ret; 369} 370 371static int kernfs_vfs_user_xattr_rm(struct kernfs_node *kn, 372 const char *full_name, 373 struct simple_xattrs *xattrs, 374 const void *value, size_t size, int flags) 375{ 376 atomic_t *sz = &kn->iattr->user_xattr_size; 377 atomic_t *nr = &kn->iattr->nr_user_xattrs; | 376dec_size_out: 377 atomic_sub(size, sz); 378dec_count_out: 379 atomic_dec(nr); 380 return ret; 381} 382 383static int kernfs_vfs_user_xattr_rm(struct kernfs_node *kn, 384 const char *full_name, 385 struct simple_xattrs *xattrs, 386 const void *value, size_t size, int flags) 387{ 388 atomic_t *sz = &kn->iattr->user_xattr_size; 389 atomic_t *nr = &kn->iattr->nr_user_xattrs; |
378 ssize_t removed_size; 379 int ret; | 390 struct simple_xattr *old_xattr; |
380 | 391 |
381 ret = simple_xattr_set(xattrs, full_name, value, size, flags, 382 &removed_size); | 392 old_xattr = simple_xattr_set(xattrs, full_name, value, size, flags); 393 if (!old_xattr) 394 return 0; |
383 | 395 |
384 if (removed_size >= 0) { 385 atomic_sub(removed_size, sz); 386 atomic_dec(nr); 387 } | 396 if (IS_ERR(old_xattr)) 397 return PTR_ERR(old_xattr); |
388 | 398 |
389 return ret; | 399 atomic_sub(old_xattr->size, sz); 400 atomic_dec(nr); 401 simple_xattr_free(old_xattr); 402 return 0; |
390} 391 392static int kernfs_vfs_user_xattr_set(const struct xattr_handler *handler, 393 struct mnt_idmap *idmap, 394 struct dentry *unused, struct inode *inode, 395 const char *suffix, const void *value, 396 size_t size, int flags) 397{ --- 44 unchanged lines hidden --- | 403} 404 405static int kernfs_vfs_user_xattr_set(const struct xattr_handler *handler, 406 struct mnt_idmap *idmap, 407 struct dentry *unused, struct inode *inode, 408 const char *suffix, const void *value, 409 size_t size, int flags) 410{ --- 44 unchanged lines hidden --- |