xattr.c (85db90e77806d48a19fda77dabe8897d369a1710) | xattr.c (6c3faba4421e230d77a181c260972229c542dec9) |
---|---|
1/* -*- mode: c; c-basic-offset: 8; -*- 2 * vim: noexpandtab sw=8 ts=8 sts=0: 3 * 4 * xattr.c 5 * 6 * Copyright (C) 2004, 2008 Oracle. All rights reserved. 7 * 8 * CREDITS: --- 2312 unchanged lines hidden (view full) --- 2321 } 2322 } 2323 2324out: 2325 return ret; 2326} 2327 2328/* | 1/* -*- mode: c; c-basic-offset: 8; -*- 2 * vim: noexpandtab sw=8 ts=8 sts=0: 3 * 4 * xattr.c 5 * 6 * Copyright (C) 2004, 2008 Oracle. All rights reserved. 7 * 8 * CREDITS: --- 2312 unchanged lines hidden (view full) --- 2321 } 2322 } 2323 2324out: 2325 return ret; 2326} 2327 2328/* |
2329 * This function only called duing creating inode 2330 * for init security/acl xattrs of the new inode. 2331 * The xattrs could be put into ibody or extent block, 2332 * xattr bucket would not be use in this case. 2333 * transanction credits also be reserved in here. 2334 */ 2335int ocfs2_xattr_set_handle(handle_t *handle, 2336 struct inode *inode, 2337 struct buffer_head *di_bh, 2338 int name_index, 2339 const char *name, 2340 const void *value, 2341 size_t value_len, 2342 int flags, 2343 struct ocfs2_alloc_context *meta_ac, 2344 struct ocfs2_alloc_context *data_ac) 2345{ 2346 struct ocfs2_dinode *di; 2347 int ret; 2348 2349 struct ocfs2_xattr_info xi = { 2350 .name_index = name_index, 2351 .name = name, 2352 .value = value, 2353 .value_len = value_len, 2354 }; 2355 2356 struct ocfs2_xattr_search xis = { 2357 .not_found = -ENODATA, 2358 }; 2359 2360 struct ocfs2_xattr_search xbs = { 2361 .not_found = -ENODATA, 2362 }; 2363 2364 struct ocfs2_xattr_set_ctxt ctxt = { 2365 .handle = handle, 2366 .meta_ac = meta_ac, 2367 .data_ac = data_ac, 2368 }; 2369 2370 if (!ocfs2_supports_xattr(OCFS2_SB(inode->i_sb))) 2371 return -EOPNOTSUPP; 2372 2373 xis.inode_bh = xbs.inode_bh = di_bh; 2374 di = (struct ocfs2_dinode *)di_bh->b_data; 2375 2376 down_write(&OCFS2_I(inode)->ip_xattr_sem); 2377 2378 ret = ocfs2_xattr_ibody_find(inode, name_index, name, &xis); 2379 if (ret) 2380 goto cleanup; 2381 if (xis.not_found) { 2382 ret = ocfs2_xattr_block_find(inode, name_index, name, &xbs); 2383 if (ret) 2384 goto cleanup; 2385 } 2386 2387 ret = __ocfs2_xattr_set_handle(inode, di, &xi, &xis, &xbs, &ctxt); 2388 2389cleanup: 2390 up_write(&OCFS2_I(inode)->ip_xattr_sem); 2391 brelse(xbs.xattr_bh); 2392 2393 return ret; 2394} 2395 2396/* |
|
2329 * ocfs2_xattr_set() 2330 * 2331 * Set, replace or remove an extended attribute for this inode. 2332 * value is NULL to remove an existing extended attribute, else either 2333 * create or replace an extended attribute. 2334 */ 2335int ocfs2_xattr_set(struct inode *inode, 2336 int name_index, --- 2673 unchanged lines hidden --- | 2397 * ocfs2_xattr_set() 2398 * 2399 * Set, replace or remove an extended attribute for this inode. 2400 * value is NULL to remove an existing extended attribute, else either 2401 * create or replace an extended attribute. 2402 */ 2403int ocfs2_xattr_set(struct inode *inode, 2404 int name_index, --- 2673 unchanged lines hidden --- |