/* * symlink.c * * Copyright (c) 1999 Al Smith * * Portions derived from work (c) 1995,1996 Christian Vogelgsang. */ #include #include #include #include "efs.h" static int efs_symlink_readpage(struct file *file, struct page *page) { char *link = page_address(page); struct buffer_head * bh; struct inode * inode = page->mapping->host; efs_block_t size = inode->i_size; int err; err = -ENAMETOOLONG; if (size > 2 * EFS_BLOCKSIZE) goto fail; /* read first 512 bytes of link target */ err = -EIO; bh = sb_bread(inode->i_sb, efs_bmap(inode, 0)); if (!bh) goto fail; memcpy(link, bh->b_data, (size > EFS_BLOCKSIZE) ? EFS_BLOCKSIZE : size); brelse(bh); if (size > EFS_BLOCKSIZE) { bh = sb_bread(inode->i_sb, efs_bmap(inode, 1)); if (!bh) goto fail; memcpy(link + EFS_BLOCKSIZE, bh->b_data, size - EFS_BLOCKSIZE); brelse(bh); } link[size] = '\0'; SetPageUptodate(page); unlock_page(page); return 0; fail: SetPageError(page); unlock_page(page); return err; } const struct address_space_operations efs_symlink_aops = { .readpage = efs_symlink_readpage }; master net-next plumbingsTobias Klauser
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSowmini Varadhan <sowmini.varadhan@oracle.com>2017-01-10 07:47:15 -0800
committerDavid S. Miller <davem@davemloft.net>2017-01-10 21:02:42 -0500
commita505e58252715bbc18a0ee1abae23615fe2586db (patch)
treed816d838641ba1082b2356f4e3a365039e63b14d /include/scsi/osd_sense.h
parent3bf003335ba356aac5a43e28640159d4ae8a2a60 (diff)
packet: pdiag_put_ring() should return TX_RING info for TPACKET_V3
Commit 7f953ab2ba46 ("af_packet: TX_RING support for TPACKET_V3") now makes it possible to use TX_RING with TPACKET_V3, so make the the relevant information available via 'ss -e -a --packet' Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/scsi/osd_sense.h')